ACK-Konzepte - Amazon EKS

Unterstützung für die Verbesserung dieser Seite beitragen

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

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

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

ACK-Konzepte

ACK verwaltet AWS Ressourcen über Kubernetes, APIs indem es kontinuierlich den gewünschten Status in Ihren Manifesten mit dem tatsächlichen Status in abgleicht. AWS Wenn Sie eine benutzerdefinierte Kubernetes-Ressource erstellen oder aktualisieren, führt ACK die erforderlichen AWS API-Aufrufe durch, um die entsprechende AWS Ressource zu erstellen oder zu ändern, überwacht sie dann auf Abweichungen und aktualisiert den Kubernetes-Status, um den aktuellen Status widerzuspiegeln. Mit diesem Ansatz können Sie die Infrastruktur mithilfe vertrauter Kubernetes-Tools und -Workflows verwalten und gleichzeitig die Konsistenz zwischen Ihrem Cluster und aufrechterhalten. AWS

In diesem Thema werden die grundlegenden Konzepte erläutert, die der Verwaltung von AWS Ressourcen durch ACK über Kubernetes zugrunde liegen. APIs

Erste Schritte mit ACK

Nachdem Sie die ACK-Fähigkeit erstellt haben (sieheErstellen Sie eine ACK-Fähigkeit), können Sie mit der Verwaltung von AWS Ressourcen mithilfe von Kubernetes-Manifesten in Ihrem Cluster beginnen.

Erstellen Sie beispielsweise dieses S3-Bucket-Manifest in und wählen Sie bucket.yaml dabei Ihren eigenen eindeutigen Bucket-Namen.

apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: my-test-bucket namespace: default spec: name: my-unique-bucket-name-12345

Wenden Sie das Manifest an:

kubectl apply -f bucket.yaml

Überprüfen Sie den Status:

kubectl get bucket my-test-bucket kubectl describe bucket my-test-bucket

Stellen Sie sicher, dass der Bucket erstellt wurde in AWS:

aws s3 ls | grep my-unique-bucket-name-12345

Löschen Sie die Kubernetes-Ressource:

kubectl delete bucket my-test-bucket

Stellen Sie sicher, dass der Bucket gelöscht wurde aus: AWS

aws s3 ls | grep my-unique-bucket-name-12345

Der Bucket sollte nicht mehr in der Liste erscheinen, was zeigt, dass ACK den gesamten Lebenszyklus von AWS Ressourcen verwaltet.

Weitere Informationen zu den ersten Schritten mit ACK finden Sie unter Erste Schritte mit ACK.

Lebenszyklus und Abstimmung von Ressourcen

ACK verwendet eine kontinuierliche Abstimmungsschleife, um sicherzustellen, dass Ihre AWS Ressourcen dem gewünschten Status entsprechen, der in Ihren Kubernetes-Manifesten definiert ist.

So funktioniert der Abgleich:

  1. Sie erstellen oder aktualisieren eine benutzerdefinierte Kubernetes-Ressource (z. B. einen S3-Bucket)

  2. ACK erkennt die Änderung und vergleicht den gewünschten Zustand mit dem tatsächlichen Zustand in AWS

  3. Wenn sie sich unterscheiden, führt ACK AWS API-Aufrufe durch, um den Unterschied auszugleichen

  4. ACK aktualisiert den Ressourcenstatus in Kubernetes, um den aktuellen Status widerzuspiegeln

  5. Die Schleife wiederholt sich kontinuierlich, in der Regel alle paar Stunden

Der Abgleich wird ausgelöst, wenn Sie eine neue Kubernetes-Ressource erstellen, die einer vorhandenen Ressource aktualisieren oder wenn ACK feststelltspec, dass aufgrund manueller Änderungen, die außerhalb AWS von ACK vorgenommen wurden, Abweichungen auftreten. Darüber hinaus führt ACK einen regelmäßigen Abgleich mit einer Resynchronisierungszeit von 10 Stunden durch. Änderungen an Kubernetes-Ressourcen lösen einen sofortigen Abgleich aus, während die passive Drift-Erkennung von AWS Upstream-Ressourcenänderungen während der regelmäßigen Neusynchronisierung erfolgt.

Bei der Bearbeitung des obigen Beispiels für die ersten Schritte führt ACK die folgenden Schritte aus:

  1. Prüft, ob ein Bucket existiert in AWS

  2. Wenn nicht, ruft s3:CreateBucket

  3. Aktualisiert den Kubernetes-Status mit dem Bucket ARN und dem Status

  4. Setzt die Überwachung auf Drift fort

Weitere Informationen zur Funktionsweise von ACK finden Sie unter ACK Reconciliation.

Statusbedingungen

