Utilice un recurso de EFS

El Sistema de Archivos Elástico (EFS) es el mecanismo subyacente de AWS para proporcionar almacenamiento (espacio en disco) a su clúster. Un PersistentVolume es un recurso del clúster que pone el almacenamiento de EFS a disposición de sus cargas de trabajo y garantiza su persistencia incluso cuando no hay cargas de trabajo conectadas a él. Este tema describe cómo una carga de trabajo puede acceder a un PersistentVolume con un PersistentVolumeClaim.

Esta página está dirigida a operadores y especialistas en almacenamiento que desean configurar y administrar el almacenamiento. Para obtener más información sobre los roles comunes y las tareas de ejemplo que mencionamos en Google Cloud contenido, consulte Roles y tareas de usuario comunes de GKE Enterprise .

GKE en AWS admite el aprovisionamiento estático de PersistentVolumes para todas las versiones de Kubernetes compatibles. Para clústeres con la versión 1.24 o posterior de Kubernetes, GKE en AWS también admite el aprovisionamiento dinámico. Para usar el aprovisionamiento dinámico, el administrador del clúster debe configurarlo. Para saber cómo, consulte "Configurar un PersistentVolume .

Crear un PersistentVolumeClaim

Seleccione la pestaña adecuada a continuación según si desea que su carga de trabajo se conecte a un volumen persistente aprovisionado de forma estática o dinámica.

Estático

Estas instrucciones presuponen que el administrador del clúster ya ha aprovisionado al menos un PersistentVolume. Para acceder a este PersistentVolume y usar su EFS subyacente con sus cargas de trabajo, cree un PersistentVolumeClaim.

Para crear un PersistentVolumeClaim para un PersistentVolume aprovisionado estáticamente, copie el siguiente manifiesto YAML en un archivo llamado 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

Reemplazar:

  • CLAIM_NAME : el nombre que elija para vincular su PersistentVolumeClaim (por ejemplo, efs-claim1 . Déjelo en blanco para vincularlo a la clase de almacenamiento predeterminada.
  1. Aplique el YAML a su clúster.

      kubectl apply -f efs-claim.yaml
    

    Esta salida confirma la creación de PersistentVolumeClaim.

    persistentvolumeclaim/CLAIM_NAME created
    

Dinámica

Estas instrucciones presuponen que el administrador del clúster ya ha aprovisionado al menos una StorageClass para el aprovisionamiento dinámico. Para crear un PersistentVolume aprovisionado dinámicamente con esta StorageClass y usar el punto de acceso EFS subyacente con sus cargas de trabajo, cree un PersistentVolumeClaim.

Para crear un PersistentVolumeClaim, siga estos pasos. El controlador CSI de EFS utiliza este PersistentVolumeClaim con la StorageClass indicada para aprovisionar dinámicamente un PersistentVolume.

  1. Copie el siguiente manifiesto YAML en un archivo llamado efs-claim.yaml .
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: CLAIM_NAME
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: "EFS_STORAGE_CLASS_NAME"
  resources:
    requests:
      storage: 5Gi

Reemplazar:

  • CLAIM_NAME : un nombre que elija para su PersistentVolumeClaim, por ejemplo, efs-claim1
  • EFS_STORAGE_CLASS_NAME : el nombre de la clase de almacenamiento a la que desea vincular su PersistentVolumeClaim. Deje este campo en blanco para vincular a la clase de almacenamiento predeterminada.
  1. Aplique el YAML a su clúster.

      kubectl apply -f efs-claim.yaml
    

    La salida confirma la creación de PersistentVolumeClaim.

    persistentvolumeclaim/CLAIM_NAME created
    

Crear un conjunto con estado

Tras crear un PersistentVolumeClaim, puede usarlo en una carga de trabajo. En esta sección se crea un StatefulSet de ejemplo que utiliza un PersistentVolumeClaim. También puede usar un PersistentVolumeClaim con otros tipos de carga de trabajo, como pods e implementaciones, haciendo referencia al reclamo en spec.volumes .

Para crear un StatefulSet que monte el recurso EFS al que se hace referencia en su PersistentVolumeClaim, realice los siguientes pasos.

  1. Copia el siguiente manifiesto YAML en un archivo llamado efs-statefulset.yaml . Este manifiesto de ejemplo inicia un contenedor de Ubuntu Linux que monta tu recurso EFS en /efs-data . El contenedor escribe cada cinco segundos en un archivo de tu recurso EFS llamado 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
    

    Reemplace CLAIM_NAME con el nombre del PersistentVolumeClaim que especificó anteriormente, por ejemplo, efs-claim1 .

  2. Aplique el YAML a su clúster.

     kubectl apply -f efs-statefulset.yaml
    

    La salida confirma la creación del StatefulSet.

    statefulset.apps/efs-shell created
    

    El StatefulSet puede tardar varios minutos en descargar y ejecutar la imagen del contenedor.

  3. Confirme que el pod de StatefulSet esté en estado Running con kubectl get pods .

      kubectl get pods -l app=test-efs
    

    La salida incluye el nombre del pod y su estado. En la siguiente respuesta, el nombre del pod es efs-shell-0 .

    NAME          READY   STATUS    RESTARTS   AGE
    efs-shell-0   1/1     Running   0          1m
    
  4. Una vez que el Pod esté en estado de ejecución, use kubectl exec para conectarse al Pod que aloja el StatefulSet.

      kubectl exec -it efs-shell-0 -- bash
    

    El comando kubectl lanza un shell en el Pod.

  5. Para confirmar que su recurso EFS está montado, verifique el contenido del archivo out.txt con el comando tail .

    tail /efs-data/out.txt
    

    La salida contiene horas recientes en UTC.

  6. Desconéctese del Pod con el comando exit .

      exit
    

    Su shell regresa a su máquina local.

Limpiar

Para eliminar el StatefulSet, utilice kubectl delete .

  kubectl delete -f efs-statefulset.yaml

¿Qué sigue?