Usa una risorsa EFS

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

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

  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 su un file sulla 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 dell'oggetto PersistentVolumeClaim che hai specificato in precedenza, ad esempio efs-claim1.

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

  3. Verifica che il pod dello StatefulSet sia in 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. 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.

  5. Per confermare 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 gli orari recenti in 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