Use um recurso EFS

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
  1. 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.

  1. 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
  1. 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.

  1. 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 denominado out.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.

  2. 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.

  3. Confirme se o pod do StatefulSet está no estado Running com kubectl 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
    
  4. 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.

  5. Para confirmar que o recurso EFS está montado, verifique o conteúdo do ficheiro out.txt com o comando tail.

    tail /efs-data/out.txt
    

    O resultado contém horas recentes em UTC.

  6. 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?