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

Ubicación, Estructura y Manejo básico de certificados.

                                                     Kubernetes utiliza certificados TLS (X.509) para cifrar la comunicación entre sus componentes y autenticar identidades (usuarios, nodos, API Server, etc.). Estos certificados son generados y gestionados automáticamente cuando se instala un clúster con kubeadm . En este artículo, veremos dónde se almacenan los certificados , cuál es su estructura y cómo inspeccionarlos fácilmente, una habilidad muy útil para el examen CKA. Cuando creas un clúster con kubeadm , los certificados se generan por defecto en el directorio: /etc/ kubernetes /pki/ Puedes ver su contenido con: ls -l /etc/kubernetes/pki/ También hay certificados en: /etc/kubernetes/ (ahí verás admin.conf , kubelet.conf , etc., que incluyen certificados embebidos, como veremos más abajo). 🧱 Estructura de los ce...

🔁 Renovación y Rotación de Certificados en Kubernetes (kubeadm certs)

  🎯 Introducción En un clúster de Kubernetes, la mayoría de los certificados generados por kubeadm tienen una validez de un año . Para evitar interrupciones en los componentes críticos, es fundamental revisar periódicamente su vigencia y saber cómo renovarlos correctamente. En este artículo aprenderás: Cómo comprobar la expiración de los certificados Cómo renovarlos automáticamente con kubeadm Cómo simular una renovación manual con openssl Cómo aplicar los cambios reiniciando los componentes afectados 🕵️‍♂️ Comprobación del estado de los certificados Kubernetes ofrece una herramienta integrada para revisar los certificados del clúster: kubeadm certs check-expiration Este comando muestra información clave: Fecha de expiración Tipo de certificado Ruta en el sistema 📌 Salida de ejemplo: CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY apiserver Jan 06 , 2026 19 :56 UTC 330d ...

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...