GKE su AWS versione 1.6 e successive supporta AWS Elastic File System (EFS) tramite il driver CSI EFS. Questo argomento spiega come montare un file system EFS esistente come PersistentVolume nei cluster utente.
Prima di iniziare
Per eseguire i passaggi descritti in questo argomento, devi disporre di quanto segue:
- Un file system EFS esistente nella stessa VPC AWS dell'installazione di GKE su AWS.
- Almeno un target di montaggio EFS nella stessa VPC AWS dell'installazione di GKE su AWS.
- Tutti i target di montaggio EFS devono appartenere a:
- Le subnet private per l'installazione di GKE su AWS. Per impostazione predefinita, GKE su AWS crea subnet denominate
gke-CLUSTER_ID-private-AWS_ZONE, dove CLUSTER_ID è l'ID del cluster utente e AWS_ZONE è la zona di disponibilità AWS. - Il
gruppo di sicurezza del node pool.
Per impostazione predefinita, GKE su AWS crea node pool denominati
gke-CLUSTER_ID-nodepool, dove CLUSTER_ID è l'ID del cluster utente.
- Le subnet private per l'installazione di GKE su AWS. Per impostazione predefinita, GKE su AWS crea subnet denominate
- Dalla directory
anthos-aws, utilizzaanthos-gkeper passare al contesto del cluster utente. Sostituisci CLUSTER_NAME con il nome del cluster utente.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Utilizzo di un PersistentVolume EFS
Per utilizzare un file system EFS come PersistentVolume con i cluster utente, devi prima creare un PersistentVolume e poi un PersistentVolumeClaim a cui fai riferimento nel carico di lavoro.
Creazione di un PersistentVolume
Per creare un PersistentVolume con il driver CSI EFS, segui questi passaggi.
Dalla directory
anthos-aws, utilizzaanthos-gkeper passare al contesto del cluster utente. Sostituisci CLUSTER_NAME con il nome del cluster utente.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
La configurazione di PersistentVolume che utilizzi dipende dal fatto che tu ti connetta direttamente a Elastic File System o tramite un punto di accesso. Seleziona se ti connetti a Elastic File System direttamente o tramite un punto di accesso.
Connessione diretta
Copia il seguente manifest YAML in un file denominato
efs-volume.yaml. Il manifest fa riferimento alla classe di archiviazione EFS che hai creato in precedenza.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_IDSostituisci quanto segue:
- VOLUME_NAME con un nome per il volume permanente.
- CLAIM_NAME con il nome che vuoi utilizzare per la PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID con l'ID del file system EFS. Ad esempio,
fs-12345678a.
Punto di accesso
Copia il seguente manifest YAML in un file denominato
efs-volume.yaml. Il manifest fa riferimento alla classe di archiviazione EFS che hai creato in precedenza.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_IDSostituisci quanto segue:
- VOLUME_NAME con un nome per il volume permanente.
- CLAIM_NAME con il nome che vuoi utilizzare per la PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID con l'ID del file system EFS. Ad esempio,
fs-12345678a. - ACCESS_POINT_ID con l'ID del punto di accesso. Ad esempio,
fsap-1234567890abcde.
Applica il file YAML al cluster utente.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-volume.yamlL'output conferma la creazione di PersistentVolume.
persistentvolume/VOLUME_NAME created
Creazione di un PersistentVolumeClaim
Per utilizzare il file system EFS con i carichi di lavoro, devi creare un PersistentVolumeClaim.
Per creare PersistentVolumeClaim, copia il seguente manifest YAML in un file denominato
efs-claim.yaml.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: CLAIM_NAME spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 5GiSostituisci CLAIM_NAME con un nome per PersistentVolumeClaim. Ad esempio,
efs-claim1.Applica il file YAML al cluster utente.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-claim.yamlL'output conferma la creazione di PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Crea un oggetto StatefulSet
Dopo aver creato un PersistentVolumeClaim, puoi utilizzarlo in un carico di lavoro.
I passaggi descritti in questa sezione creano un oggetto StatefulSet di esempio con il file system EFS montato. Puoi anche utilizzare un PersistentVolumeClaim con altri tipi di carichi di lavoro, come pod e deployment, facendo riferimento alla richiesta in spec.volumes.
Per creare un oggetto StatefulSet che monti il file system EFS a cui fa riferimento PersistentVolumeClaim, segui questi passaggi.
Copia il seguente manifest YAML in un file denominato
efs-statefulset.yaml. Questo manifest di esempio avvia un container Ubuntu Linux che monta il file system EFS in/efs-data. Il container scrive ogni cinque secondi in un file sul file system EFS denominatoout.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_NAMESostituisci quanto segue:
- CLAIM_NAME con il nome di PersistentVolumeClaim
che hai specificato in precedenza. Ad esempio,
efs-claim1.
- CLAIM_NAME con il nome di PersistentVolumeClaim
che hai specificato in precedenza. Ad esempio,
Applica il file YAML al cluster utente.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-statefulset.yamlL'output conferma la creazione di StatefulSet.
statefulset.apps/efs-shell createdIl download dell'immagine container e l'avvio di StatefulSet potrebbero richiedere diversi minuti.
Verifica che il pod di StatefulSet sia nello stato
Runningconkubectl get pods.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods -l app=test-efsL'output include il nome del pod e il suo stato. Nella seguente risposta, il nome del pod è
efs-shell-0.NAME READY STATUS RESTARTS AGE efs-shell-0 1/1 Running 0 1mUna volta che il pod è nello stato Running, utilizza
kubectl execper connetterti al pod che ospita StatefulSet.env HTTPS_PROXY=http://localhost:8118 \ kubectl exec -it efs-shell-0 -- bashIl comando
kubectlavvia una shell sul pod.Per verificare che il file system EFS sia montato, controlla i contenuti del file
out.txtcon il comandotail.tail /efs-data/out.txtL'output contiene gli orari recenti in UTC.
Disconnettiti dal pod con il comando
exit.exitLa shell torna alla macchina locale.
Per rimuovere StatefulSet, utilizza
kubectl delete.env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f efs-statefulset.yaml
Pulizia
Per rimuovere le risorse create nelle sezioni precedenti, esegui i seguenti comandi:
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
Passaggi successivi
- Scopri altri modi per utilizzare i volumi EFS negli
aws-efs-csi-driveresempi.