Si votre application nécessite un stockage disque temporaire — espace de travail, mise en cache ou écriture de journaux à haut débit — montez un volume éphémère sur chaque Pod. Contrairement aux volumes persistants (PV), les volumes éphémères sont liés au cycle de vie du Pod : ils sont créés automatiquement au démarrage du Pod et supprimés lorsque le Pod est retiré. Cette approche élimine le nettoyage manuel et simplifie le déploiement des charges de travail sans état.
Cette rubrique explique comment monter un disque cloud en tant que volume éphémère à l'aide de ephemeral.volumeClaimTemplate, et comment vérifier que le PV et la revendication de volume persistant (PVC) sont automatiquement nettoyés lors de la suppression d'un Pod.
Quand utiliser des volumes éphémères
Les volumes éphémères conviennent parfaitement lorsque votre application a besoin d'un stockage temporaire mais n'exige pas que les données persistent entre les redémarrages :
Espace de travail et données intermédiaires : stockez les résultats temporaires des pipelines de traitement de données sans nécessiter de nettoyage manuel.
Écriture de journaux à haut débit : utilisez un stockage disque dédié et non partagé par Pod pour éviter la contention des E/S.
Mise en cache : conservez les données de cache à courte durée de vie à proximité de l'application sans la surcharge liée à la gestion du stockage persistant.
Les volumes éphémères pris en charge par volumeClaimTemplate diffèrent de emptyDir sur deux points essentiels : ils prennent en charge le stockage connecté au réseau (disques cloud) et vous pouvez spécifier une capacité fixe que le Pod ne peut pas dépasser.
Fonctionnement
Lorsque vous définissez un ephemeral.volumeClaimTemplate dans un Deployment, un Pod ou un StatefulSet, Kubernetes crée une PVC dans le même namespace que le Pod. Le Pod est propriétaire de cette PVC. Lorsque le Pod est supprimé — que ce soit par une réduction d'échelle, une mise à jour progressive ou une suppression manuelle — le garbage collector de Kubernetes supprime la PVC, ce qui déclenche à son tour la suppression du PV sous-jacent et du disque cloud.
Nommage des PVC : Kubernetes nomme automatiquement chaque PVC selon le modèle <pod-name>-<volume-name>. Par exemple, un Pod nommé ephemeral-example-7f795798f9-kbplx avec un volume nommé scratch-volume génère une PVC nommée ephemeral-example-7f795798f9-kbplx-scratch-volume. Étant donné que le nommage est déterministe, vous pouvez localiser une PVC en combinant le nom du Pod et le nom du volume sans avoir à effectuer de recherche.
Deux Pods peuvent produire le même nom de PVC si leurs noms et noms de volume se chevauchent (par exemple, le Podpod-aavec le volumescratchet le Podpodavec le volumea-scratchproduisent tous deux la PVCpod-a-scratch). Évitez les conflits de nommage lorsque vous personnalisez les noms des Pods et des volumes.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster Container Service for Kubernetes (ACK) exécutant la version 1.22 ou ultérieure
Créer un Deployment et monter un volume éphémère
Un volumeClaimTemplate définit la configuration des PVC. Lorsque vous déployez un Deployment avec deux réplicas, Kubernetes crée deux PVC — une par Pod — à partir du même modèle. Les PVC partagent la même configuration mais ont des noms distincts.
ephemeral.volumeClaimTemplate fonctionne avec les Deployments, les StatefulSets et les Pods. Cette rubrique utilise un Deployment à titre d'exemple.
-
Enregistrez le contenu suivant sous le nom
ephemeral-example.yaml. Ajustez les paramètres dansvolumeClaimTemplateen fonction des descriptions du tableau ci-dessous.Paramètre Description accessModesLe mode d'accès pour le PV. Définissez-le sur ReadWriteOncePod(pour les clusters exécutant la version 1.29 ou ultérieure) afin de garantir qu'un disque est utilisé par un seul Pod à la fois. Pour les versions de cluster antérieures, utilisezReadWriteOnce.storageClassNameLa StorageClass à utiliser. Cet exemple utilise alicloud-disk-topology-alltype, une StorageClass par défaut d'ACK qui provisionne des disques dans l'ordre suivant : ESSD (SSD entreprise), SSD standard, puis disque ultra. Les disques sont facturés selon le modèle de paiement à l'utilisation. Pour plus d'informations sur les tarifs, consultez la section Facturation d'Elastic Block Storage et Tarification d'Elastic Block Storage.storageLa capacité du volume éphémère. La StorageClass alicloud-disk-topology-alltypeprovisionne par défaut un ESSD PL1. La capacité minimale est 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 -
Créez le Deployment.
kubectl create -f ephemeral-example.yaml -
Vérifiez que les deux Pods sont en cours d'exécution.
kubectl get pod -l pod=example-podRésultat attendu :
NAME READY STATUS RESTARTS AGE ephemeral-example-7f795798f9-kbplx 1/1 Running 0 38s ephemeral-example-7f795798f9-p98lt 1/1 Running 0 38s -
Vérifiez que les PVC et leurs disques cloud associés ont été créés automatiquement.
kubectl get pvcRésultat attendu (l'ID du disque apparaît dans le champ
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
Vérifier que les PV et PVC sont supprimés lors de la suppression des Pods
Lorsqu'un Pod est supprimé, le garbage collector de Kubernetes supprime sa PVC, ce qui déclenche la suppression du PV associé et du disque cloud. Les étapes suivantes illustrent ce processus avec une réduction d'échelle.
-
Réduisez le Deployment à un seul réplica.
kubectl scale deploy ephemeral-example --replicas=1 -
Confirmez qu'il ne reste qu'un seul Pod.
kubectl get pod -l pod=example-podRésultat attendu :
NAME READY STATUS RESTARTS AGE ephemeral-example-7f795798f9-kbplx 1/1 Running 0 5m29s -
Confirmez que le PV du Pod supprimé a été retiré.
kubectl get pvRésultat attendu (un seul PV reste, associé au Pod survivant) :
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 -
Confirmez que la PVC du Pod supprimé a été retirée.
kubectl get pvcRésultat attendu (une seule PVC reste) :
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
Étapes suivantes
Pour surveiller la consommation de stockage éphémère par Pod, consultez la section Surveillance du stockage éphémère.
Pour utiliser des disques cloud pour un stockage persistant qui survit à la suppression des Pods, consultez la section Volumes de disque.