ACK-Ressourcen verwenden Statusbedingungen, um ihren Status zu kommunizieren. Wenn Sie diese Bedingungen verstehen, können Sie Probleme beheben und den Zustand der Ressourcen besser verstehen.

  • Bereit: Zeigt an, dass die Ressource bereit ist, genutzt zu werden (standardisierter Kubernetes-Zustand).

  • ZURÜCK. ResourceSynced: Zeigt an, dass die Ressourcenspezifikation dem AWS Ressourcenstatus entspricht.

  • ack.Terminal: Zeigt an, dass ein nicht behebbarer Fehler aufgetreten ist.

  • ack.Adopted: Zeigt an, dass die Ressource aus einer vorhandenen Ressource übernommen und nicht neu erstellt wurde. AWS

  • Ack.Recoverable: Weist auf einen behebbaren Fehler hin, der ohne Aktualisierung der Spezifikation behoben werden kann.

  • ACK.Advisory: Stellt Beratungsinformationen zu der Ressource bereit.

  • ACK. LateInitialized: Zeigt an, ob die späte Initialisierung der Felder abgeschlossen ist.

  • ZURÜCK. ReferencesResolved: Gibt an, ob alle AWSResourceReference Felder aufgelöst wurden.

  • ZURÜCK. IAMRoleAusgewählt: Gibt an, ob ein IAMRole Selektor für die Verwaltung dieser Ressource ausgewählt wurde.

Überprüfen Sie den Ressourcenstatus:

# Check if resource is ready kubectl get bucket my-bucket -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' # Check for terminal errors kubectl get bucket my-bucket -o jsonpath='{.status.conditions[?(@.type=="ACK.Terminal")]}'

Beispiel für einen Status:

status: conditions: - type: Ready status: "True" lastTransitionTime: "2024-01-15T10:30:00Z" - type: ACK.ResourceSynced status: "True" lastTransitionTime: "2024-01-15T10:30:00Z" - type: ACK.Terminal status: "True" ackResourceMetadata: arn: arn:aws:s3:::my-unique-bucket-name ownerAccountID: "111122223333" region: us-west-2

Weitere Informationen zum ACK-Status und zu den ACK-Bedingungen finden Sie unter ACK-Bedingungen.

Richtlinien zum Löschen

Die Löschrichtlinie von ACK steuert, was mit AWS Ressourcen passiert, wenn Sie die Kubernetes-Ressource löschen.

Löschen (Standard)

Die AWS Ressource wird gelöscht, wenn Sie die Kubernetes-Ressource löschen: Dies ist das Standardverhalten.

# No annotation needed - this is the default apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: temp-bucket spec: name: temporary-bucket

Durch das Löschen dieser Ressource wird der S3-Bucket in gelöscht. AWS

Beibehalten

Die AWS Ressource bleibt erhalten, wenn Sie die Kubernetes-Ressource löschen:

apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: important-bucket annotations: services.k8s.aws/deletion-policy: "retain" spec: name: production-data-bucket

Wenn Sie diese Ressource löschen, wird sie aus Kubernetes entfernt, der S3-Bucket bleibt jedoch erhalten. AWS

Die retain Richtlinie ist nützlich für Produktionsdatenbanken, die die Kubernetes-Ressource überdauern sollen, für gemeinsam genutzte Ressourcen, die von mehreren Anwendungen genutzt werden, für Ressourcen mit wichtigen Daten, die nicht versehentlich gelöscht werden sollten, oder für temporäres ACK-Management, bei dem Sie eine Ressource übernehmen, konfigurieren und sie dann wieder für die manuelle Verwaltung freigeben.

Weitere Informationen zur ACK-Löschrichtlinie finden Sie unter ACK-Löschrichtlinie.

Einführung von Ressourcen

Durch die Einführung können Sie vorhandene AWS Ressourcen unter das ACK-Management stellen, ohne sie neu erstellen zu müssen.

Wann sollte Adoption verwendet werden:

  • Migration der vorhandenen Infrastruktur zum ACK-Management

  • Wiederherstellung verwaister AWS Ressourcen bei versehentlichem Löschen von Ressourcen in Kubernetes

  • Importieren von Ressourcen, die mit anderen Tools erstellt wurden (CloudFormation, Terraform)

So funktioniert Adoption:

apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: existing-bucket annotations: services.k8s.aws/adoption-policy: "adopt-or-create" spec: name: my-existing-bucket-name

Wenn Sie diese Ressource erstellen:

  1. ACK prüft, ob ein Bucket mit diesem Namen vorhanden ist AWS

  2. Wenn es gefunden wird, übernimmt ACK es (keine API-Aufrufe zum Erstellen)

  3. ACK liest die aktuelle Konfiguration von AWS

  4. ACK aktualisiert den Kubernetes-Status, um den aktuellen Status widerzuspiegeln

  5. Zukünftige Updates stimmen die Ressource normal ab

