Erstellen einer Speicherklasse - 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.

Erstellen einer Speicherklasse

Eine StorageClass im Amazon EKS Auto Mode definiert, wie Amazon-EBS-Volumes automatisch bereitgestellt werden, wenn Anwendungen persistenten Speicher anfordern. Auf dieser Seite wird erläutert, wie Sie eine StorageClass erstellen und konfigurieren, das mit dem Amazon EKS Auto Mode zusammenarbeitet, um EBS-Volumes bereitzustellen.

Durch die Konfiguration einer StorageClass können Sie Standardeinstellungen für Ihre EBS-Volumes festlegen, darunter Volume-Typ, Verschlüsselung, IOPS und andere Speicherparameter. Sie können StorageClass auch so konfigurieren, dass AWS-KMS-Schlüssel für die Verschlüsselungsverwaltung verwendet werden.

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.

Erstellen Sie zunächst eine Datei mit dem Namen storage-class.yaml:

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

Wenden Sie anschließend die Speicherklasse auf Ihren Cluster an.

kubectl apply -f storage-class.yaml

Zentrale Komponenten:

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

  • allowedTopologies – Durch die Angabe von matchLabelExpressions für die Übereinstimmung mit eks.amazonaws.com/compute-type:auto wird sichergestellt, dass Ihre Pods, die ein Volume benötigen, das automatisch im Automatikmodus bereitgestellt wird, nicht auf Nicht-Automatik-Knoten geplant werden.

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

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

  • encrypted: "true" – EBS verschlüsselt alle Volumes, die mit StorageClass erstellt wurden. EBS verwendet den aws/ebs-Standard-Schlüssel-Alias. Weitere Informationen finden Sie unter So funktioniert die Amazon-EBS-Verschlüsselung im Amazon-EBS-Benutzerhandbuch. Dieser Wert ist optional, wird jedoch 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. Dieser Wert ist optional. Seien Sie beim Festlegen dieses Werts vorsichtig, wenn Sie von einem anderen Speicher-Controller migrieren.

Selbstverwalteter KMS-Schlüssel zur Verschlüsselung von EBS-Volumes verwenden

Um einen selbstverwalteten KMS-Schlüssel zur Verschlüsselung von EBS-Volumes zu verwenden, die durch EKS Auto Mode automatisiert werden, müssen Sie folgende Schritte ausführen:

  1. Erstellen Sie einen selbstverwalteten KMS-Schlüssel.

  2. Erstellen Sie eine neue Richtlinie, die den Zugriff auf den KMS-Schlüssel zulässt.

  3. Fügen Sie die Richtlinie der EKS- Cluster-Rolle an.

    • Verwenden Sie die AWS-Konsole, um die ARN der EKS-Cluster-Rolle zu ermitteln. Die Rollen-Informationen sind im Abschnitt Übersicht einsehbar. Weitere Informationen finden Sie unter Amazon-EKS-Cluster-IAM-Rolle.

  4. Aktualisieren Sie StorageClass, um auf die KMS-Schlüssel-ID im parameters.kmsKeyId-Feld zu verweisen.

Beispiel für eine selbstverwaltete KMS-IAM-Richtlinie

Aktualisieren Sie die folgenden Werte in der unten aufgeführten Richtlinie:

  • <account-id> – Ihre AWS-Konto-ID, wie z. B. 111122223333

  • <aws-region> – Die AWS-Region Ihres Clusters, z. B. us-west-2

