As versões 1.6 e posteriores do GKE no AWS suportam o Elastic File System (EFS) da AWS através do controlador CSI do EFS. Este tópico explica como montar um sistema de ficheiros EFS existente como um PersistentVolume nos seus clusters de utilizadores.
Antes de começar
Para executar os passos neste tópico, precisa do seguinte:
- Um sistema de ficheiros EFS existente na mesma VPC da AWS que a sua instalação do GKE na AWS.
- Pelo menos, um destino de montagem do EFS na mesma VPC da AWS que a sua instalação do GKE na AWS.
- Todos os destinos de montagem do EFS têm de pertencer ao seguinte:
- As sub-redes privadas para a sua instalação do GKE no AWS. Por predefinição, o GKE na AWS cria sub-redes com o nome
gke-CLUSTER_ID-private-AWS_ZONE
, em que CLUSTER_ID é o ID do cluster de utilizadores e AWS_ZONE é a zona de disponibilidade da AWS. - O grupo de segurança do node pool.
Por predefinição, o GKE na AWS cria node pools com o nome
gke-CLUSTER_ID-nodepool
, em que CLUSTER_ID é o ID do cluster de utilizadores.
- As sub-redes privadas para a sua instalação do GKE no AWS. Por predefinição, o GKE na AWS cria sub-redes com o nome
- No diretório do
anthos-aws
, useanthos-gke
para mudar o contexto para o cluster de utilizadores. Substitua CLUSTER_NAME pelo nome do cluster de utilizadores.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Usar um PersistentVolume do EFS
Para usar um sistema de ficheiros EFS como PersistentVolume com os seus clusters de utilizadores, primeiro cria um PersistentVolume e, em seguida, cria um PersistentVolumeClaim ao qual faz referência na sua carga de trabalho.
Criar um PersistentVolume
Para criar um PersistentVolume com o controlador CSI do EFS, siga os passos seguintes.
No diretório do
anthos-aws
, useanthos-gke
para mudar o contexto para o cluster de utilizadores. Substitua CLUSTER_NAME pelo nome do cluster de utilizadores.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
A configuração do PersistentVolume que usa depende de se está a estabelecer ligação diretamente ao Elastic File System ou através de um ponto de acesso. Selecione esta opção se estiver a estabelecer ligação ao Elastic File System diretamente ou através de um ponto de acesso.
Interaja diretamente
Copie o seguinte manifesto YAML para um ficheiro com o nome
efs-volume.yaml
. O manifesto faz referência à classe de armazenamento do EFS que criou anteriormente.apiVersion: v1 kind: PersistentVolume metadata: name: VOLUME_NAME spec: capacity: # Note: storage capacity is not used by the EFS CSI driver. # It is required by the PersistentVolume spec. storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: "" # storageClassName is not required, see note in the following section. claimRef: name: CLAIM_NAME namespace: default csi: driver: efs.csi.aws.com volumeHandle: EFS_FILE_SYSTEM_ID
Substitua o seguinte:
- VOLUME_NAME com um nome para o volume persistente.
- CLAIM_NAME com o nome que quer usar para o PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID com o ID do sistema de ficheiros EFS. Por
exemplo,
fs-12345678a
.
Ponto de acesso
Copie o seguinte manifesto YAML para um ficheiro com o nome
efs-volume.yaml
. O manifesto faz referência à classe de armazenamento do EFS que criou anteriormente.apiVersion: v1 kind: PersistentVolume metadata: name: VOLUME_NAME spec: capacity: # Note: storage capacity is not used by the EFS CSI driver. # It is required by the PersistentVolume spec. storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: "" # storageClassName is not required, see note in the following section. claimRef: name: CLAIM_NAME namespace: default csi: driver: efs.csi.aws.com volumeHandle: EFS_FILE_SYSTEM_ID::ACCESS_POINT_ID
Substitua o seguinte:
- VOLUME_NAME com um nome para o volume persistente.
- CLAIM_NAME com o nome que quer usar para o PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID com o ID do sistema de ficheiros EFS. Por
exemplo,
fs-12345678a
. - ACCESS_POINT_ID com o ID do seu ponto de acesso. Por exemplo,
fsap-1234567890abcde
.
Aplique o YAML ao cluster de utilizadores.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-volume.yaml
O resultado confirma a criação do PersistentVolume.
persistentvolume/VOLUME_NAME created
Criar um PersistentVolumeClaim
Para usar o sistema de ficheiros EFS com as suas cargas de trabalho, crie um PersistentVolumeClaim.
Para criar o PersistentVolumeClaim, copie o manifesto YAML seguinte para um ficheiro denominado
efs-claim.yaml
.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: CLAIM_NAME spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 5Gi
Substitua CLAIM_NAME por um nome para o seu PersistentVolumeClaim. Por exemplo,
efs-claim1
.Aplique o YAML ao cluster de utilizadores.
env HTTPS_PROXY=http://localhost:8118 \ 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.
Os passos nesta secção criam um StatefulSet de exemplo com o seu sistema de ficheiros EFS montado. 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 sistema de ficheiros 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 Ubuntu Linux que monta o seu sistema de ficheiros EFS em/efs-data
. O contentor escreve a cada cinco segundos num ficheiro no seu sistema de ficheiros 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 o seguinte:
- CLAIM_NAME com o nome do PersistentVolumeClaim
que especificou anteriormente. Por exemplo,
efs-claim1
.
- CLAIM_NAME com o nome do PersistentVolumeClaim
que especificou anteriormente. Por exemplo,
Aplique o YAML ao cluster de utilizadores.
env HTTPS_PROXY=http://localhost:8118 \ 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 a imagem do contentor e a iniciar.
Confirme se o pod do StatefulSet está no estado
Running
comkubectl get pods
.env HTTPS_PROXY=http://localhost:8118 \ 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.env HTTPS_PROXY=http://localhost:8118 \ kubectl exec -it efs-shell-0 -- bash
O comando
kubectl
inicia uma shell no pod.Para confirmar que o sistema de ficheiros 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.
Para remover o StatefulSet, use
kubectl delete
.env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f efs-statefulset.yaml
Limpar
Para remover os recursos que criou nas secções anteriores, execute os seguintes comandos:
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f efs-statefulset.yaml
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f efs-claim.yaml
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f efs-volume.yaml
O que se segue?
- Saiba mais sobre formas adicionais de usar volumes do EFS nos
aws-efs-csi-driver
exemplos.