Nach der Übernahme werden Ressourcen wie jede andere ACK-Ressource verwaltet. Wenn Sie die Kubernetes-Ressource löschen, wird die Ressource gelöscht, sofern Sie nicht die AWS Löschrichtlinie verwenden. retain

Bei der Übernahme von Ressourcen muss die AWS Ressource bereits vorhanden sein und ACK benötigt Leseberechtigungen, um sie zu finden. Die adopt-or-create Richtlinie übernimmt die Ressource, falls sie existiert, oder erstellt sie, wenn sie nicht existiert. Dies ist nützlich, wenn Sie einen deklarativen Workflow benötigen, der unabhängig davon funktioniert, ob die Ressource existiert oder nicht.

Weitere Informationen zur Einführung von ACK-Ressourcen finden Sie unter Einführung von ACK-Ressourcen.

Konto- und regionsübergreifende Ressourcen

ACK kann Ressourcen in verschiedenen AWS Konten und Regionen von einem einzigen Cluster aus verwalten.

Regionsübergreifende Anmerkungen zu Ressourcen

Sie können die Region einer AWS Ressource mithilfe einer Anmerkung angeben:

apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: eu-bucket annotations: services.k8s.aws/region: eu-west-1 spec: name: my-eu-bucket

Sie können auch die Region aller AWS Ressourcen angeben, die in einem bestimmten Namespace erstellt wurden:

Namespace-Anmerkungen

Legen Sie eine Standardregion für alle Ressourcen in einem Namespace fest:

apiVersion: v1 kind: Namespace metadata: name: production annotations: services.k8s.aws/default-region: us-west-2

In diesem Namespace erstellte Ressourcen verwenden diese Region, sofern sie nicht durch eine Anmerkung auf Ressourcenebene überschrieben wird.

Kontoübergreifend

Verwenden Sie IAM-Rollenselektoren, um bestimmte IAM-Rollen Namespaces zuzuordnen:

apiVersion: services.k8s.aws/v1alpha1 kind: IAMRoleSelector metadata: name: target-account-config spec: arn: arn:aws:iam::444455556666:role/ACKTargetAccountRole namespaceSelector: names: - production

Ressourcen, die im zugewiesenen Namespace erstellt wurden, verwenden automatisch die angegebene Rolle.

Weitere Informationen zu IAM-Rollenselektoren finden Sie unter Accountübergreifendes ACK-Ressourcenmanagement. Einzelheiten zur kontoübergreifenden Konfiguration finden Sie unter. ACK-Berechtigungen konfigurieren

Fehlerbehandlung und Verhalten bei Wiederholungsversuchen

ACK behandelt automatisch vorübergehende Fehler und wiederholt fehlgeschlagene Operationen.

Strategie erneut versuchen:

  • Vorübergehende Fehler (Ratenbegrenzung, vorübergehende Serviceprobleme, unzureichende Berechtigungen) lösen automatische Wiederholungsversuche aus

  • Exponentieller Backoff verhindert Überforderung AWS APIs

  • Die maximale Anzahl von Wiederholungsversuchen ist je nach Fehlertyp unterschiedlich

  • Dauerhafte Fehler (ungültige Parameter, Konflikte mit Ressourcennamen) führen nicht zu einem erneuten Versuch

Überprüfen Sie den Ressourcenstatus auf Fehlerdetails mitkubectl describe:

kubectl describe bucket my-bucket

Suchen Sie nach Statusbedingungen mit Fehlermeldungen, Ereignissen, die die letzten Abgleichversuche anzeigen, und dem message Feld unter Statusbedingungen, in denen Fehler erklärt werden. Zu den häufigsten Fehlern gehören unzureichende IAM-Berechtigungen, Konflikte bei Ressourcennamen AWS, ungültige Konfigurationswerte in der spec und Überschreitung von AWS Servicekontingenten.

Informationen zur Behebung häufiger Fehler finden Sie unterProbleme mit ACK-Funktionen beheben.

Ressourcenzusammensetzung mit Kro

Verwenden Sie die EKS-Funktion für kro (Kube Resource Orchestrator), um mehrere ACK-Ressourcen zusammenzustellen und miteinander zu verbinden. kro bietet eine deklarative Möglichkeit, Ressourcengruppen zu definieren und Konfigurationen zwischen Ressourcen zu übergeben, um komplexe Infrastrukturmuster einfach zu verwalten.

Ausführliche Beispiele für die Erstellung benutzerdefinierter Ressourcenzusammenstellungen mit ACK-Ressourcen finden Sie unter Kro-Konzepte

Nächste Schritte