Implementazione di un carico di lavoro stateful esemplificativo in modalità automatica EKS - Amazon EKS

Contribuisci a migliorare questa pagina

Per contribuire a questa guida per l’utente, seleziona il link Edit this page on GitHub che si trova nel riquadro destro di ogni pagina.

Implementazione di un carico di lavoro stateful esemplificativo in modalità automatica EKS

Questo tutorial ti guiderà nella distribuzione di un’applicazione stateful esemplificativa nel tuo cluster di modalità automatica EKS. L’applicazione scrive marche temporali su un volume persistente, dimostrando le funzionalità automatiche di provisioning e persistenza dei volumi EBS di modalità automatica EKS.

Prerequisiti

Passaggio 1: configurazione dell’ambiente

  1. Imposta le variabili di ambiente:

    export CLUSTER_NAME=my-auto-cluster export AWS_REGION="us-west-2"
  2. Aggiorna kubeconfig:

    aws eks update-kubeconfig --name "${CLUSTER_NAME}"

Passaggio 2: creazione della classe di archiviazione

StorageClass definisce in che modo la modalità automatica EKS fornirà i volumi EBS.

Modalità automatica EKS non crea un StorageClass per te. Devi creare una StorageClass che faccia riferimento a ebs.csi.eks.amazonaws.com per utilizzare la funzionalità di archiviazione di modalità automatica EKS.

  1. Creare un file denominato storage-class.yaml:

    apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: auto-ebs-sc annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: ebs.csi.eks.amazonaws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp3 encrypted: "true"
  2. Applica: StorageClass

    kubectl apply -f storage-class.yaml

componenti chiave

  • provisioner: ebs.csi.eks.amazonaws.com: utilizza modalità automatica EKS

  • volumeBindingMode: WaitForFirstConsumer: ritarda la creazione del volume fino a quando un pod non ne ha bisogno

  • type: gp3: specifica il tipo di volume EBS

  • encrypted: "true": EBS utilizzerà la chiave aws/ebs predefinita per crittografare i volumi creati con questa classe. Questo passaggio è facoltativo, ma è consigliato.

  • storageclass.kubernetes.io/is-default-class: "true": Kubernetes userà questa classe di archiviazione per impostazione predefinita, a meno che non sia specificata una classe di volume diversa su una dichiarazione di volume persistente. Fai attenzione quando imposti questo valore se stai migrando da un altro controller di archiviazione (facoltativo).

Passaggio 3: creazione della dichiarazione di volume persistente

Il PVC richiede l’archiviazione da StorageClass.

  1. Creare un file denominato pvc.yaml:

    apiVersion: v1 kind: PersistentVolumeClaim metadata: name: auto-ebs-claim spec: accessModes: - ReadWriteOnce storageClassName: auto-ebs-sc resources: requests: storage: 8Gi
  2. Applica il PVC:

    kubectl apply -f pvc.yaml

Componenti chiave:

  • accessModes: ReadWriteOnce: il volume può essere montato da un nodo alla volta

  • storage: 8Gi: richiede un volume da 8 GiB

  • storageClassName: auto-ebs-sc: riferimenti su StorageClass abbiamo creato

Passaggio 4: implementare un’applicazione

L’implementazione esegue un container che scrive marche temporali nel volume persistente.

  1. Creare un file denominato deployment.yaml:

    apiVersion: apps/v1 kind: Deployment metadata: name: inflate-stateful spec: replicas: 1 selector: matchLabels: app: inflate-stateful template: metadata: labels: app: inflate-stateful spec: terminationGracePeriodSeconds: 0 nodeSelector: eks.amazonaws.com/compute-type: auto containers: - name: bash image: public.ecr.aws/docker/library/bash:4.4 command: ["/usr/local/bin/bash"] args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 60; done"] resources: requests: cpu: "1" volumeMounts: - name: persistent-storage mountPath: /data volumes: - name: persistent-storage persistentVolumeClaim: claimName: auto-ebs-claim
  2. Applica l’implementazione:

    kubectl apply -f deployment.yaml

Componenti chiave:

  • Semplice container bash che scrive una marca temporale su un file

  • Monta il PVC su /data

  • Richiede 1 core CPU

  • Utilizza il selettore di nodi per i nodi gestiti da EKS

Passaggio 5: verificare la configurazione

  1. Verifica che il pod sia in esecuzione:

    kubectl get pods -l app=inflate-stateful
  2. Verifica che il PVC sia legato:

    kubectl get pvc auto-ebs-claim
  3. Controlla il volume EBS:

    # Get the PV name PV_NAME=$(kubectl get pvc auto-ebs-claim -o jsonpath='{.spec.volumeName}') # Describe the EBS volume aws ec2 describe-volumes \ --filters Name=tag:CSIVolumeName,Values=${PV_NAME}
  4. Verifica che i dati siano scritti:

    kubectl exec "$(kubectl get pods -l app=inflate-stateful \ -o=jsonpath='{.items[0].metadata.name}')" -- \ cat /data/out.txt

Passaggio 6: pulizia

Eseguire il comando riportato di seguito per rimuovere tutte le risorse create in questo tutorial:

# Delete all resources in one command kubectl delete deployment/inflate-stateful pvc/auto-ebs-claim storageclass/auto-ebs-sc

Cosa succede dietro le quinte

  1. Il PVC richiede l’archiviazione da StorageClass

  2. Quando è il pod è pianificato:

    1. La modalità automatica EKS fornisce un volume EBS

    2. Crea PersistentVolume

    3. Collega il volume al nodo

  3. Il pod monta il volume e inizia a scrivere le marche temporali

Controller di snapshot

La modalità automatica EKS è compatibile con lo Snapshotter di CSI Kubernetes, noto anche come controller di snapshot. Tuttavia, la modalità automatica EKS non include il controller di snapshot. L’utente è responsabile dell’installazione e della configurazione del controller di snapshot. Per ulteriori informazioni, consulta Abilitare la funzionalità snapshot per i volumi CSI.

Leggi quanto segue VolumeSnapshotClass che fa riferimento alla capacità di archiviazione della modalità automatica EKS.

apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: auto-ebs-vsclass driver: ebs.csi.eks.amazonaws.com deletionPolicy: Delete

Scopri di più su Snapshotter di CSI Kubernetes.