Elastic File System (EFS) è il meccanismo AWS sottostante per fornire spazio di archiviazione (spazio su disco) al cluster. Un PersistentVolume è una risorsa del cluster che rende disponibile lo spazio di archiviazione EFS ai tuoi carichi di lavoro e garantisce che venga mantenuto anche quando nessun carico di lavoro è connesso. Questo argomento descrive come un workload può accedere a un PersistentVolume con un PersistentVolumeClaim.
Questa pagina è rivolta agli operatori e agli esperti di archiviazione che vogliono configurare e gestire l'archiviazione. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti di Google Cloud , consulta Ruoli e attività comuni degli utenti GKE.
GKE su AWS supporta il provisioning statico di PersistentVolumes per tutte le versioni di Kubernetes supportate. Per i cluster con Kubernetes versione 1.24 o successive, GKE su AWS supporta anche il provisioning dinamico. Per utilizzare il provisioning dinamico, l'amministratore del cluster deve configurarlo. Per scoprire come fare, consulta la sezione
Configurare un PersistentVolume
.
Crea un PersistentVolumeClaim
Scegli la scheda appropriata di seguito a seconda che tu voglia che il tuo workload si connetta a un volume permanente con provisioning statico o dinamico.
Statica
Queste istruzioni presuppongono che l'amministratore del cluster abbia già eseguito il provisioning di almeno un PersistentVolume. Per accedere a questo PersistentVolume e utilizzare il relativo EFS sottostante con i tuoi carichi di lavoro, crea un PersistentVolumeClaim.
Per creare un PersistentVolumeClaim per un PersistentVolume sottoposto a provisioning statico,
copia il seguente manifest YAML in un file denominato efs-claim.yaml
.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: CLAIM_NAME
spec:
accessModes:
- ReadWriteMany
storageClassName: "" # Leave as empty string for static provisioning
resources:
requests:
storage: 5Gi
Sostituisci:
- CLAIM_NAME: un nome che scegli per il tuo PersistentVolumeClaim
a cui eseguire il binding, ad esempio
efs-claim1
. Lascia vuoto per eseguire il binding alla classe di archiviazione predefinita
Applica il file YAML al cluster.
kubectl apply -f efs-claim.yaml
Questo output conferma la creazione di PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Dinamica
Queste istruzioni presuppongono che l'amministratore del cluster abbia già provisionato almeno una StorageClass per il provisioning dinamico. Per creare un PersistentVolume con provisioning dinamico con questa StorageClass e utilizzare il punto di accesso EFS sottostante con i tuoi carichi di lavoro, crea un PersistentVolumeClaim.
Per creare un PersistentVolumeClaim: Il driver CSI per EFS utilizza questo PersistentVolumeClaim con la classe di archiviazione indicata per eseguire il provisioning dinamico di un PersistentVolume.
- Copia il seguente manifest YAML in un file denominato
efs-claim.yaml
.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: CLAIM_NAME
spec:
accessModes:
- ReadWriteMany
storageClassName: "EFS_STORAGE_CLASS_NAME"
resources:
requests:
storage: 5Gi
Sostituisci:
- CLAIM_NAME: un nome che scegli per il tuo PersistentVolumeClaim, ad esempio
efs-claim1
- EFS_STORAGE_CLASS_NAME: il nome di StorageClass a cui vuoi che si associ PersistentVolumeClaim. Lascia vuoto questo campo per eseguire il binding alla classe di archiviazione predefinita
Applica il file YAML al cluster.
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 PersistentVolumeClaim, puoi utilizzarlo in un workload.
Questa sezione crea un StatefulSet di esempio che utilizza un PersistentVolumeClaim.
Puoi utilizzare un 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 monti la risorsa EFS a cui fa riferimento la tua 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 la risorsa EFS in/efs-data
. Il container scrive ogni cinque secondi in un file nella risorsa EFS denominataout.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 CLAIM_NAME con il nome di PersistentVolumeClaim che hai specificato in precedenza, ad esempio
efs-claim1
.Applica il file YAML al cluster.
kubectl apply -f efs-statefulset.yaml
L'output conferma la creazione di StatefulSet.
statefulset.apps/efs-shell created
Il download e l'avvio dell'immagine container di StatefulSet potrebbero richiedere diversi minuti.
Verifica che il pod di StatefulSet sia nello stato
Running
conkubectl get pods
.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
Una volta che il pod è nello stato Running, utilizza
kubectl exec
per connetterti al pod che ospita lo StatefulSet.kubectl exec -it efs-shell-0 -- bash
Il comando
kubectl
avvia una shell sul pod.Per verificare che la risorsa EFS sia montata, controlla i contenuti del file
out.txt
con il comandotail
.tail /efs-data/out.txt
L'output contiene orari recenti in formato UTC.
Disconnettiti dal pod con il comando
exit
.exit
La shell torna alla tua macchina locale.
Esegui la pulizia
Per rimuovere lo StatefulSet, utilizza kubectl delete
.
kubectl delete -f efs-statefulset.yaml
Passaggi successivi
- Scopri come configurare una risorsa EFS
- Scopri come utilizzare StorageClasses con i tuoi carichi di lavoro