{ "Version": "2012-10-17", "Id": "key-auto-policy-3", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<account-id>:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:CallerAccount": "<account-id>", "kms:ViaService": "ec2.<aws-region>.amazonaws.com" } } } ] }

Beispiel für ein selbstverwaltetes KMS StorageClass

parameters: type: gp3 encrypted: "true" kmsKeyId: <custom-key-arn>

StorageClass-Parameter-Referenz

Allgemeine Informationen zu den StorageClass-Kubernetes-Ressourcen finden Sie unter Speicherklassen in der Kubernetes-Dokumentation

Der parameters-Abschnitt der StorageClass-Ressource ist spezifisch für AWS. Verwenden Sie die folgende Tabelle, um die verfügbaren Optionen zu überprüfen.

Parameter Werte Standard Beschreibung

„csi.storage.k8s.io/fstype“

xfs, ext2, ext3, ext4

ext4

Dateisystemtyp, der während der Volume-Erstellung formatiert wird. Bei diesem Parameter wird zwischen Groß- und Kleinschreibung unterschieden!

„type“

io1, io2, gp2, gp3, sc1, st1, standard, sbp1, sbg1

gp3

EBS-Volume-Typ.

„iopsPerGB“

E/A-Vorgänge pro Sekunde pro GiB. Kann für IO1-, IO2- und GP3-Volumes angegeben werden.

„allowAutoIOPSPerGBIncrease“

true, false

false

Bei "true" erhöht der CSI-Treiber die IOPS für ein Volume, wenn iopsPerGB * <volume size> zu niedrig ist, um in den von AWS unterstützten IOPS-Bereich zu passen. Dadurch ist die dynamische Bereitstellung immer erfolgreich, selbst wenn der Benutzer eine zu geringe PVC-Kapazität oder einen zu geringen iopsPerGB-Wert angibt. Andererseits können zusätzliche Kosten entstehen, da solche Volumes höhere IOPS aufweisen als in iopsPerGB angefordert.

„iops“

E/A-Vorgänge pro Sekunde. Kann für IO1-, IO2- und GP3-Volumes angegeben werden.

„throughput“

125

Durchsatz in MiB/s. Nur wirksam, wenn der Datenträgertyp gp3 angegeben ist.

„verschlüsselt“

true, false

false

Ob das Volume verschlüsselt werden soll oder nicht. Gültige Werte sind „wahr“ oder „falsch“.

„blockExpress“

true, false

false

Ermöglicht die Erstellung von io2-Block-Express-Volumes.

„kmsKeyId“

Die vollständige ARN des Schlüssels, der bei der Verschlüsselung des Volumes verwendet werden soll. Wenn nicht angegeben, verwendet AWS den Standard-KMS-Schlüssel für die Region, in der sich das Volume befindet. Wenn dieser nicht geändert wird, handelt es sich um einen automatisch generierten Schlüssel mit dem Namen /aws/ebs.

„blockSize“

Die Blockgröße, die beim Formatieren des zugrunde liegenden Dateisystems verwendet werden soll. Wird nur auf Linux-Knoten und mit fstype ext2, ext3, ext4 oder xfs unterstützt.

„inodeSize“

Die Inode-Größe, die beim Formatieren des zugrunde liegenden Dateisystems verwendet werden soll. Wird nur auf Linux-Knoten und mit fstype ext2, ext3, ext4 oder xfs unterstützt.

„bytesPerInode“

Die bytes-per-inode, die beim Formatieren des zugrunde liegenden Dateisystems verwendet werden sollen. Wird nur auf Linux-Knoten und mit fstype ext2, ext3, ext4 unterstützt.

„numberOfInodes“

Die number-of-inodes, die beim Formatieren des zugrunde liegenden Dateisystems verwendet werden sollen. Wird nur auf Linux-Knoten und mit fstype ext2, ext3, ext4 unterstützt.

„ext4BigAlloc“

true, false

false

Ändert das ext4-Dateisystem, um die gruppierte Block-Zuweisung zu verwenden, indem die bigalloc-Formatierungsoption aktiviert wird. Warnung: bigalloc wird möglicherweise nicht vollständig vom Linux-Kernel Ihres Knotens unterstützt.

„ext4ClusterSize“

Die Cluster-Größe, die beim Formatieren eines ext4-Dateisystems verwendet werden soll, wenn das bigalloc-Feature aktiviert ist. Hinweis: Der Parameter ext4BigAlloc muss auf „wahr“ gesetzt sein.

Weitere Informationen finden Sie unter AWS-EBS-CSI-Treiber auf GitHub.

Überlegungen

Anmerkung

Sie können Workloads, die von EKS-Auto-Mode-StorageClasses abhängen, nur auf EKS-Auto-Mode-Knoten bereitstellen. Wenn Sie über einen Cluster mit kombinierten Knotentypen verfügen, müssen Sie Ihre Workloads so konfigurieren, dass sie ausschließlich in EKS-Auto-Mode-Knoten ausgeführt werden. Weitere Informationen finden Sie unter Überprüfen, ob eine Workload in Knoten von EKS Auto Mode bereitgestellt wird.

Die Blockspeicherfunktion des EKS Auto Mode unterscheidet sich vom EBS-CSI-Treiber.

  • Statische Bereitstellung

    • Wenn Sie extern erstellte EBS-Volumes mit EKS Auto Mode verwenden möchten, müssen Sie manuell einen AWS-Tag mit dem Schlüssel eks:eks-cluster-name und dem Wert des Cluster-Namens hinzufügen.

  • Knoten-Startup-Taint

    • Es ist nicht möglich, das Node-Startup-Taint-Feature zu verwenden, um die Pod-Planung zu verhindern, bevor die Speicherkapazität bereit ist.

  • Benutzerdefinierte Tags auf dynamisch bereitgestellten Volumes

    • Sie können das CLI-Flag „extra-tag“ nicht verwenden, um benutzerdefinierte Tags für dynamisch bereitgestellte EBS-Volumes zu konfigurieren.

    • Sie können StorageClass-Kennzeichnung verwenden, um benutzerdefinierte Tags hinzuzufügen. EKS Auto Mode fügt den zugehörigen AWS-Ressourcen Tags hinzu. Sie müssen die Cluster-IAM-Rolle für benutzerdefinierte Tags aktualisieren. Weitere Informationen finden Sie unter Benutzerdefinierte AWS-Tags für EKS-Automatik-Ressourcen.

  • Detaillierte EBS-Leistungsmetriken

    • Sie können nicht auf Prometheus-Metriken für die detaillierte EBS-Leistung zugreifen

Add-On „CSI-Snapshot Controller“ installieren

EKS Auto Mode ist mit dem Amazon-EKS-Add-On „CSI Snapshot Controller“ kompatibel.

AWS schlägt vor, dass Sie dieses Add-On so konfigurieren, dass es auf dem integrierten system-Knoten-Pool ausgeführt wird.

Weitere Informationen finden Sie unter:

So installieren Sie den Snapshot-Controller im System-Knoten-Pool

  1. Öffnen Sie Ihren AWS-EKS-Cluster in der Konsole

  2. Wählen Sie auf der Registerkarte Add-Ons die Option Weitere Add-Ons abrufen

  3. Wählen Sie den CSI Snapshot Controller und dann Weiter

  4. Wählen Sie auf der Seite Einstellungen für ausgewählte Add-Ons konfigurieren die Option Optionale Konfigurationseinstellungen aus, um das Add-On-Konfigurationsschema anzuzeigen.

    1. Fügen Sie das folgende YAML ein, um den Snapshot-Controller dem system-Knoten-Pool zuzuordnen. Der Snapshot-Controller enthält eine Toleranz für den CriticalAddonsOnly-Taint.

      { "nodeSelector": { "karpenter.sh/nodepool": "system" } }
    2. Klicken Sie auf Weiter

  5. Überprüfen Sie die Add-On-Konfiguration und wählen Sie dann Erstellen aus