O Elastic File System (EFS) é o mecanismo subjacente da AWS para fornecer armazenamento (espaço em disco) ao seu cluster. Um PersistentVolume é um recurso de cluster que disponibiliza o armazenamento EFS para suas cargas de trabalho e garante que ele persista mesmo quando nenhuma carga de trabalho estiver conectada a ele. Este tópico descreve como uma carga de trabalho pode acessar um PersistentVolume com uma PersistentVolumeClaim.
Esta página é para operadores e especialistas em armazenamento que desejam configurar e gerenciar o armazenamento. Para saber mais sobre funções comuns e tarefas de exemplo que mencionamos em Google Cloud conteúdo, consulte Funções e tarefas comuns do usuário do GKE Enterprise .
O GKE na AWS oferece suporte ao provisionamento estático de PersistentVolumes para todas as versões compatíveis do Kubernetes. Para clusters com Kubernetes versão 1.24 ou posterior, o GKE na AWS também oferece suporte ao provisionamento dinâmico. Para usar o provisionamento dinâmico, o administrador do cluster precisa configurá-lo. Para saber como, consulte Configurar um PersistentVolume
.
Criar um PersistentVolumeClaim
Escolha a guia apropriada abaixo dependendo se você deseja que sua carga de trabalho se conecte a um volume persistente provisionado estaticamente ou dinamicamente.
Estático
Estas instruções pressupõem que o administrador do cluster já tenha provisionado pelo menos um PersistentVolume. Para acessar esse PersistentVolume e usar seu EFS subjacente com suas cargas de trabalho, crie um PersistentVolumeClaim.
Para criar um PersistentVolumeClaim para um PersistentVolume provisionado estaticamente, copie o seguinte manifesto YAML em um arquivo chamado efs-claim.yaml
.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: CLAIM_NAME
spec:
accessModes:
- ReadWriteMany
storageClassName: "" # Leave as empty string for static provisioning
resources:
requests:
storage: 5Gi
Substituir:
- CLAIM_NAME : um nome escolhido para vincular seu PersistentVolumeClaim - por exemplo,
efs-claim1
. Deixe em branco para vincular à classe de armazenamento padrão.
Aplique o YAML ao seu cluster.
kubectl apply -f efs-claim.yaml
Esta saída confirma a criação do PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Dinâmico
Estas instruções pressupõem que o administrador do cluster já tenha provisionado pelo menos uma StorageClass para provisionamento dinâmico. Para criar um PersistentVolume provisionado dinamicamente com esta StorageClass e usar o ponto de acesso EFS subjacente com suas cargas de trabalho, crie uma PersistentVolumeClaim.
Para criar um PersistentVolumeClaim, siga estas etapas. O driver CSI do EFS usa esse PersistentVolumeClaim com a StorageClass indicada para provisionar dinamicamente um PersistentVolume.
- Copie o seguinte manifesto YAML em um arquivo chamado
efs-claim.yaml
.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: CLAIM_NAME
spec:
accessModes:
- ReadWriteMany
storageClassName: "EFS_STORAGE_CLASS_NAME"
resources:
requests:
storage: 5Gi
Substituir:
- CLAIM_NAME : um nome que você escolher para seu PersistentVolumeClaim - por exemplo,
efs-claim1
- EFS_STORAGE_CLASS_NAME : o nome da StorageClass à qual você deseja que seu PersistentVolumeClaim seja vinculado. Deixe este campo em branco para vincular à classe de armazenamento padrão.
Aplique o YAML ao seu cluster.
kubectl apply -f efs-claim.yaml
A saída confirma a criação do PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Criar um StatefulSet
Após criar um PersistentVolumeClaim, você poderá usá-lo em uma carga de trabalho. Esta seção cria um StatefulSet de exemplo que usa um PersistentVolumeClaim. Você também pode usar um PersistentVolumeClaim com outros tipos de carga de trabalho, como pods e implantações, referenciando a reivindicação em spec.volumes
.
Para criar um StatefulSet que monte o recurso EFS referenciado em seu PersistentVolumeClaim, execute as seguintes etapas.
Copie o seguinte manifesto YAML em um arquivo chamado
efs-statefulset.yaml
. Este manifesto de exemplo inicia um contêiner Ubuntu Linux que monta seu recurso EFS em/efs-data
. O contêiner grava a cada cinco segundos em um arquivo no seu recurso EFS chamadoout.txt
.apiVersion: apps/v1 kind: StatefulSet metadata: name: efs-shell spec: selector: matchLabels: app: test-efs serviceName: efs-app replicas: 1 template: metadata: labels: app: test-efs spec: terminationGracePeriodSeconds: 10 containers: - name: linux image: ubuntu:bionic command: ["/bin/sh"] args: ["-c", "while true; do echo $(date -u) >> /efs-data/out.txt; sleep 5; done"] volumeMounts: - name: efs-volume mountPath: /efs-data volumes: - name: efs-volume persistentVolumeClaim: claimName: CLAIM_NAME
Substitua CLAIM_NAME pelo nome do PersistentVolumeClaim que você especificou anteriormente - por exemplo,
efs-claim1
.Aplique o YAML ao seu cluster.
kubectl apply -f efs-statefulset.yaml
A saída confirma a criação do StatefulSet.
statefulset.apps/efs-shell created
O StatefulSet pode levar vários minutos para baixar e iniciar a imagem do contêiner.
Confirme se o Pod do StatefulSet está no status
Running
comkubectl get pods
.kubectl get pods -l app=test-efs
A saída inclui o nome do Pod e seu status. Na resposta a seguir, o nome do Pod é
efs-shell-0
.NAME READY STATUS RESTARTS AGE efs-shell-0 1/1 Running 0 1m
Depois que o Pod estiver no status Em execução, use
kubectl exec
para se conectar ao Pod que hospeda o StatefulSet.kubectl exec -it efs-shell-0 -- bash
O comando
kubectl
inicia um shell no Pod.Para confirmar se o recurso EFS está montado, verifique o conteúdo do arquivo
out.txt
com o comandotail
.tail /efs-data/out.txt
A saída contém horários recentes em UTC.
Desconecte-se do Pod com o comando
exit
.exit
Seu shell retorna para sua máquina local.
Limpar
Para remover o StatefulSet, use kubectl delete
.
kubectl delete -f efs-statefulset.yaml
O que vem a seguir
- Aprenda a configurar um recurso EFS
- Aprenda a usar StorageClasses com suas cargas de trabalho