Use um recurso EFS

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

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

  1. 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 chamado 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 você especificou anteriormente - por exemplo, efs-claim1 .

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

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

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

    tail /efs-data/out.txt
    

    A saída contém horários recentes em UTC.

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