Usa un recurso de EFS

El Elastic File System (EFS) es el mecanismo subyacente de AWS para proporcionar almacenamiento (espacio en el disco) a tu clúster. Un PersistentVolume es un recurso de clúster que hace que el almacenamiento de EFS esté disponible para tus cargas de trabajo y garantiza que persista incluso cuando no haya cargas de trabajo conectadas a él. En este tema, se describe cómo una carga de trabajo puede acceder a un PersistentVolume con una PersistentVolumeClaim.

GKE on AWS admite el aprovisionamiento estático de PersistentVolumes para todas las versiones compatibles de Kubernetes. Para los clústeres de Kubernetes versión 1.24 o posteriores, GKE on AWS también admite el aprovisionamiento dinámico. Para usar el aprovisionamiento dinámico, el administrador de clústeres debe configurarlo. Si quieres obtener información sobre cómo hacerlo, consulta Configura un PersistentVolume.

Crea una PersistentVolumeClaim

Elige la pestaña adecuada a continuación, dependiendo de si deseas que tu carga de trabajo se conecte a un volumen persistente aprovisionado de forma estática o dinámica.

Estática

En estas instrucciones, se da por sentado que el administrador de clústeres ya aprovisionó al menos un PersistentVolume. Para acceder a este PersistentVolume y usar su EFS subyacente con tus cargas de trabajo, crea una PersistentVolumeClaim.

A fin de crear una PersistentVolumeClaim para un PersistentVolume aprovisionado de forma estática, copia 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

Reemplaza lo siguiente:

  • CLAIM_NAME: Es un nombre que eliges para que tu PersistentVolumeClaim se vincule, por ejemplo, efs-claim1. Déjalo en blanco para vincularla a la clase de almacenamiento predeterminada.
  1. Aplica el YAML a tu clúster.

      kubectl apply -f efs-claim.yaml
    

    Este resultado confirma la creación de la PersistentVolumeClaim.

    persistentvolumeclaim/CLAIM_NAME created
    

Dynamic

En estas instrucciones, se da por sentado que el administrador de clústeres ya aprovisionó al menos una StorageClass para el aprovisionamiento dinámico. Para crear un PersistentVolume aprovisionado de forma dinámica con esta StorageClass y usar el punto de acceso de EFS subyacente con tus cargas de trabajo, crea una PersistentVolumeClaim.

Para crear una PersistentVolumeClaim, sigue estos pasos: El controlador de CSI de EFS usa esta PersistentVolumeClaim con la StorageClass indicada para aprovisionar de forma dinámica un PersistentVolume.

  1. Copia el siguiente 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

Reemplaza lo siguiente:

  • CLAIM_NAME: Un nombre que eliges para tu PersistentVolumeClaim, por ejemplo, efs-claim1.
  • EFS_STORAGE_CLASS_NAME: El nombre de la StorageClass a la que deseas vincular tu PersistentVolumeClaim. Deja este campo en blanco para vincularla a la clase de almacenamiento predeterminada.
  1. Aplica el YAML a tu clúster.

      kubectl apply -f efs-claim.yaml
    

    El resultado confirma la creación de la PersistentVolumeClaim.

    persistentvolumeclaim/CLAIM_NAME created
    

Cree un StatefulSet

Después de crear una PersistentVolumeClaim, puedes usarla en una carga de trabajo. En esta sección, se crea un StatefulSet de ejemplo que usa una PersistentVolumeClaim. También puedes usar una PersistentVolumeClaim con otros tipos de cargas de trabajo, como Pods y Deployments, si haces referencia a la reclamación en spec.volumes.

Para crear un StatefulSet que active el recurso de EFS al que se hace referencia en tu PersistentVolumeClaim, realiza los siguientes pasos.

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

    Reemplaza CLAIM_NAME por el nombre de la PersistentVolumeClaim que especificaste antes, por ejemplo, efs-claim1.

  2. Aplica el YAML a tu clúster.

     kubectl apply -f efs-statefulset.yaml
    

    El resultado confirma la creación del StatefulSet.

    statefulset.apps/efs-shell created
    

    El StatefulSet puede tardar varios minutos en descargar e iniciar la imagen de contenedor.

  3. Confirma que el pod de StatefulSet tenga el estado Running con kubectl get pods.

      kubectl get pods -l app=test-efs
    

    El resultado 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, usa kubectl exec para conectarte al pod que aloja el StatefulSet.

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

    El comando kubectl inicia un shell en el pod.

  5. Para confirmar que tu recurso de EFS esté activado, verifica el contenido del archivo out.txt con el comando tail.

    tail /efs-data/out.txt
    

    El resultado contiene las horas recientes en UTC.

  6. Desconéctate del pod con el comando exit.

      exit
    

    La shell vuelve a la máquina local.

Realiza una limpieza

Para quitar el StatefulSet, usa kubectl delete.

  kubectl delete -f efs-statefulset.yaml

¿Qué sigue?