Bereitstellung einer Beispiel-Workload mit Statusverwaltung in EKS Auto Mode - Amazon EKS

Unterstützung für die Verbesserung dieser Seite beitragen

Um zu diesem Benutzerhandbuch beizutragen, klicken Sie auf den Link Diese Seite auf GitHub bearbeiten, der sich im rechten Bereich jeder Seite befindet.

Bereitstellung einer Beispiel-Workload mit Statusverwaltung in EKS Auto Mode

Dieses Tutorial führt Sie durch die Bereitstellung einer Beispielanwendung mit Statusverwaltung in Ihrem Cluster von EKS Auto Mode. Die Anwendung schreibt Zeitstempel in ein persistentes Volume und demonstriert damit die automatische EBS-Volume-Bereitstellung und die Persistenzfunktionen von EKS Auto Mode.

Voraussetzungen

  • Ein EKS-Auto-Mode-Cluster

  • Die AWS CLI ist mit entsprechenden Berechtigungen konfiguriert

  • kubectl installiert und konfiguriert

Schritt 1: Umgebung konfigurieren

  1. Legen Sie Ihre Umgebungsvariablen fest:

    export CLUSTER_NAME=my-auto-cluster export AWS_REGION="us-west-2"
  2. Aktualisieren Sie Ihre kubeconfig:

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

Schritt 2: Speicherklasse erstellen

StorageClass definiert, wie der EKS Auto Mode EBS-Volumes bereitstellt.

EKS Auto Mode erstellt keine StorageClass für Sie. Sie müssen eine StorageClass-Referenzierung ebs.csi.eks.amazonaws.com erstellen, um die Speicherfunktion von EKS Auto Mode zu nutzen.

  1. Erstellen Sie eine Datei namens 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. Wenden Sie StorageClass an:

    kubectl apply -f storage-class.yaml

Zentrale Komponenten:

  • provisioner: ebs.csi.eks.amazonaws.com – Verwendet EKS Auto Mode

  • volumeBindingMode: WaitForFirstConsumer – Verzögert die Volume-Erstellung, bis ein Pod sie benötigt

  • type: gp3 – Gibt den EBS-Volume-Typ an

  • encrypted: "true" – EBS verwendet den Standardschlüssel aws/ebs zum Verschlüsseln von Volumes, die mit dieser Klasse erstellt wurden. Dies ist zwar optional, wird aber empfohlen.

  • storageclass.kubernetes.io/is-default-class: "true" – Kubernetes verwendet standardmäßig diese Speicherklasse, sofern Sie nicht für einen persistenten Volume-Anspruch eine andere Volume-Klasse angeben. Seien Sie beim Festlegen dieses Werts vorsichtig, wenn Sie von einem anderen Speicher-Controller migrieren. (optional)

Schritt 3: Persistenten Volume-Anspruch erstellen

Der PVC fordert Speicher von der StorageClass an.

  1. Erstellen Sie eine Datei namens pvc.yaml:

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

    kubectl apply -f pvc.yaml

Zentrale Komponenten:

  • accessModes: ReadWriteOnce – Das Volume kann jeweils von einem Knoten eingebunden werden

  • storage: 8Gi – Fordert ein Volumen von 8 GiB an

  • storageClassName: auto-ebs-sc – Verweist auf die von uns erstellte StorageClass

Schritt 4: Anwendung bereitstellen

Die Bereitstellung führt einen Container aus, der Zeitstempel in das persistente Volume schreibt.

  1. Erstellen Sie eine Datei namens 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. Bereitstellung durchführen:

    kubectl apply -f deployment.yaml

Zentrale Komponenten:

  • Einfacher Bash-Container, der Zeitstempel in eine Datei schreibt

  • Bindet den PVC bei /data ein

  • Fordert 1 CPU-Kern an

  • Verwendet Knotenselektor für EKS-verwaltete Knoten

Schritt 5: Einrichtung überprüfen

  1. Überprüfen Sie, ob der Pod ausgeführt wird:

    kubectl get pods -l app=inflate-stateful
  2. Überprüfen Sie, ob der PVC eingebunden ist:

    kubectl get pvc auto-ebs-claim
  3. Überprüfen Sie das EBS-Volume:

    # 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. Überprüfen Sie, ob Daten geschrieben werden:

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

Schritt 6: Bereinigen

Führen Sie den folgenden Befehl aus, um alle in diesem Tutorial erstellten Ressourcen zu entfernen:

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

Was hinter den Kulissen passiert

  1. Der PVC fordert Speicher von der StorageClass an

  2. Wenn der Pod geplant ist:

    1. EKS Auto Mode stellt ein EBS-Volume bereit

    2. Erstellt ein PersistentVolume

    3. Fügt das Volume zum Knoten hinzu

  3. Der Pod bindet das Volume ein und beginnt mit dem Schreiben von Zeitstempeln

Snapshot-Controller

EKS Auto Mode ist mit dem Kubernetes CSI Snapshotter, auch bekannt als Snapshot-Controller, kompatibel. EKS Auto Mode umfasst jedoch keinen Snapshot-Controller. Sie sind für die Installation und Konfiguration des Snapshot-Controllers verantwortlich. Weitere Informationen finden Sie unter Snapshot-Funktion für CSI-Volumes aktivieren.

Überprüfen Sie die folgenden VolumeSnapshotClass, die sich auf die Speicherkapazität von EKS Auto Mode beziehen.

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

Weitere Informationen zum Kubernetes CSI Snapshotter.