As versões 1.6 e posteriores do GKE na AWS são compatíveis com o Elastic File System (EFS) da AWS por meio do driver CSI do EFS. Neste tópico, explicamos como montar um sistema de arquivos EFS atual como um PersistentVolume nos clusters do usuário.
Antes de começar
Para executar as etapas deste tópico, você precisa do seguinte:
- Um sistema de arquivos EFS atual na mesma VPC da AWS que a instalação do GKE na AWS.
- Pelo menos um destino de montagem do EFS na mesma VPC da AWS que a instalação do GKE na AWS.
- Todos os destinos de ativação do EFS precisam pertencer ao seguinte:
- As sub-redes particulares da instalação do GKE
na AWS. Por padrão, o GKE na AWS cria sub-redes chamadas
gke-CLUSTER_ID-private-AWS_ZONE
, em que CLUSTER_ID é o ID do cluster de usuários e AWS_ZONE é a zona de disponibilidade da AWS. - O grupo de segurança do pool de nós.
Por padrão, o GKE na AWS cria pools de nós chamados
gke-CLUSTER_ID-nodepool
, em que CLUSTER_ID é o ID do cluster de usuários.
- As sub-redes particulares da instalação do GKE
na AWS. Por padrão, o GKE na AWS cria sub-redes chamadas
- No diretório
anthos-aws
, useanthos-gke
para alternar o contexto para o cluster de usuários.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Substitua CLUSTER_NAME pelo nome do cluster de usuários.
Como usar um PersistentVolumeS EFS
Para usar um sistema de arquivos EFS como um PersistentVolume com os clusters de usuário, primeiro é preciso criar um PersistentVolume e depois criar um PersistentVolumeClaim que será referenciado na carga de trabalho.
Como criar um PersistentVolume
Para criar um PersistentVolume com o driver de EFS CS, siga as etapas abaixo.
No diretório
anthos-aws
, useanthos-gke
para alternar o contexto para o cluster de usuários.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Substitua CLUSTER_NAME pelo nome do cluster de usuários.A configuração do PersistentVolume que você usa depende de uma conexão direta com o Elastic File System ou de um ponto de acesso. Selecione se você estiver se conectando ao Elastic File System diretamente ou por meio de um ponto de acesso.
Conecte-se diretamente
Copie o seguinte manifesto do YAML para um arquivo chamado
efs-volume.yaml
: O manifesto faz referência à classe de armazenamento EFS que você 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:
- VOLUME_NAME por um nome para o volume permanente.
- CLAIM_NAME pelo nome que você quer usar para o PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID pelo código do sistema de arquivos EFS. Por exemplo,
fs-12345678a
.
Ponto de acesso
Copie o seguinte manifesto do YAML para um arquivo chamado
efs-volume.yaml
: O manifesto faz referência à classe de armazenamento EFS que você 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:
- VOLUME_NAME por um nome para o volume permanente.
- CLAIM_NAME pelo nome que você quer usar para o PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID pelo código do sistema de arquivos EFS. Por exemplo,
fs-12345678a
. - ACCESS_POINT_ID pelo código do ponto de acesso. Por exemplo,
fsap-1234567890abcde
.
Aplique o YAML ao usuário do cluster.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-volume.yaml
A saída confirma a criação do PersistentVolume.
persistentvolume/VOLUME_NAME created
Como criar um PersistentVolumeClaim
Para usar seu sistema de arquivos EFS com suas cargas de trabalho, crie um PersistentVolumeClaim.
Para criar o PersistentVolumeClaim, copie o seguinte manifesto YAML em um arquivo chamado
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 PersistentVolumeClaim. Por exemplo,
efs-claim1
.Aplique o YAML ao usuário do cluster.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-claim.yaml
A saída confirma a criação do PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Crie um StatefulSet
Depois de criar um PersistentVolumeClaim, você pode usá-lo em uma carga de trabalho.
As etapas nesta seção criam um exemplo de StatefulSet com o sistema de arquivos EFS ativado. Também é possível usar um PersistentVolumeClaim com outros tipos de carga de trabalho, como pods e implantações, fazendo referência à declaração em spec.volumes
.
Para criar um StatefulSet que ative o sistema de arquivos EFS referenciado no PersistentVolumeClaim, execute as etapas a seguir.
Copie o seguinte manifesto do YAML para um arquivo chamado
efs-statefulset.yaml
: Este manifesto de exemplo inicia um contêiner do Ubuntu Linux que ativa o sistema de arquivos EFS em/efs-data
. O contêiner grava a cada cinco segundos em um arquivo no sistema de arquivos 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 especificado anteriormente. Por exemplo,
efs-claim1
.
- CLAIM_NAME pelo nome do PersistentVolumeClaim especificado anteriormente. Por exemplo,
Aplique o YAML ao usuário do cluster.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-statefulset.yaml
A resposta confirma a criação do StatefulSet.
statefulset.apps/efs-shell created
O StatefulSet pode levar vários minutos para fazer o download da imagem do contêiner e ser iniciada.
Confirme se o pod de StatefulSet está no status
Running
comkubectl get pods
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods -l app=test-efs
A resposta inclui o nome do pod e o status dele. 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.env HTTPS_PROXY=http://localhost:8118 \ kubectl exec -it efs-shell-0 -- bash
O comando
kubectl
inicia um shell no pod.Para confirmar se o sistema de arquivos EFS está ativado, verifique o conteúdo do arquivo
out.txt
com o comandotail
.tail /efs-data/out.txt
A saída contém os horários recentes em UTC.
Desconecte-se do pod com o comando
exit
.exit
O shell retorna à máquina local.
Para remover o StatefulSet, use
kubectl delete
.env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f efs-statefulset.yaml
Limpeza
Para remover os recursos criados nas seçõ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
A seguir
- Saiba mais sobre como usar os volumes EFS nos exemplos de
aws-efs-csi-driver
.