Usa una risorsa EFS

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
  1. 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.

  1. 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
  1. 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.

  1. 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 denominata out.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.

  2. 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.

  3. Verifica che il pod di StatefulSet sia nello stato Running con kubectl 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
    
  4. 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.

  5. Per verificare che la risorsa EFS sia montata, controlla i contenuti del file out.txt con il comando tail.

    tail /efs-data/out.txt
    

    L'output contiene orari recenti in formato UTC.

  6. 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