Monte volumes efêmeros em pods quando a aplicação precisar de espaço de armazenamento adicional, mas não exigir persistência de dados. O sistema provisiona volumes efêmeros na inicialização do pod e os exclui automaticamente ao remover o pod, eliminando a necessidade de gerenciar manualmente as persistent volume claims (PVCs).
Este tópico mostra como adicionar o campo ephemeral.volumeClaimTemplate à especificação de um Deployment para provisionar um volume efêmero baseado em disco para cada pod. Em seguida, você verificará se o sistema exclui automaticamente a PVC e o persistent volume (PV) junto com o pod.
Por que usar volumes efêmeros
Os volumes efêmeros genéricos funcionam de forma semelhante aos volumes emptyDir: seu ciclo de vida está vinculado ao pod e eles são excluídos quando o pod é removido. A principal diferença é que utilizam uma PVC como base, o que oferece todos os recursos de um driver de armazenamento persistente:
Capacidade fixa: Defina um limite exato de tamanho por pod para impedir que a aplicação ultrapasse o orçamento de armazenamento.
Armazenamento conectado à rede: Utilize um disco em nuvem como base do volume em vez do armazenamento local do nó, que geralmente tem capacidade limitada e é compartilhado entre várias cargas de trabalho.
Suporte a StorageClass: Configure o nível de desempenho, o modo de acesso e outras propriedades do disco.
Utilize volumes efêmeros quando a aplicação demandar armazenamento temporário grande demais para o armazenamento local do nó ou quando for necessária uma capacidade garantida por pod. Cenários comuns incluem:
Serviços de cache: Aplicações que movem dados pouco acessados da memória para o disco se beneficiam de um volume isolado e com capacidade delimitada por pod.
Armazenamento de logs: Aplicações que geram grandes quantidades de dados de log podem gravar em um volume efêmero dedicado, evitando o uso do sistema de arquivos compartilhado do nó.
Dados temporários: Jobs de processamento em lote que exigem alto throughput de I/O de disco sem a necessidade de persistir os dados após a conclusão da tarefa.
Como funciona
Quando o Kubernetes cria um pod com um volumeClaimTemplate na especificação de volume ephemeral, o controlador de volumes efêmeros cria uma PVC no mesmo namespace do pod. O nome da PVC segue um padrão determinístico: {pod-name}-{volume-name}. Essa nomenclatura previsível permite localizar a PVC diretamente, desde que você saiba o nome do pod e do volume.
Ao excluir o pod, o coletor de lixo do Kubernetes remove a PVC com base na relação de propriedade do recurso. Como a política de recuperação padrão das StorageClasses é Delete, o sistema também exclui o volume de disco subjacente junto com a PVC.
A nomenclatura da PVC segue o padrão{pod-name}-{volume-name}. Se dois pods no mesmo namespace tiverem nomes que resultem na mesma string combinada (por exemplo, um pod chamadopod-acom um volume chamadoscratche outro pod chamadopodcom um volume chamadoa-scratch), ocorrerá um conflito de nomenclatura. Use nomes distintos para os pods dentro de um namespace para evitar esse problema.
Pré-requisitos
Antes de começar, verifique se você possui:
Um cluster do Alibaba Cloud Container Compute Service (ACS)
O
kubectlconfigurado para se conectar ao cluster — consulte Obter o arquivo kubeconfig de um cluster e usar o kubectl para se conectar ao cluster e Usar o kubectl no Cloud Shell para gerenciar clusters ACS
Montar um volume efêmero em um Deployment
-
Crie um arquivo chamado
ephemeral-example.yamlcom o seguinte conteúdo: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: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest resources: requests: cpu: 500m memory: 2Gi ephemeral-storage: 2Gi volumeMounts: - mountPath: "/scratch" name: scratch-volume volumes: - name: scratch-volume ephemeral: volumeClaimTemplate: metadata: labels: type: scratch-volume spec: accessModes: [ "ReadWriteOncePod" ] storageClassName: alicloud-disk-topology-alltype resources: requests: storage: 40GiEste Deployment cria dois pods, cada um com um volume efêmero dedicado de 40 GiB montado em
/scratch. O campoephemeral.volumeClaimTemplateé compatível com Deployments, StatefulSets e pods independentes. A tabela a seguir descreve os campos dentro devolumeClaimTemplate.spec:Campo Descrição accessModesDefina como ReadWriteOncePodpara garantir que apenas um pod monte o volume por vez.storageClassNameA StorageClass a ser utilizada. Este exemplo usa alicloud-disk-topology-alltype, a StorageClass padrão do ECS, que provisiona um Enterprise SSD (ESSD) de nível de desempenho 1 (PL1). Um ESSD PL1 suporta de 20 a 65.536 GiB. Os discos são cobrados no modelo de pagamento conforme o uso — consulte Faturamento de dispositivos de armazenamento em bloco e Preços dos dispositivos de armazenamento em bloco.storageA capacidade solicitada para o volume efêmero. -
Implante o Deployment:
kubectl create -f ephemeral-example.yaml -
Verifique se ambos os pods estão em execução:
kubectl get podSaída esperada:
NAME READY STATUS RESTARTS AGE ephemeral-example-64db7b9f5c-hcpz5 1/1 Running 0 108s ephemeral-example-64db7b9f5c-qqvl5 1/1 Running 0 108s -
Confirme a criação de uma PVC para cada pod:
kubectl get pvcSaída esperada:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ephemeral-example-64db7b9f5c-hcpz5-scratch-volume Bound d-uf6h6nl0yf2y1331**** 40Gi RWOP alicloud-disk-topology-alltype 3m28s ephemeral-example-64db7b9f5c-qqvl5-scratch-volume Bound d-uf6a3lk85znunou6**** 40Gi RWOP alicloud-disk-topology-alltype 3m28sOs nomes das PVCs seguem o padrão
{pod-name}-scratch-volume. O campoVOLUMEexibe o ID do disco em nuvem subjacente.
Verificar se os volumes efêmeros são excluídos com o pod
-
Reduza o Deployment para uma réplica:
kubectl scale deploy ephemeral-example --replicas=1 -
Confirme a exclusão de um pod:
kubectl get podSaída esperada:
NAME READY STATUS RESTARTS AGE ephemeral-example-64db7b9f5c-qqvl5 1/1 Running 0 11m -
Verifique a remoção do PV do pod excluído:
kubectl get pvSaída esperada (apenas o PV do pod restante permanece):
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE d-uf6a3lk85znunou6**** 40Gi RWOP Delete Bound default/ephemeral-example-64db7b9f5c-qqvl5-scratch-volume alicloud-disk-topology-alltype 20m -
Verifique se o sistema também removeu a PVC do pod excluído:
kubectl get pvcSaída esperada (apenas a PVC do pod restante permanece):
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ephemeral-example-64db7b9f5c-qqvl5-scratch-volume Bound d-uf6a3lk85znunou6**** 40Gi RWOP alicloud-disk-topology-alltype 15mO sistema excluiu a PVC e seu disco subjacente juntamente com o pod. O volume efêmero do pod restante continua vinculado.