En Kubernetes, los volúmenes son una forma de proporcionar almacenamiento persistente a los contenedores. A diferencia del almacenamiento temporal que se pierde cuando un contenedor se reinicia, los volúmenes permiten que los datos persistan más allá del ciclo de vida de un contenedor. En esta sección, exploraremos los conceptos básicos de los volúmenes en Kubernetes, cómo se configuran y cómo se utilizan en los Pods.
Conceptos Clave
- Volumen: Un directorio accesible para los contenedores en un Pod. Los volúmenes pueden ser de diferentes tipos, cada uno con sus propias características y usos.
- Pod: La unidad básica de ejecución en Kubernetes, que puede contener uno o más contenedores.
- Persistencia: La capacidad de un volumen para retener datos más allá del ciclo de vida de un contenedor.
Tipos de Volúmenes
Kubernetes soporta varios tipos de volúmenes, cada uno adecuado para diferentes casos de uso. Algunos de los tipos más comunes son:
- emptyDir: Un volumen temporal que se crea cuando un Pod es asignado a un nodo y se elimina cuando el Pod es eliminado.
- hostPath: Monta un archivo o directorio del sistema de archivos del nodo en el Pod.
- nfs: Monta un directorio de un servidor NFS.
- persistentVolumeClaim: Vincula un volumen persistente a un Pod.
Configuración de Volúmenes en un Pod
Para utilizar un volumen en un Pod, se debe definir en el manifiesto del Pod. A continuación, se muestra un ejemplo de cómo configurar un volumen emptyDir
en un Pod.
Ejemplo Práctico
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: nginx volumeMounts: - mountPath: /usr/share/nginx/html name: my-volume volumes: - name: my-volume emptyDir: {}
Explicación del Código
- apiVersion: La versión de la API de Kubernetes que se está utilizando.
- kind: El tipo de recurso, en este caso, un
Pod
. - metadata: Información sobre el Pod, como su nombre.
- spec: La especificación del Pod, que incluye los contenedores y los volúmenes.
- containers: Una lista de contenedores que se ejecutarán en el Pod.
- name: El nombre del contenedor.
- image: La imagen del contenedor, en este caso,
nginx
. - volumeMounts: Una lista de volúmenes que se montarán en el contenedor.
- mountPath: La ruta dentro del contenedor donde se montará el volumen.
- name: El nombre del volumen que se montará.
- volumes: Una lista de volúmenes que se utilizarán en el Pod.
- name: El nombre del volumen.
- emptyDir: Un volumen temporal que se crea cuando el Pod es asignado a un nodo.
Ejercicio Práctico
Ejercicio 1: Crear un Pod con un Volumen hostPath
- Crea un archivo YAML llamado
hostpath-pod.yaml
con el siguiente contenido:
apiVersion: v1 kind: Pod metadata: name: hostpath-pod spec: containers: - name: busybox image: busybox command: ['sh', '-c', 'while true; do echo $(date) >> /mnt/data/log.txt; sleep 5; done'] volumeMounts: - mountPath: /mnt/data name: hostpath-volume volumes: - name: hostpath-volume hostPath: path: /data type: Directory
- Aplica el archivo YAML para crear el Pod:
- Verifica que el Pod se haya creado y esté en ejecución:
- Inspecciona los logs del contenedor para ver los datos que se están escribiendo en el volumen:
Solución
El archivo YAML anterior crea un Pod llamado hostpath-pod
que ejecuta un contenedor busybox
. El contenedor escribe la fecha y hora actual en un archivo log.txt
dentro del directorio /mnt/data
, que está montado desde el directorio /data
del nodo.
Resumen
En esta sección, hemos aprendido sobre los volúmenes en Kubernetes, sus tipos y cómo configurarlos en un Pod. Los volúmenes son esenciales para proporcionar almacenamiento persistente a los contenedores y permiten que los datos persistan más allá del ciclo de vida de un contenedor. En la próxima sección, exploraremos los volúmenes persistentes y cómo se utilizan en Kubernetes.
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