Se sua aplicação precisa de armazenamento temporário em disco — seja para área de trabalho, cache ou logs de alto throughput — monte um volume efêmero em cada Pod. Diferentemente dos persistent volumes (PVs), os volumes efêmeros estão vinculados ao ciclo de vida do Pod: são criados automaticamente na inicialização e excluídos quando o Pod é removido. Isso elimina a limpeza manual e simplifica o deployment de cargas de trabalho sem estado.
Este tópico demonstra como montar um disco em nuvem como volume efêmero usando ephemeral.volumeClaimTemplate e como verificar se o PV e a persistent volume claim (PVC) são limpos automaticamente após a exclusão do Pod.
Quando usar volumes efêmeros
Volumes efêmeros são ideais quando a aplicação necessita de armazenamento temporário, mas não exige persistência de dados entre reinicializações:
Área de trabalho e dados intermediários: armazene resultados temporários de pipelines de processamento de dados sem precisar de limpeza manual.
Logs de alto throughput: utilize armazenamento em disco dedicado e não compartilhado por Pod para evitar contenção de E/S.
Cache: mantenha dados de cache de curta duração próximos à aplicação, sem a sobrecarga de gerenciar armazenamento persistente.
Os volumes efêmeros baseados em volumeClaimTemplate diferem do emptyDir em dois aspectos principais: oferecem suporte a armazenamento conectado à rede (discos em nuvem) e permitem especificar uma capacidade fixa que o Pod não pode exceder.
Como funciona
Ao definir um ephemeral.volumeClaimTemplate em um Deployment, Pod ou StatefulSet, o Kubernetes cria uma PVC no mesmo namespace do Pod. O Pod passa a ser proprietário dessa PVC. Quando o Pod é excluído — seja por scale-in, rolling update ou exclusão manual — o coletor de lixo do Kubernetes remove a PVC, o que aciona a exclusão do PV subjacente e do disco em nuvem.
Nomenclatura da PVC: o Kubernetes nomeia cada PVC automaticamente seguindo o padrão <pod-name>-<volume-name>. Por exemplo, um Pod chamado ephemeral-example-7f795798f9-kbplx com um volume chamado scratch-volume gera uma PVC denominada ephemeral-example-7f795798f9-kbplx-scratch-volume. Como a nomenclatura é determinística, localize uma PVC combinando o nome do Pod com o nome do volume, sem necessidade de busca.
Dois Pods podem gerar o mesmo nome de PVC se houver sobreposição em seus nomes e nos nomes dos volumes (por exemplo, o Podpod-acom o volumescratche o Podpodcom o volumea-scratchambos resultam na PVCpod-a-scratch). Evite conflitos de nomenclatura ao personalizar os nomes de Pods e volumes.
Pré-requisitos
Antes de começar, certifique-se de ter:
Um cluster Container Service for Kubernetes (ACK) executando a versão 1.22 ou posterior
Crie um Deployment e monte um volume efêmero
Um volumeClaimTemplate define a configuração das PVCs. Ao implantar um Deployment com duas réplicas, o Kubernetes cria duas PVCs — uma por Pod — a partir do mesmo modelo. As PVCs compartilham a mesma configuração, mas possuem nomes distintos.
O ephemeral.volumeClaimTemplate funciona com Deployments, StatefulSets e Pods. Este tópico usa um Deployment como exemplo.
-
Salve o conteúdo a seguir como
ephemeral-example.yaml. Ajuste os parâmetros emvolumeClaimTemplateconforme as descrições na tabela abaixo.Parâmetro Descrição accessModesModo de acesso ao PV. Defina como ReadWriteOncePod(para clusters na versão 1.29 ou posterior) para garantir que apenas um Pod utilize o disco por vez. Em versões anteriores do cluster, useReadWriteOnce.storageClassNameStorageClass a ser utilizada. Este exemplo emprega alicloud-disk-topology-alltype, uma StorageClass padrão do ACK que provisiona discos na seguinte ordem: ESSD (SSD empresarial), SSD padrão e, por fim, ultra disk. Os discos são faturados no modelo pagamento conforme o uso. Para detalhes de preços, consulte Faturamento do Elastic Block Storage e Preços do Elastic Block Storage.storageCapacidade do volume efêmero. A StorageClass alicloud-disk-topology-alltypeprovisiona um ESSD PL1 por padrão. A capacidade mínima é 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 -
Crie o Deployment.
kubectl create -f ephemeral-example.yaml -
Verifique se ambos os Pods estão em execução.
kubectl get pod -l pod=example-podSaída esperada:
NAME READY STATUS RESTARTS AGE ephemeral-example-7f795798f9-kbplx 1/1 Running 0 38s ephemeral-example-7f795798f9-p98lt 1/1 Running 0 38s -
Confirme que as PVCs e seus discos em nuvem vinculados foram criados automaticamente.
kubectl get pvcSaída esperada (o ID do disco aparece no 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
Verifique se PVs e PVCs são excluídos ao remover Pods
Quando um Pod é excluído, o Kubernetes coleta sua PVC como lixo, acionando a remoção do PV vinculado e do disco em nuvem. Os passos a seguir demonstram esse comportamento durante um scale-in.
-
Reduza o Deployment para uma réplica.
kubectl scale deploy ephemeral-example --replicas=1 -
Confirme que resta apenas um Pod.
kubectl get pod -l pod=example-podSaída esperada:
NAME READY STATUS RESTARTS AGE ephemeral-example-7f795798f9-kbplx 1/1 Running 0 5m29s -
Valide que o PV do Pod excluído foi removido.
kubectl get pvSaída esperada (apenas um PV permanece, vinculado ao Pod sobrevivente):
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 -
Certifique-se de que a PVC do Pod excluído também foi removida.
kubectl get pvcSaída esperada (apenas uma PVC permanece):
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
Próximos passos
Para monitorar o consumo de armazenamento efêmero por Pod, consulte Monitoramento de armazenamento efêmero.
Para utilizar discos em nuvem como armazenamento persistente que sobrevive à exclusão do Pod, consulte Volumes de disco.