L'Elastic File System (EFS) è il meccanismo AWS sottostante per fornire spazio di archiviazione (spazio su disco) al cluster. Un PersistentVolume è una risorsa cluster che rende disponibile l'archiviazione EFS per i tuoi carichi di lavoro e ne garantisce la persistenza anche quando non sono collegati carichi di lavoro. Questo argomento descrive come un carico di lavoro può accedere a un PersistentVolume con un PersistentVolumeClaim.
GKE su AWS supporta il provisioning statico di PersistentVolume 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, consulta
Configurare un PersistentVolume
.
Crea un PersistentVolumeClaim
Scegli la scheda appropriata di seguito a seconda che tu voglia che il carico di lavoro si connetta a un volume permanente di cui è stato eseguito il provisioning statico o dinamico.
Statiche
Queste istruzioni presuppongono che l'amministratore del cluster abbia già eseguito il provisioning di almeno un PersistentVolume. Per accedere a questo PersistentVolume e utilizzare l'EFS sottostante con i tuoi carichi di lavoro, crea un PersistentVolumeClaim.
Per creare un PersistentVolumeClaim per un PersistentVolume con 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 a cui puoi associare l'oggetto PersistentVolumeClaim, ad esempio
efs-claim1
. Lascia vuoto per associare la classe di archiviazione predefinita
Applica il codice YAML al tuo cluster.
kubectl apply -f efs-claim.yaml
Questo output conferma la creazione di PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Dinamici
Queste istruzioni presuppongono che l'amministratore del cluster abbia già eseguito il provisioning di almeno un oggetto StorageClass per il provisioning dinamico. Per creare un PersistentVolume di cui è stato eseguito il provisioning dinamico con questo oggetto StorageClass e utilizzare il punto di accesso EFS sottostante con i tuoi carichi di lavoro, crea un PersistentVolumeClaim.
Per creare un PersistentVolumeClaim, segui questi passaggi. Il driver CSI EFS utilizza questo PersistentVolumeClaim con l'oggetto StorageClass indicato per eseguire dinamicamente il provisioning 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 scelto per l'oggetto PersistentVolumeClaim, ad esempio
efs-claim1
- EFS_STORAGE_CLASS_NAME: il nome dell'oggetto StorageClass a cui si vuole associare l'oggetto PersistentVolumeClaim. Lascia vuoto questo campo per eseguire l'associazione alla classe di archiviazione predefinita
Applica il codice YAML al tuo 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 oggetto PersistentVolumeClaim, puoi utilizzarlo in un carico di lavoro.
Questa sezione crea uno StatefulSet di esempio che utilizza un PersistentVolumeClaim.
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 la risorsa 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 la risorsa EFS in/efs-data
. Il container scrive ogni cinque secondi su un file sulla 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 dell'oggetto PersistentVolumeClaim che hai specificato in precedenza, ad esempio
efs-claim1
.Applica il codice YAML al tuo cluster.
kubectl apply -f efs-statefulset.yaml
L'output conferma la creazione dello StatefulSet.
statefulset.apps/efs-shell created
Il download e l'avvio dell'immagine container potrebbero richiedere diversi minuti.
Verifica che il pod dello StatefulSet sia in 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
Quando lo stato del pod è In esecuzione, 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 confermare che la risorsa EFS sia montata, 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.
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 StorageClass con i tuoi carichi di lavoro