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.
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.
- 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.
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.
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 llamadoout.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
.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.
Confirme que el pod de StatefulSet esté en estado
Running
conkubectl 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
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.Para confirmar que su recurso EFS está montado, verifique el contenido del archivo
out.txt
con el comandotail
.tail /efs-data/out.txt
La salida contiene horas recientes en UTC.
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?
- Aprenda a configurar un recurso EFS
- Aprenda a utilizar StorageClasses con sus cargas de trabajo