En este tema, exploraremos los volúmenes persistentes en Kubernetes, un componente esencial para gestionar el almacenamiento de datos que necesita sobrevivir a la vida útil de los pods. Aprenderemos qué son, cómo se configuran y cómo se utilizan en un clúster de Kubernetes.
¿Qué es un Volumen Persistente?
Un Volumen Persistente (PV) es un recurso de almacenamiento en un clúster de Kubernetes que ha sido aprovisionado por un administrador. Los PVs son independientes del ciclo de vida de los pods y proporcionan una forma de almacenar datos de manera duradera.
Características Clave de los PVs:
- Persistencia: Los datos almacenados en un PV persisten más allá de la vida útil de los pods.
- Independencia: Los PVs son recursos del clúster y no están ligados a un pod específico.
- Acceso: Los PVs pueden ser accedidos por uno o más pods, dependiendo del modo de acceso configurado.
Tipos de Volúmenes Persistentes
Kubernetes soporta varios tipos de volúmenes persistentes, incluyendo:
- NFS (Network File System)
- iSCSI (Internet Small Computer Systems Interface)
- GlusterFS
- CephFS
- AWS EBS (Elastic Block Store)
- GCE PD (Google Compute Engine Persistent Disk)
- Azure Disk
Configuración de un Volumen Persistente
Para configurar un PV, se debe definir un objeto de tipo PersistentVolume
en un archivo YAML. A continuación, se muestra un ejemplo de configuración de un PV utilizando NFS:
apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs spec: capacity: storage: 10Gi accessModes: - ReadWriteMany nfs: path: /path/to/nfs server: nfs-server.example.com
Explicación del Código:
- apiVersion: La versión de la API de Kubernetes.
- kind: El tipo de recurso, en este caso
PersistentVolume
. - metadata: Información sobre el PV, como su nombre.
- spec: Especificaciones del PV.
- capacity: La capacidad de almacenamiento del PV.
- accessModes: Los modos de acceso permitidos (
ReadWriteOnce
,ReadOnlyMany
,ReadWriteMany
). - nfs: Configuración específica para el tipo de almacenamiento NFS.
Reclamaciones de Volúmenes Persistentes
Para que un pod utilice un PV, se debe crear una Reclamación de Volumen Persistente (PVC). Un PVC es una solicitud de almacenamiento por parte de un usuario. A continuación, se muestra un ejemplo de configuración de un PVC:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nfs spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi
Explicación del Código:
- apiVersion: La versión de la API de Kubernetes.
- kind: El tipo de recurso, en este caso
PersistentVolumeClaim
. - metadata: Información sobre el PVC, como su nombre.
- spec: Especificaciones del PVC.
- accessModes: Los modos de acceso solicitados.
- resources: Los recursos solicitados, como la cantidad de almacenamiento.
Uso de un PVC en un Pod
Una vez que se ha creado un PVC, se puede utilizar en un pod. A continuación, se muestra un ejemplo de cómo un pod puede utilizar un PVC:
apiVersion: v1 kind: Pod metadata: name: pod-using-pvc spec: containers: - name: my-container image: nginx volumeMounts: - mountPath: "/usr/share/nginx/html" name: my-pvc volumes: - name: my-pvc persistentVolumeClaim: claimName: pvc-nfs
Explicación del Código:
- apiVersion: La versión de la API de Kubernetes.
- kind: El tipo de recurso, en este caso
Pod
. - metadata: Información sobre el pod, como su nombre.
- spec: Especificaciones del pod.
- containers: Lista de contenedores en el pod.
- name: Nombre del contenedor.
- image: Imagen del contenedor.
- volumeMounts: Lista de volúmenes montados en el contenedor.
- mountPath: Ruta en el contenedor donde se monta el volumen.
- name: Nombre del volumen.
- volumes: Lista de volúmenes utilizados por el pod.
- name: Nombre del volumen.
- persistentVolumeClaim: Especifica el PVC a utilizar.
- claimName: Nombre del PVC.
- containers: Lista de contenedores en el pod.
Ejercicio Práctico
Ejercicio:
- Crea un
PersistentVolume
de 10Gi utilizando NFS. - Crea un
PersistentVolumeClaim
que solicite 5Gi de almacenamiento. - Crea un pod que utilice el PVC y monte el volumen en
/usr/share/nginx/html
.
Solución:
-
PersistentVolume (pv-nfs.yaml):
apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs spec: capacity: storage: 10Gi accessModes: - ReadWriteMany nfs: path: /path/to/nfs server: nfs-server.example.com
-
PersistentVolumeClaim (pvc-nfs.yaml):
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nfs spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi
-
Pod (pod-using-pvc.yaml):
apiVersion: v1 kind: Pod metadata: name: pod-using-pvc spec: containers: - name: my-container image: nginx volumeMounts: - mountPath: "/usr/share/nginx/html" name: my-pvc volumes: - name: my-pvc persistentVolumeClaim: claimName: pvc-nfs
Pasos para Ejecutar:
-
Aplica el
PersistentVolume
:kubectl apply -f pv-nfs.yaml
-
Aplica el
PersistentVolumeClaim
:kubectl apply -f pvc-nfs.yaml
-
Aplica el pod:
kubectl apply -f pod-using-pvc.yaml
Conclusión
En esta sección, hemos aprendido sobre los volúmenes persistentes en Kubernetes, cómo configurarlos y utilizarlos en un clúster. Los PVs son esenciales para aplicaciones que requieren almacenamiento duradero y persistente. En el siguiente tema, exploraremos las Reclamaciones de Volúmenes Persistentes (PVCs) en mayor detalle y cómo se integran con los PVs para proporcionar almacenamiento a los pods.
Curso de Kubernetes
Módulo 1: Introducción a Kubernetes
- ¿Qué es Kubernetes?
- Arquitectura de Kubernetes
- Conceptos y Terminología Clave
- Configuración de un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
Módulo 2: Componentes Principales de Kubernetes
Módulo 3: Gestión de Configuración y Secretos
Módulo 4: Redes en Kubernetes
Módulo 5: Almacenamiento en Kubernetes
Módulo 6: Conceptos Avanzados de Kubernetes
Módulo 7: Monitoreo y Registro
- Monitoreo con Prometheus
- Registro con Elasticsearch, Fluentd y Kibana (EFK)
- Verificaciones de Salud y Sondas
- Servidor de Métricas
Módulo 8: Seguridad en Kubernetes
- Control de Acceso Basado en Roles (RBAC)
- Políticas de Seguridad de Pods
- Seguridad de Red
- Seguridad de Imágenes
Módulo 9: Escalado y Rendimiento
- Autoescalado Horizontal de Pods
- Autoescalado Vertical de Pods
- Autoescalado de Clúster
- Ajuste de Rendimiento
Módulo 10: Ecosistema y Herramientas de Kubernetes
Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real
- Despliegue de una Aplicación Web
- CI/CD con Kubernetes
- Ejecución de Aplicaciones con Estado
- Gestión Multi-Clúster