GKE en AWS, versiones 1.6 y posteriores, es compatible con el sistema de archivos elástico (EFS) de AWS mediante el controlador CSI de EFS . En este tema se explica cómo montar un sistema de archivos EFS existente como un volumen persistente en los clústeres de usuarios.
Antes de empezar
Para realizar los pasos de este tema, necesitará lo siguiente:
- Un sistema de archivos EFS existente en la misma VPC de AWS que su instalación de GKE en AWS.
- Al menos un destino de montaje EFS en la misma VPC de AWS que su instalación de GKE en AWS.
- Todos los objetivos de montura EFS deben pertenecer a lo siguiente:
- Las subredes privadas de su 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 del 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 del clúster de usuario.
- Las subredes privadas de su instalación de GKE en AWS. De forma predeterminada, GKE en AWS crea subredes llamadas
- Desde su directorio
anthos-aws
, useanthos-gke
para cambiar el contexto a su clúster de usuarios. Reemplace CLUSTER_NAME con el nombre de su clúster de usuarios.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Uso de un volumen persistente de EFS
Para utilizar un sistema de archivos EFS como un PersistentVolume con sus clústeres de usuarios, primero debe crear un PersistentVolume y luego crear un PersistentVolumeClaim al que haga referencia en su carga de trabajo.
Creando un volumen persistente
Para crear un PersistentVolume con el controlador CSI de EFS, realice los siguientes pasos.
Desde su directorio
anthos-aws
, useanthos-gke
para cambiar el contexto a su clúster de usuarios. Reemplace CLUSTER_NAME con el nombre de su clúster de usuarios.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
La configuración de PersistentVolume que utilice dependerá de si se conecta directamente al Elastic File System o a través de un punto de acceso. Seleccione si se conecta directamente al Elastic File System o a través de un punto de acceso.
Conectar directamente
Copie el siguiente manifiesto YAML en un archivo llamado
efs-volume.yaml
. El manifiesto hace referencia a la clase de almacenamiento EFS que creó 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
Reemplace lo siguiente:
- VOLUME_NAME con un nombre para el volumen persistente.
- CLAIM_NAME con el nombre que desea utilizar para PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID con el ID de su sistema de archivos EFS. Por ejemplo,
fs-12345678a
.
Punto de acceso
Copie el siguiente manifiesto YAML en un archivo llamado
efs-volume.yaml
. El manifiesto hace referencia a la clase de almacenamiento EFS que creó 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
Reemplace lo siguiente:
- VOLUME_NAME con un nombre para el volumen persistente.
- CLAIM_NAME con el nombre que desea utilizar para PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID con el ID de su sistema de archivos EFS. Por ejemplo,
fs-12345678a
. - ACCESS_POINT_ID con el ID de su punto de acceso. Por ejemplo,
fsap-1234567890abcde
.
Aplique el YAML a su clúster de usuarios.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-volume.yaml
La salida confirma la creación de PersistentVolume.
persistentvolume/VOLUME_NAME created
Creación de un PersistentVolumeClaim
Para utilizar su sistema de archivos EFS con sus cargas de trabajo, cree un PersistentVolumeClaim.
Para crear PersistentVolumeClaim, copie 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
Reemplace CLAIM_NAME con un nombre para su PersistentVolumeClaim. Por ejemplo,
efs-claim1
.Aplique el YAML a su clúster de usuarios.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-claim.yaml
La salida confirma la creación de PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Crear un conjunto con estado
Después de crear un PersistentVolumeClaim, puede usarlo en una carga de trabajo. Los pasos de esta sección crean un StatefulSet de ejemplo con su sistema de archivos EFS montado. 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 sistema de archivos EFS al que se hace referencia en su PersistentVolumeClaim, realice los siguientes pasos.
Copie el siguiente manifiesto YAML en un archivo llamado
efs-statefulset.yaml
. Este manifiesto de ejemplo inicia un contenedor de Ubuntu Linux que monta su sistema de archivos EFS en/efs-data
. El contenedor escribe cada cinco segundos en un archivo de su 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
Reemplace lo siguiente:
- CLAIM_NAME con el nombre del PersistentVolumeClaim especificado anteriormente. Por ejemplo,
efs-claim1
.
- CLAIM_NAME con el nombre del PersistentVolumeClaim especificado anteriormente. Por ejemplo,
Aplique el YAML a su clúster de usuarios.
env HTTPS_PROXY=http://localhost:8118 \ 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 la imagen del contenedor y ejecutarse.
Confirme que el pod de StatefulSet esté en 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
Una vez que el Pod esté en estado de ejecución, use
kubectl exec
para conectarse al Pod que aloja el StatefulSet.env HTTPS_PROXY=http://localhost:8118 \ kubectl exec -it efs-shell-0 -- bash
El comando
kubectl
lanza un shell en el Pod.Para confirmar que su sistema de archivos 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.
Para eliminar el StatefulSet, utilice
kubectl delete
.env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f efs-statefulset.yaml
Limpiando
Para eliminar los recursos que creó en las secciones anteriores, ejecute 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?
- Obtenga información sobre formas adicionales de usar volúmenes EFS en los ejemplos de
aws-efs-csi-driver
.