Ir al contenido principal

Persistencia de Datos con Persistent Volumes (PV) y Persistent Volume Claims (PVC)

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 timeoutSeconds para evitar que se bloquee indefinidamente.
  • Supervisa tus Liveness Probes: Monitoriza sus métricas para detectar problemas.

Comentarios

Entradas populares de este blog

Autenticación y Autorización (Kubernetes).

La autenticación en Kubernetes es un aspecto crítico para la seguridad y control de acceso dentro de un clúster. Kubernetes proporciona varios mecanismos de autenticación para usuarios y cuentas de servicio, que deben pasar a través del API Server para realizar cualquier operación. En este artículo, revisaremos cómo funciona la autenticación y cómo puedes usar herramientas como kubectl y curl para interactuar de manera segura con el clúster. En primer lugar, ¿Qué es la autenticación y la autorización? •     Autenticación:  Es el proceso de verificar quién es un usuario. Responde a la pregunta "¿Quién eres?". •     Autorización: El proceso de determinar qué acciones puede realizar un usuario autenticado. Responde a la pregunta "¿Qué puedes hacer?". Primer paso: Autenticación. La autenticación en Kubernetes es el proceso mediante el cual el sistema verifica la identidad de los usuarios y cuentas de servicio que intentan acceder al clúster.  ...

Tip 1. Exámen CKA. Economiza y optimiza tu tiempo; Usa --help con el paginador Less en la ayuda.

📘 Domina los comandos --help y el uso de less en el examen CKA Durante el examen CKA (Certified Kubernetes Administrator) , uno de los recursos más potentes y completamente permitidos es el uso del --help en los comandos de Kubernetes. Además, puedes combinarlo con el paginador less para buscar y navegar fácilmente entre opciones. ✅ ¿Está permitido usar --help ? Sí, está 100% permitido . Puedes usar el --help de cualquier comando disponible en el entorno del examen: kubectl --help kubeadm init --help kubelet --help kubectl explain pod.spec.containers Estos comandos muestran la ayuda y las opciones disponibles directamente desde el sistema, sin necesidad de ir a la documentación. 🔍 ¿Cómo usar less para buscar rápidamente? Cuando la salida del comando es larga, puedes usar | less para verla de forma paginada y navegar más cómodamente. kubeadm init --help | less Una vez dentro de less , puedes buscar cualquier texto escribiendo /texto . Por ejemplo: /pod-networ...

TLS Bootstrapping en Kubernetes: Qué es, cómo funciona y por qué importa en el examen CKA

                                                       Uno de los conceptos que a menudo pasan desapercibidos en la administración de Kubernetes —pero que resultan clave tanto en entornos reales como en el examen CKA— es el TLS Bootstrapping . En este artículo entenderás qué es, cómo funciona, qué lo diferencia del kubeadm join tradicional y cómo puede aparecer en el examen. ¿Qué es TLS Bootstrapping? TLS Bootstrapping es el proceso por el cual el kubelet , el agente que corre en cada nodo, obtiene automáticamente un certificado TLS firmado por el clúster para autenticarse con el kube-apiserver . En otras palabras: permite que un nuevo nodo se una de forma segura al clúster sin necesidad de copiar manualmente los certificados. ¿Por qué es necesario? Cuando añades un nuevo nodo worker, su kubelet necesita autentic...