Las versiones 1.6 y posteriores de GKE en AWS admiten Elastic File System (EFS) de AWS a través del controlador CSI de EFS. En este tema se explica cómo montar un sistema de archivos EFS como PersistentVolume en tus clústeres de usuario.
Antes de empezar
Para seguir los pasos de este tema, necesitas lo siguiente:
- Un sistema de archivos de EFS en la misma VPC de AWS que tu instalación de GKE en AWS.
- Al menos un destino de montaje de EFS en la misma VPC de AWS que tu instalación de GKE en AWS.
- Todos los destinos de montaje de EFS deben pertenecer a lo siguiente:
- Las subredes privadas de tu instalación de GKE en AWS. De forma predeterminada, GKE en AWS crea subredes llamadas
gke-CLUSTER_ID-private-AWS_ZONE
, donde CLUSTER_ID es el ID de tu clúster de usuario y AWS_ZONE es la zona de disponibilidad de AWS. - El grupo de seguridad del grupo de nodos.
De forma predeterminada, GKE en AWS crea grupos de nodos llamados
gke-CLUSTER_ID-nodepool
, donde CLUSTER_ID es el ID de tu clúster de usuario.
- Las subredes privadas de tu instalación de GKE en AWS. De forma predeterminada, GKE en AWS crea subredes llamadas
- En tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu clúster de usuarios. Sustituye CLUSTER_NAME por el nombre de tu clúster de usuario.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Usar un PersistentVolume de EFS
Para usar un sistema de archivos EFS como PersistentVolume con tus clústeres de usuario, primero debes crear un PersistentVolume y, a continuación, un PersistentVolumeClaim al que harás referencia en tu carga de trabajo.
Crear un PersistentVolume
Para crear un PersistentVolume con el controlador CSI de EFS, sigue estos pasos.
En tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu clúster de usuarios. Sustituye CLUSTER_NAME por el nombre de tu clúster de usuario.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
La configuración de PersistentVolume que utilices dependerá de si te conectas directamente a Elastic File System o a través de un punto de acceso. Selecciona esta opción si te vas a conectar a Elastic File System directamente o a través de un punto de acceso.
Conectar directamente
Copia el siguiente manifiesto YAML en un archivo llamado
efs-volume.yaml
. El manifiesto hace referencia a la clase de almacenamiento de EFS que creaste anteriormente.apiVersion: v1 kind: PersistentVolume metadata: name: VOLUME_NAME spec: capacity: # Note: storage capacity is not used by the EFS CSI driver. # It is required by the PersistentVolume spec. storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: "" # storageClassName is not required, see note in the following section. claimRef: name: CLAIM_NAME namespace: default csi: driver: efs.csi.aws.com volumeHandle: EFS_FILE_SYSTEM_ID
Haz los cambios siguientes:
- VOLUME_NAME con un nombre para el volumen persistente.
- CLAIM_NAME con el nombre que quieras usar para el PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID con el ID de tu sistema de archivos de EFS. Por ejemplo,
fs-12345678a
.
Punto de acceso
Copia el siguiente manifiesto YAML en un archivo llamado
efs-volume.yaml
. El manifiesto hace referencia a la clase de almacenamiento de EFS que creaste anteriormente.apiVersion: v1 kind: PersistentVolume metadata: name: VOLUME_NAME spec: capacity: # Note: storage capacity is not used by the EFS CSI driver. # It is required by the PersistentVolume spec. storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: "" # storageClassName is not required, see note in the following section. claimRef: name: CLAIM_NAME namespace: default csi: driver: efs.csi.aws.com volumeHandle: EFS_FILE_SYSTEM_ID::ACCESS_POINT_ID
Haz los cambios siguientes:
- VOLUME_NAME con un nombre para el volumen persistente.
- CLAIM_NAME con el nombre que quieras usar para el PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID con el ID de tu sistema de archivos de EFS. Por ejemplo,
fs-12345678a
. - ACCESS_POINT_ID con el ID de tu punto de acceso. Por ejemplo,
fsap-1234567890abcde
.
Aplica el archivo YAML a tu clúster de usuario.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-volume.yaml
El resultado confirma la creación de PersistentVolume.
persistentvolume/VOLUME_NAME created
Crear un PersistentVolumeClaim
Para usar tu sistema de archivos EFS con tus cargas de trabajo, crea un PersistentVolumeClaim.
Para crear el PersistentVolumeClaim, copia el siguiente manifiesto YAML en un archivo llamado
efs-claim.yaml
.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: CLAIM_NAME spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 5Gi
Sustituye CLAIM_NAME por el nombre de tu PersistentVolumeClaim. Por ejemplo,
efs-claim1
.Aplica el archivo YAML a tu clúster de usuario.
env HTTPS_PROXY=http://localhost:8118 \ 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 los pasos de esta sección se crea un StatefulSet de ejemplo con el sistema de archivos EFS montado. También puedes usar un PersistentVolumeClaim con otros tipos de carga de trabajo, como pods y despliegues, haciendo referencia a la reclamación en spec.volumes
.
Para crear un StatefulSet que monte el sistema de archivos 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 sistema de archivos EFS en/efs-data
. El contenedor escribe cada cinco segundos en un archivo de su sistema de archivos 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
Haz los cambios siguientes:
- CLAIM_NAME con el nombre de PersistentVolumeClaim
que has especificado anteriormente. Por ejemplo,
efs-claim1
.
- CLAIM_NAME con el nombre de PersistentVolumeClaim
que has especificado anteriormente. Por ejemplo,
Aplica el archivo YAML a tu clúster de usuario.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-statefulset.yaml
El resultado confirma la creación de StatefulSet.
statefulset.apps/efs-shell created
El StatefulSet puede tardar varios minutos en descargar la imagen del contenedor e iniciarse.
Confirma que el pod de StatefulSet tiene el estado
Running
conkubectl get pods
.env HTTPS_PROXY=http://localhost:8118 \ 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.env HTTPS_PROXY=http://localhost:8118 \ kubectl exec -it efs-shell-0 -- bash
El comando
kubectl
inicia un shell en el pod.Para confirmar que el sistema de archivos 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.
Para quitar el StatefulSet, usa
kubectl delete
.env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f efs-statefulset.yaml
Eliminar los recursos utilizados
Para eliminar los recursos que has creado en las secciones anteriores, ejecuta los siguientes comandos:
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f efs-statefulset.yaml
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f efs-claim.yaml
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f efs-volume.yaml
Siguientes pasos
- Consulta otras formas de usar volúmenes de EFS en los ejemplos de
aws-efs-csi-driver
.