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.
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.
- 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.
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.
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 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
Sustituye CLAIM_NAME por el nombre de PersistentVolumeClaim que especificaste anteriormente; por ejemplo,
efs-claim1
.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.
Confirma que el pod de StatefulSet tiene el 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
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.Para confirmar que el recurso de EFS está montado, comprueba el contenido del archivo
out.txt
con el comandotail
.tail /efs-data/out.txt
El resultado contiene horas recientes en UTC.
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
- Consulta cómo configurar un recurso de EFS.
- Consulta cómo usar StorageClasses con tus cargas de trabajo.