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.
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.
- 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.
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.
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 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
Reemplaza CLAIM_NAME por el nombre de la PersistentVolumeClaim que especificaste antes, por ejemplo,
efs-claim1
.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.
Confirma que el pod de StatefulSet tenga el estado
Running
conkubectl 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
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.Para confirmar que tu recurso de EFS esté activado, verifica el contenido del archivo
out.txt
con el comandotail
.tail /efs-data/out.txt
El resultado contiene las horas recientes en UTC.
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?
- Obtén información para configurar un recurso de EFS.
- Obtén información para usar recursos StorageClass con tus cargas de trabajo.