Ajudar a melhorar esta página
Quer contribuir para este guia do usuário? Escolha o link Editar esta página no GitHub, disponível no painel direito de cada página. Suas contribuições ajudarão a tornar nosso guia do usuário melhor para todos.
Este tutorial o orientará na implantação de uma aplicação com estado de exemplo no cluster do Modo Automático do EKS. A aplicação grava carimbos de data e hora em um volume persistente, demonstrando os recursos automáticos de provisionamento e persistência de volume do EBS do Modo Automático do EKS.
Pré-requisitos
-
Um cluster do Modo Automático do EKS
-
A AWS CLI configurada com as permissões apropriadas
-
kubectl
instalado e configurado-
Para ter mais informações, consulte Configurar para usar o Amazon EKS.
-
Etapa 1: configurar o ambiente
-
Defina as variáveis de ambiente:
export CLUSTER_NAME=my-auto-cluster export AWS_REGION="us-west-2"
-
Atualize o kubeconfig:
aws eks update-kubeconfig --name "${CLUSTER_NAME}"
Etapa 2: criar a classe de armazenamento
A StorageClass define como o Modo Automático do EKS provisionará volumes do EBS.
O Modo Automático do EKS não cria uma StorageClass para você. Você deve criar uma StorageClass referenciando ebs.csi.eks.amazonaws.com
para usar o recurso de armazenamento do Modo Automático do EKS.
-
Crie um arquivo chamado
storage-class.yaml
:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: auto-ebs-sc annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: ebs.csi.eks.amazonaws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp3 encrypted: "true"
-
Aplique a StorageClass:
kubectl apply -f storage-class.yaml
Principais componentes:
-
provisioner: ebs.csi.eks.amazonaws.com
: usa o Modo Automático do EKS -
volumeBindingMode: WaitForFirstConsumer
: atrasa a criação do volume até que um pod precise dele -
type: gp3
: especifica o tipo de volume do EBS -
encrypted: "true"
: o EBS usará a chaveaws/ebs
padrão para criptografar volumes criados com essa classe. Isso é opcional, mas recomendado. -
storageclass.kubernetes.io/is-default-class: "true"
: o Kubernetes usará essa classe de armazenamento por padrão, a menos que você especifique uma classe de volume diferente em uma reivindicação de volume persistente. Tenha cuidado ao definir esse valor se estiver migrando de outro controlador de armazenamento. (opcional)
Etapa 3: criar a declaração de volume persistente
A PVC solicita armazenamento da StorageClass.
-
Crie um arquivo chamado
pvc.yaml
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: auto-ebs-claim spec: accessModes: - ReadWriteOnce storageClassName: auto-ebs-sc resources: requests: storage: 8Gi
-
Aplique a PVC:
kubectl apply -f pvc.yaml
Principais componentes:
-
accessModes: ReadWriteOnce
: o volume pode ser montado por um nó por vez -
storage: 8Gi
: solicita um volume de 8 GiB -
storageClassName: auto-ebs-sc
: referencia a StorageClass que criamos
Etapa 4: implantar uma aplicação
A implantação executa um contêiner que grava carimbos de data e hora no volume persistente.
-
Crie um arquivo chamado
deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: inflate-stateful spec: replicas: 1 selector: matchLabels: app: inflate-stateful template: metadata: labels: app: inflate-stateful spec: terminationGracePeriodSeconds: 0 nodeSelector: eks.amazonaws.com/compute-type: auto containers: - name: bash image: public.ecr.aws/docker/library/bash:4.4 command: ["/usr/local/bin/bash"] args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 60; done"] resources: requests: cpu: "1" volumeMounts: - name: persistent-storage mountPath: /data volumes: - name: persistent-storage persistentVolumeClaim: claimName: auto-ebs-claim
-
Aplique a implantação:
kubectl apply -f deployment.yaml
Principais componentes:
-
Contêiner bash simples que grava carimbos de data e hora em um arquivo
-
Monta o PVC em
/data
-
Solicita um núcleo de CPU
-
Usa o seletor de nós para nós gerenciados pelo EKS
Etapa 5: verificar a configuração
-
Verifique se o pod está em execução:
kubectl get pods -l app=inflate-stateful
-
Verifique se a PVC está vinculada:
kubectl get pvc auto-ebs-claim
-
Verifique o volume do EBS:
# Get the PV name PV_NAME=$(kubectl get pvc auto-ebs-claim -o jsonpath='{.spec.volumeName}') # Describe the EBS volume aws ec2 describe-volumes \ --filters Name=tag:CSIVolumeName,Values=${PV_NAME}
-
Verifique se os dados estão sendo gravados:
kubectl exec "$(kubectl get pods -l app=inflate-stateful \ -o=jsonpath='{.items[0].metadata.name}')" -- \ cat /data/out.txt
Etapa 6: limpeza
Execute o comando a seguir para remover todos os recursos criados neste tutorial:
# Delete all resources in one command
kubectl delete deployment/inflate-stateful pvc/auto-ebs-claim storageclass/auto-ebs-sc
O que está acontece por detrás
-
A PVC solicita armazenamento da StorageClass
-
Quando o pod está programado:
-
O Modo Automático do EKS provisiona um volume do EBS
-
Cria um PersistentVolume
-
Anexa o volume ao nó
-
-
O pod monta o volume e começa a gravar carimbos de data e hora
Controlador de snapshots
O Modo Automático do EKS é compatível com o Kubernetes CSI Snapshotter, também conhecido como controlador de snapshots. No entanto, o Modo Automático do EKS não inclui o controlador de snapshots. Você é responsável por instalar e configurar o controlador de snapshots. Para ter mais informações, consulte Habilitar a funcionalidade de snapshot para volumes CSI.
Analise a VolumeSnapshotClass
a seguir que faz referência à capacidade de armazenamento do Modo Automático do EKS.
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: auto-ebs-vsclass
driver: ebs.csi.eks.amazonaws.com
deletionPolicy: Delete
Saiba mais sobre o Kubernetes CSI Snapshotter.