GKE on AWS en las versiones 1.6 y posteriores admiten el Elastic File System de AWS (EFS) a través del controlador de CSI de EFS. En este tema, se explica cómo activar un sistema de archivos EFS existente como un PersistentVolume en tus clústeres de usuarios.
Antes de comenzar
Para realizar los pasos de este tema, necesitas lo siguiente:
- Un sistema de archivos EFS existente en la misma VPC de AWS que tu instalación de GKE on AWS.
- Al menos un objetivo de activación de EFS en la misma VPC de AWS que tu instalación de GKE on AWS.
- Todos tus objetivos de activación de EFS deben pertenecer a lo siguiente:
- Las subredes privadas para la instalación de GKE on AWS. De forma predeterminada, GKE on AWS crea subredes llamadas
gke-CLUSTER_ID-private-AWS_ZONE
, en las que CLUSTER_ID es tu ID de 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 on AWS crea grupos de nodos llamados
gke-CLUSTER_ID-nodepool
, en los que CLUSTER_ID es el ID de tu clúster de usuario.
- Las subredes privadas para la instalación de GKE on AWS. De forma predeterminada, GKE on AWS crea subredes llamadas
- Desde tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu clúster de usuario.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Reemplaza CLUSTER_NAME por el nombre de tu clúster de usuario.
Usa un PersistentVolume de EFS
Para usar un sistema de archivos FFS como PersistentVolume con tus clústeres de usuario, primero debes crear un PersistentVolume y, luego, crear una PersistentVolumeClaim a la que harás referencia en tu carga de trabajo.
Crea un PersistentVolume
Para crear un PersistentVolume con el controlador CSI de EFS, realiza los siguientes pasos.
Desde tu directorio de
anthos-aws
, usaanthos-gke
para cambiar el contexto a tu clúster de usuario.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Reemplaza CLUSTER_NAME por el nombre de tu clúster de usuario.La configuración de PersistentVolume que usas depende de si te conectas de forma directa al Elastic File System o a través de un punto de acceso. Selecciona si te conectas de forma directa a Elastic File System o a través de un punto de acceso.
Conexión directa
Copia el siguiente YAML en un archivo llamado
efs-volume.yaml
. El manifiesto hace referencia a la clase de almacenamiento de EFS que creaste antes.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
Reemplaza lo siguiente:
- VOLUME_NAME con un nombre para el volumen persistente.
- CLAIM_NAME con el nombre que deseas usar para la PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID con el ID del sistema de archivos EFS. Por ejemplo,
fs-12345678a
.
Punto de acceso
Copia el siguiente YAML en un archivo llamado
efs-volume.yaml
. El manifiesto hace referencia a la clase de almacenamiento de EFS que creaste antes.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
Reemplaza lo siguiente:
- VOLUME_NAME con un nombre para el volumen persistente.
- CLAIM_NAME con el nombre que deseas usar para la PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID con el ID del sistema de archivos EFS. Por ejemplo,
fs-12345678a
. - ACCESS_POINT_ID con el ID de tu punto de acceso. Por ejemplo,
fsap-1234567890abcde
Aplica el 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
Crea una PersistentVolumeClaim
Para usar el sistema de archivos EFS con tus cargas de trabajo, crea una PersistentVolumeClaim.
Para crear la 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
Reemplaza CLAIM_NAME por un nombre para tu PersistentVolumeClaim. Por ejemplo,
efs-claim1
.Aplica el 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 la PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Cree un StatefulSet
Después de crear una PersistentVolumeClaim, puedes usarla en una carga de trabajo.
En los pasos de esta sección, se crea un StatefulSet de ejemplo con el sistema de archivos EFS activado. También puedes usar una PersistentVolumeClaim con otros tipos de cargas de trabajo, como pods e implementaciones, si haces referencia al reclamo en spec.volumes
.
Para crear un StatefulSet que active el sistema de archivos 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 el sistema de archivos EFS en/efs-data
. El contenedor escribe cada cinco segundos en un archivo de tu sistema de archivos 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 lo siguiente:
- CLAIM_NAME por el nombre de la PersistentVolumeClaim que especificaste antes. Por ejemplo,
efs-claim1
.
- CLAIM_NAME por el nombre de la PersistentVolumeClaim que especificaste antes. Por ejemplo,
Aplica el 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 del 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 tenga el estado
Running
conkubectl get pods
.env HTTPS_PROXY=http://localhost:8118 \ 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.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 tu sistema de archivos 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.
Para quitar el StatefulSet, usa
kubectl delete
.env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f efs-statefulset.yaml
Realice una limpieza
Para quitar los recursos que creaste 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
¿Qué sigue?
- Obtén más información sobre otras formas de usar los volúmenes de EFS en los ejemplos de
aws-efs-csi-driver
.