Usar un recurso de EFS

El sistema de archivos elástico (EFS) es el mecanismo subyacente de AWS que proporciona almacenamiento (espacio en disco) a tu clúster. Un PersistentVolume es un recurso de clúster que pone el almacenamiento de EFS a disposición de tus cargas de trabajo y asegura que se mantenga incluso cuando no haya cargas de trabajo conectadas a él. En este tema se describe cómo puede acceder una carga de trabajo a un PersistentVolume con un PersistentVolumeClaim.

Esta página está dirigida a operadores y especialistas en almacenamiento que quieran configurar y gestionar el almacenamiento. Para obtener más información sobre los roles habituales y las tareas de ejemplo a las que hacemos referencia en el contenido de Google Cloud , consulta Roles y tareas de usuario habituales de GKE.

GKE on AWS admite el aprovisionamiento estático de PersistentVolumes para todas las versiones de Kubernetes compatibles. En los clústeres con la versión 1.24 de Kubernetes o posterior, 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 hacerlo, consulta configurar un PersistentVolume.

Crear un PersistentVolumeClaim

Elige la pestaña adecuada a continuación en función de si quieres 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 presupone que el administrador del clúster ya ha aprovisionado al menos un PersistentVolume. Para acceder a este PersistentVolume y usar su EFS subyacente con tus cargas de trabajo, crea un PersistentVolumeClaim.

Para crear un 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

Sustituye:

  • CLAIM_NAME: el nombre que elijas para tu PersistentVolumeClaim para vincularlo. Por ejemplo, efs-claim1. Déjalo en blanco para vincularlo a la clase de almacenamiento predeterminada.
  1. Aplica el archivo YAML a tu clúster.

      kubectl apply -f efs-claim.yaml
    

    Este resultado confirma la creación de PersistentVolumeClaim.

    persistentvolumeclaim/CLAIM_NAME created
    

Dinámico

En estas instrucciones se da por hecho que el administrador del clúster ya ha aprovisionado al menos una StorageClass para el aprovisionamiento dinámico. Para crear un objeto PersistentVolume aprovisionado dinámicamente con este StorageClass y usar el punto de acceso de EFS subyacente con tus cargas de trabajo, crea un objeto PersistentVolumeClaim.

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

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

Sustituye:

  • CLAIM_NAME: el nombre que elijas para tu PersistentVolumeClaim. Por ejemplo, efs-claim1.
  • EFS_STORAGE_CLASS_NAME: el nombre de StorageClass al que quieras que se vincule tu PersistentVolumeClaim. Deja este campo en blanco para vincularlo a la clase de almacenamiento predeterminada.
  1. Aplica el archivo YAML a tu clúster.

      kubectl apply -f efs-claim.yaml
    

    El resultado confirma la creación de PersistentVolumeClaim.

    persistentvolumeclaim/CLAIM_NAME created
    

Crear un StatefulSet

Una vez que hayas creado un PersistentVolumeClaim, podrás usarlo en una carga de trabajo. En esta sección se crea un StatefulSet de ejemplo que usa un PersistentVolumeClaim. También puedes usar un PersistentVolumeClaim con otros tipos de cargas de trabajo, como pods y despliegues, haciendo referencia a la reclamación en spec.volumes.

Para crear un StatefulSet que monte el recurso de EFS al que se hace referencia en tu PersistentVolumeClaim, sigue estos 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 de 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
    

    Sustituye CLAIM_NAME por el nombre de PersistentVolumeClaim que especificaste anteriormente; por ejemplo, efs-claim1.

  2. Aplica el archivo YAML a tu clúster.

     kubectl apply -f efs-statefulset.yaml
    

    El resultado confirma la creación de StatefulSet.

    statefulset.apps/efs-shell created
    

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

  3. Confirma que el pod de StatefulSet tiene el 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. Cuando el pod tenga el estado Running, 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 el recurso de EFS está montado, comprueba el contenido del archivo out.txt con el comando tail.

    tail /efs-data/out.txt
    

    El resultado contiene horas recientes en UTC.

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

      exit
    

    Tu shell vuelve a tu máquina local.

Limpieza

Para quitar el StatefulSet, usa kubectl delete.

  kubectl delete -f efs-statefulset.yaml

Siguientes pasos