Si su aplicación requiere almacenamiento temporal en disco (espacio de trabajo, caché o registros de alto rendimiento), puede montar un volumen efímero en cada Pod. A diferencia de los volúmenes persistentes (PV), los volúmenes efímeros están vinculados al ciclo de vida del Pod: se crean automáticamente cuando este inicia y se eliminan cuando se quita el Pod. Esto evita la limpieza manual y simplifica el despliegue de cargas de trabajo sin estado.
Este tema explica cómo montar un disco en la nube como volumen efímero mediante ephemeral.volumeClaimTemplate, y cómo comprobar que el PV y la solicitud de volumen persistente (PVC) se limpian automáticamente al eliminar un Pod.
Cuándo usar volúmenes efímeros
Los volúmenes efímeros son adecuados cuando la aplicación necesita almacenamiento temporal, pero no requiere que los datos persistan entre reinicios:
Espacio de trabajo y datos intermedios: almacene resultados temporales de canalizaciones de procesamiento de datos sin necesidad de limpieza manual.
Registros de alto rendimiento: utilice almacenamiento en disco dedicado y no compartido por Pod para evitar contención de E/S.
Caché: mantenga datos de caché de corta duración cerca de la aplicación sin la sobrecarga de gestionar almacenamiento persistente.
Los volúmenes efímeros respaldados por volumeClaimTemplate difieren de emptyDir en dos aspectos clave: admiten almacenamiento conectado a la red (discos en la nube) y permiten especificar una capacidad fija que el Pod no puede exceder.
Funcionamiento
Al definir un ephemeral.volumeClaimTemplate en un Deployment, Pod o StatefulSet, Kubernetes crea una PVC en el mismo namespace que el Pod. El Pod es propietario de dicha PVC. Cuando se elimina el Pod (ya sea por reducción de escala, actualización continua o eliminación manual), el recolector de basura de Kubernetes borra la PVC, lo que a su vez desencadena la eliminación del PV subyacente y del disco en la nube.
Nomenclatura de PVC: Kubernetes asigna nombre a cada PVC automáticamente con el patrón <pod-name>-<volume-name>. Por ejemplo, un Pod llamado ephemeral-example-7f795798f9-kbplx con un volumen denominado scratch-volume genera una PVC con el nombre ephemeral-example-7f795798f9-kbplx-scratch-volume. Dado que la nomenclatura es determinista, puede localizar una PVC combinando el nombre del Pod y el del volumen sin necesidad de buscar.
Dos Pods pueden generar el mismo nombre de PVC si sus nombres y los de sus volúmenes se superponen (por ejemplo, el Podpod-acon el volumenscratchy el Podpodcon el volumena-scratchproducen ambos la PVCpod-a-scratch). Evite conflictos de nombres al personalizar los nombres de Pods y volúmenes.
Requisitos previos
Antes de empezar, asegúrese de contar con:
Un clúster de Container Service for Kubernetes (ACK) que ejecute la versión 1.22 o posterior
Creación de un Deployment y montaje de un volumen efímero
Un volumeClaimTemplate define la configuración de las PVC. Al desplegar un Deployment con dos réplicas, Kubernetes crea dos PVC (una por Pod) a partir de la misma plantilla. Las PVC comparten la misma configuración, pero tienen nombres distintos.
ephemeral.volumeClaimTemplate funciona con Deployments, StatefulSets y Pods. Este tema utiliza un Deployment como ejemplo.
-
Guarde el siguiente contenido como
ephemeral-example.yaml. Ajuste los parámetros envolumeClaimTemplatesegún las descripciones de la tabla siguiente.Parámetro Descripción accessModesModo de acceso del PV. Establezca ReadWriteOncePod(para clústeres con versión 1.29 o posterior) para garantizar que un disco sea utilizado por un solo Pod a la vez. Para versiones anteriores del clúster, useReadWriteOnce.storageClassNameStorageClass que se utilizará. Este ejemplo usa alicloud-disk-topology-alltype, una StorageClass predeterminada de ACK que aprovisiona discos en el siguiente orden: ESSD (SSD empresarial), SSD estándar y luego ultra disk. Los discos se facturan bajo el modelo pay-as-you-go. Para detalles de precios, consulte Elastic Block Storage billing y Elastic Block Storage pricing.storageCapacidad del volumen efímero. La StorageClass alicloud-disk-topology-alltypeaprovisiona un ESSD PL1 de forma predeterminada. La capacidad mínima es de 20 GiB.apiVersion: apps/v1 kind: Deployment metadata: name: ephemeral-example spec: replicas: 2 selector: matchLabels: pod: example-pod strategy: type: Recreate template: metadata: labels: pod: example-pod spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 resources: requests: cpu: 500m memory: 2Gi ephemeral-storage: 2Gi volumeMounts: - mountPath: "/scratch" name: scratch-volume volumes: - name: scratch-volume ephemeral: # Declare the current storage as ephemeral storage volumeClaimTemplate: spec: accessModes: [ "ReadWriteOncePod" ] storageClassName: alicloud-disk-topology-alltype resources: requests: storage: 30Gi -
Cree el Deployment.
kubectl create -f ephemeral-example.yaml -
Compruebe que ambos Pods estén en ejecución.
kubectl get pod -l pod=example-podSalida esperada:
NAME READY STATUS RESTARTS AGE ephemeral-example-7f795798f9-kbplx 1/1 Running 0 38s ephemeral-example-7f795798f9-p98lt 1/1 Running 0 38s -
Verifique que las PVC y sus discos en la nube vinculados se hayan creado automáticamente.
kubectl get pvcSalida esperada (el ID del disco aparece en el campo
VOLUME):NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE ephemeral-example-7f795798f9-kbplx-scratch-volume Bound d-uf61678cuo33eunn**** 30Gi RWOP alicloud-disk-topology-alltype <unset> 74s ephemeral-example-7f795798f9-p98lt-scratch-volume Bound d-uf6dwkdcowyf2fj6**** 30Gi RWOP alicloud-disk-topology-alltype <unset> 74s
Verificación de la eliminación de PV y PVC al quitar Pods
Cuando se elimina un Pod, Kubernetes recolecta su PVC como basura, lo que desencadena la eliminación del PV vinculado y del disco en la nube. Los siguientes pasos demuestran este comportamiento mediante una reducción de escala.
-
Reduzca la escala del Deployment a una réplica.
kubectl scale deploy ephemeral-example --replicas=1 -
Confirme que solo queda un Pod.
kubectl get pod -l pod=example-podSalida esperada:
NAME READY STATUS RESTARTS AGE ephemeral-example-7f795798f9-kbplx 1/1 Running 0 5m29s -
Confirme que se eliminó el PV correspondiente al Pod borrado.
kubectl get pvSalida esperada (solo permanece un PV, vinculado al Pod restante):
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE d-uf61678cuo33eunn**** 30Gi RWOP Delete Bound default/ephemeral-example-7f795798f9-kbplx-scratch-volume alicloud-disk-topology-alltype <unset> 5m52s -
Confirme que se eliminó la PVC correspondiente al Pod borrado.
kubectl get pvcSalida esperada (solo permanece una PVC):
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE ephemeral-example-7f795798f9-kbplx-scratch-volume Bound d-uf61678cuo33eunn**** 30Gi RWOP alicloud-disk-topology-alltype <unset> 7m11s
Pasos siguientes
Para monitorear el consumo de almacenamiento efímero por Pod, consulte Ephemeral storage monitoring.
Para usar discos en la nube como almacenamiento persistente que sobreviva a la eliminación de Pods, consulte Disk volumes.