O Elastic File System (EFS) é o mecanismo da AWS subjacente para fornecer armazenamento (espaço em disco) ao seu cluster. Um PersistentVolume é um recurso de cluster que disponibiliza o armazenamento do EFS às suas cargas de trabalho e garante que persiste mesmo quando não existem cargas de trabalho ligadas ao mesmo. Este tópico descreve como uma carga de trabalho pode aceder a um PersistentVolume com um PersistentVolumeClaim.
Esta página destina-se a operadores e especialistas em armazenamento que querem configurar e gerir o armazenamento. Para saber mais sobre as funções comuns e as tarefas de exemplo a que fazemos referência no Google Cloud conteúdo, consulte Funções e tarefas comuns de utilizadores do GKE.
O GKE no AWS suporta o aprovisionamento estático de PersistentVolumes para todas as versões do Kubernetes suportadas. Para clusters com a versão 1.24 ou posterior do Kubernetes, o GKE no AWS também suporta o aprovisionamento dinâmico. Para usar o aprovisionamento dinâmico, o administrador do cluster tem de o configurar. Para saber como, consulte o artigo sobre como configurar um PersistentVolume
.
Crie um PersistentVolumeClaim
Escolha o separador adequado abaixo, consoante pretenda que a sua carga de trabalho se ligue a um volume persistente aprovisionado estática ou dinamicamente.
Estático
Estas instruções pressupõem que o administrador do cluster já aprovisionou, pelo menos, um PersistentVolume. Para aceder a este PersistentVolume e usar o seu EFS subjacente com as suas cargas de trabalho, crie um PersistentVolumeClaim.
Para criar um PersistentVolumeClaim para um PersistentVolume aprovisionado estaticamente,
copie o seguinte manifesto YAML para um ficheiro denominado 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
Substituição:
- CLAIM_NAME: um nome que escolhe para o seu PersistentVolumeClaim
para associar, por exemplo,
efs-claim1
. Deixe em branco para associar à classe de armazenamento predefinida
Aplique o YAML ao seu cluster.
kubectl apply -f efs-claim.yaml
Este resultado confirma a criação do PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Dinâmico
Estas instruções pressupõem que o administrador do cluster já preparou, pelo menos, uma StorageClass para o aprovisionamento dinâmico. Para criar um PersistentVolume aprovisionado dinamicamente com esta StorageClass e usar o ponto de acesso do EFS subjacente com as suas cargas de trabalho, crie um PersistentVolumeClaim.
Para criar um PersistentVolumeClaim, siga estes passos. O controlador CSI do EFS usa este PersistentVolumeClaim com a StorageClass indicada para aprovisionar dinamicamente um PersistentVolume.
- Copie o seguinte manifesto YAML para um ficheiro com o nome
efs-claim.yaml
.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: CLAIM_NAME
spec:
accessModes:
- ReadWriteMany
storageClassName: "EFS_STORAGE_CLASS_NAME"
resources:
requests:
storage: 5Gi
Substituição:
- CLAIM_NAME: um nome que escolhe para o seu PersistentVolumeClaim, por exemplo,
efs-claim1
- EFS_STORAGE_CLASS_NAME: o nome da StorageClass à qual quer associar o PersistentVolumeClaim. Deixe este campo em branco para associar à classe de armazenamento predefinida
Aplique o YAML ao seu cluster.
kubectl apply -f efs-claim.yaml
O resultado confirma a criação do PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Crie um StatefulSet
Depois de criar um PersistentVolumeClaim, pode usá-lo num volume de trabalho.
Esta secção cria um StatefulSet de exemplo que usa um PersistentVolumeClaim.
Também pode usar um PersistentVolumeClaim com outros tipos de carga de trabalho, como pods e implementações, referenciando a reivindicação em spec.volumes
.
Para criar um StatefulSet que monte o recurso EFS referenciado no seu PersistentVolumeClaim, siga estes passos.
Copie o seguinte manifesto YAML para um ficheiro com o nome
efs-statefulset.yaml
. Este manifesto de exemplo inicia um contentor do Linux Ubuntu que monta o seu recurso do EFS em/efs-data
. O contentor escreve a cada cinco segundos num ficheiro no seu recurso EFS denominadoout.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 especificou anteriormente, por exemplo,
efs-claim1
.Aplique o YAML ao seu cluster.
kubectl apply -f efs-statefulset.yaml
O resultado confirma a criação do StatefulSet.
statefulset.apps/efs-shell created
O StatefulSet pode demorar vários minutos a transferir e iniciar a imagem do contentor.
Confirme se o pod do StatefulSet está no estado
Running
comkubectl get pods
.kubectl get pods -l app=test-efs
A saída inclui o nome do pod e o respetivo estado. Na resposta seguinte, o nome do pod é
efs-shell-0
.NAME READY STATUS RESTARTS AGE efs-shell-0 1/1 Running 0 1m
Depois de o pod estar no estado Running, use
kubectl exec
para se ligar ao pod que aloja o StatefulSet.kubectl exec -it efs-shell-0 -- bash
O comando
kubectl
inicia uma shell no pod.Para confirmar que o recurso EFS está montado, verifique o conteúdo do ficheiro
out.txt
com o comandotail
.tail /efs-data/out.txt
O resultado contém horas recentes em UTC.
Desligue-se do Pod com o comando
exit
.exit
A shell regressa à sua máquina local.
Limpar
Para remover o StatefulSet, use kubectl delete
.
kubectl delete -f efs-statefulset.yaml
O que se segue?
- Saiba como configurar um recurso do EFS
- Saiba como usar StorageClasses com as suas cargas de trabalho