GKE su AWS versioni 1.6 e successive supportano AWS Elastic File System (EFS) tramite il driver CSI EFS. Questo argomento spiega come montare un file system EFS esistente come PersistentVolume sui cluster utente.
Prima di iniziare
Per eseguire la procedura descritta in questo argomento, è necessario quanto segue:
- Un file system EFS esistente nello stesso VPC AWS della tua installazione GKE su AWS.
- Almeno una destinazione di montaggio EFS nello stesso VPC AWS del tuo GKE su installazione AWS.
- Tutte le destinazioni di montaggio EFS devono appartenere a quanto segue:
- 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à di AWS. - Il gruppo di sicurezza del pool di nodi.
Per impostazione predefinita, GKE su AWS crea pool di nodi 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-gke
per cambiare contesto al cluster utente.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Sostituisci CLUSTER_NAME con il nome del tuo cluster utente.
Utilizzo di un PersistentVolume EFS
Per utilizzare un file system EFS come PersistentVolume con i cluster utente, devi prima creare un PersistentVolume, quindi un PersistentVolumeClaim a cui fai riferimento nel tuo carico di lavoro.
Creazione di un PersistentVolume
Per creare un PersistentVolume con il driver CSI EFS, segui questi passaggi.
Dalla directory
anthos-aws
, utilizzaanthos-gke
per cambiare contesto al cluster utente.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Sostituisci CLUSTER_NAME con il nome del tuo cluster utente.La configurazione dell'PersistentVolume da usare dipende dalla connessione diretta all'Elastic File System o tramite un punto di accesso. Seleziona se ti stai connettendo a Elastic File System direttamente o tramite un punto di accesso.
Connettiti direttamente
Copia il seguente manifest YAML in un file denominato
efs-volume.yaml
. Il file manifest fa riferimento alla classe di archiviazione EFS creata 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
Sostituisci quanto segue:
- VOLUME_NAME con un nome per il volume permanente.
- CLAIM_NAME con il nome che vuoi utilizzare per l'oggetto PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID con il tuo ID file system EFS. Ad esempio,
fs-12345678a
.
Punto di accesso
Copia il seguente manifest YAML in un file denominato
efs-volume.yaml
. Il file manifest fa riferimento alla classe di archiviazione EFS creata 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_ID
Sostituisci quanto segue:
- VOLUME_NAME con un nome per il volume permanente.
- CLAIM_NAME con il nome che vuoi utilizzare per l'oggetto PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID con il tuo ID file system EFS. Ad esempio,
fs-12345678a
. - ACCESS_POINT_ID con l'ID del tuo punto di accesso. Ad esempio,
fsap-1234567890abcde
.
Applica il codice YAML al tuo cluster utente.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-volume.yaml
L'output conferma la creazione del PersistentVolume.
persistentvolume/VOLUME_NAME created
Creazione di un PersistentVolumeClaim
Per utilizzare il file system EFS con i tuoi carichi di lavoro, devi creare un PersistentVolumeClaim.
Per creare l'oggetto PersistentVolumeClaim, copia il manifest YAML seguente in un file denominato
efs-claim.yaml
.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: CLAIM_NAME spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 5Gi
Sostituisci CLAIM_NAME con un nome per l'oggetto PersistentVolumeClaim. Ad esempio,
efs-claim1
.Applica il codice YAML al tuo cluster utente.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-claim.yaml
L'output conferma la creazione di PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Crea un oggetto StatefulSet
Dopo aver creato un oggetto PersistentVolumeClaim, puoi utilizzarlo in un carico di lavoro.
I passaggi in questa sezione creano uno StatefulSet di esempio con il file system EFS montato. Puoi utilizzare un oggetto PersistentVolumeClaim anche con altri tipi di carichi di lavoro come pod e deployment, facendo riferimento alla richiesta in spec.volumes
.
Per creare uno StatefulSet che monta il file system EFS a cui viene fatto riferimento nell'oggetto PersistentVolumeClaim, esegui 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 su un file nel 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_NAME
Sostituisci quanto segue:
- CLAIM_NAME con il nome dell'oggetto PersistentVolumeClaim
che hai specificato in precedenza. Ad esempio,
efs-claim1
.
- CLAIM_NAME con il nome dell'oggetto PersistentVolumeClaim
che hai specificato in precedenza. Ad esempio,
Applica il codice YAML al tuo cluster utente.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-statefulset.yaml
L'output conferma la creazione dello StatefulSet.
statefulset.apps/efs-shell created
Il download dell'immagine container e il lancio dello StatefulSet potrebbero richiedere diversi minuti.
Verifica che il pod dello StatefulSet sia in stato
Running
conkubectl get pods
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods -l app=test-efs
L'output include il nome del pod e il relativo stato. Nella risposta seguente, il nome del pod è
efs-shell-0
.NAME READY STATUS RESTARTS AGE efs-shell-0 1/1 Running 0 1m
Quando lo stato del pod è In esecuzione, utilizza
kubectl exec
per connetterti al pod che ospita lo StatefulSet.env HTTPS_PROXY=http://localhost:8118 \ kubectl exec -it efs-shell-0 -- bash
Il comando
kubectl
avvia una shell sul pod.Per confermare che il file system EFS è montato, controlla i contenuti del file
out.txt
con il comandotail
.tail /efs-data/out.txt
L'output contiene gli orari recenti in UTC.
Disconnettiti dal pod con il comando
exit
.exit
La shell torna alla tua macchina locale.
Per rimuovere lo StatefulSet, utilizza
kubectl delete
.env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f efs-statefulset.yaml
esegui la pulizia
Per rimuovere le risorse create nelle sezioni precedenti, esegui questi 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 esempi di
aws-efs-csi-driver
.