En Kubernetes, los Pods son efímeros. Esto significa que cuando un Pod se elimina, cualquier dato almacenado dentro del contenedor también se pierde. Para abordar esto, Kubernetes proporciona 2 herramientas: Persistent Volumes (PV) y Persistent Volume Claims (PVC).
- Persistent Volume (PV): Representa una porción de almacenamiento persistente en el clúster. Es una abstracción que independiza la aplicación de los detalles específicos del almacenamiento.
- Persistent Volume Claim (PVC): Solicita una cantidad específica de almacenamiento de un PV. Es una abstracción que permite a las aplicaciones solicitar almacenamiento sin preocuparse por los detalles de implementación.
🧪 Ejemplo: Persistencia de Datos en AWS EBS
Vamos a crear un Persistent Volume y un Persistent Volume Claim que utilicen un volumen EBS en AWS. Primero, crea un volumen EBS en la consola de AWS. Necesitarás el ID del volumen (ej: vol-07d583069b6865699).
1️⃣ Crear un Persistent Volume:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-demo
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
awsElasticBlockStore:
volumeID: vol-07d583069b6865699
Guarda este YAML en un archivo llamado pv-demo.yaml y ejecútalo:
kubectl apply -f pv-demo.yaml
accessModes: - ReadWriteOnce indica que el volumen puede ser montado por un solo nodo a la vez con acceso de lectura-escritura. persistentVolumeReclaimPolicy: Retain significa que el volumen no se eliminará automáticamente cuando se libere el PVC. Esto es útil para conservar los datos.
2️⃣ Crear un Persistent Volume Claim:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-demo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
Guarda este YAML en un archivo llamado pvc-demo.yaml y ejecútalo:
kubectl apply -f pvc-demo.yaml
Esto crea un PVC llamado pvc-demo que solicita 1Gi de almacenamiento con acceso de lectura-escritura. Kubernetes buscará un PV que coincida con esta solicitud y lo asignará al PVC.
3️⃣ Crear un Pod con PVC:
apiVersion: v1
kind: Pod
metadata:
name: pv-pod
spec:
containers:
- name: pv-container
image: ubuntu
command: ["/bin/bash", "-c", "while true; do echo This is Day13 of 30DaysOfKubernetes; sleep 5 ; done"]
volumeMounts:
- name: pv-volume
mountPath: /data
volumes:
- name: pv-volume
persistentVolumeClaim:
claimName: pvc-demo
Guarda este YAML en un archivo llamado pv-pod.yaml y ejecútalo:
kubectl apply -f pv-pod.yaml
Esto crea un Pod llamado pv-pod que monta el PVC pvc-demo en el directorio /data. Cualquier dato escrito en /data dentro del contenedor se almacenará persistentemente en el volumen EBS.
🩺 Liveness Probes en Detalle
Las Liveness Probes son cruciales para mantener la salud de tus aplicaciones en Kubernetes. Permiten a Kubernetes detectar y corregir problemas en los contenedores sin intervención manual.
- Exec: Ejecuta un comando dentro del contenedor. Si el comando sale con un código de salida diferente de cero, la Probe se considera fallida.
- HTTP: Envía una solicitud HTTP GET al contenedor. Si la solicitud devuelve un código de estado diferente de 200-399, la Probe se considera fallida.
- TCP: Intenta establecer una conexión TCP con el contenedor en un puerto específico. Si la conexión falla, la Probe se considera fallida.
Ejemplo: Liveness Probe con Exec
Dentro del contenedor, crearemos un archivo /tmp/health.txt que contenga un mensaje de salud.
Pod con Liveness Probe:
apiVersion: v1
kind: Pod
metadata:
name: liveness-probe
spec:
containers:
- name: liveness-container
image: ubuntu
command: ["/bin/bash", "-c", "while true; do echo This is Day13 of 30DaysOfKubernetes; sleep 5 ; done"]
livenessProbe:
exec:
command:
- cat
- /tmp/health.txt
initialDelaySeconds: 5
periodSeconds: 10
volumeMounts:
- name: health-volume
mountPath: /tmp
subPath: health.txt
volumes:
- name: health-volume
emptyDir: {}
Guarda este YAML en un archivo llamado liveness-probe.yaml y ejecútalo:
kubectl apply -f liveness-probe.yaml
📌 Consideraciones Importantes:
- Diseña tus Liveness Probes cuidadosamente: Asegúrate de que realmente indiquen si la aplicación está en buen estado.
- Usa un timeout: Especifica
timeoutSecondspara evitar que se bloquee indefinidamente. - Supervisa tus Liveness Probes: Monitoriza sus métricas para detectar problemas.

Comentarios
Publicar un comentario