View a markdown version of this page

Probleme mit Kro-Funktionen beheben - 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 unter, 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.

Probleme mit Kro-Funktionen beheben

Anmerkung

Die EKS-Funktionen werden vollständig verwaltet und außerhalb Ihres Clusters ausgeführt. Sie haben keinen direkten Zugriff auf Controller-Namespaces. Sie können die Controller-Protokollübermittlung konfigurieren, um Einblick in das Controller-Verhalten zu erhalten. Siehe Zugriff auf EKS Capabilities Controller-Protokolle. Die Problembehandlung konzentriert sich auf den Zustand der Funktionen, die RBAC-Konfiguration und den Ressourcenstatus.

Die Funktion ist AKTIV, funktioniert aber ResourceGraphDefinitions nicht

Wenn für Ihre Kro-Funktion ein ACTIVE Status angezeigt wird, aber ResourceGraphDefinitions keine zugrunde liegenden Ressourcen erstellt werden, überprüfen Sie den Status der Fähigkeit, die RBAC-Berechtigungen und den Ressourcenstatus.

Überprüfe den Zustand der Fähigkeiten:

Sie können Probleme mit dem Status und dem Status von Fähigkeiten in der EKS-Konsole oder mithilfe der AWS CLI anzeigen.

Konsole:

  1. Öffnen Sie die Amazon EKS-Konsole unter https://console.aws.amazon.com/eks/home #/clusters.

  2. Wählen Sie Ihren Cluster-Namen aus.

  3. Wählen Sie den Registerkarte Beobachtbarkeit.

  4. Wählen Sie Cluster überwachen aus.

  5. Wählen Sie die Registerkarte „Funktionen“, um den Zustand und den Status aller Funktionen anzuzeigen.

AWS CLI:

# View capability status and health aws eks describe-capability \ --region region-code \ --cluster-name my-cluster \ --capability-name my-kro # Look for issues in the health section

Häufige Ursachen:

  • RBAC-Berechtigungen fehlen: Kro fehlen die Berechtigungen, um die zugrunde liegenden Kubernetes-Ressourcen zu erstellen

  • Ungültige CEL-Ausdrücke: Syntaxfehler in ResourceGraphDefinition

  • Ressourcenabhängigkeiten: Die abhängigen Ressourcen sind nicht bereit

  • Schemavalidierung: Die Instanz entspricht nicht den RGD-Schemaanforderungen

Überprüfen Sie die RBAC-Berechtigungen:

# Check if capability has cluster admin policy kubectl get accessentry -A | grep kro

Wenn die Fähigkeit nicht über die erforderlichen Berechtigungen verfügt, verknüpfen Sie sie AmazonEKSClusterAdminPolicy mit dem Zugriffseintrag der Kro-Fähigkeit, oder erstellen Sie restriktivere RBAC-Richtlinien für den Produktionsgebrauch. Details dazu finden Sie unter Kro-Berechtigungen konfigurieren.

Status überprüfen: ResourceGraphDefinition

# List all RGDs kubectl get resourcegraphdefinition # Describe specific RGD kubectl describe resourcegraphdefinition my-rgd # Check for validation errors kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.conditions}'

ResourceGraphDefinitions haben drei wichtige Statusbedingungen:

  • ResourceGraphAccepted- Ob das RGD die Validierung bestanden hat (CEL-Syntax, Typprüfung, Existenz von Feldern)

  • KindReady- Ob die CRD für Ihre benutzerdefinierte API generiert und registriert wurde

  • ControllerReady- Ob kro aktiv nach Instanzen Ihrer benutzerdefinierten API Ausschau hält

Falls ja ResourceGraphAcceptedFalse, überprüfe die Bedingungsmeldung auf Validierungsfehler wie unbekannte Felder, Typkonflikte oder zirkuläre Abhängigkeiten.

Instanzen wurden erstellt, aber die zugrunde liegenden Ressourcen werden nicht angezeigt

Wenn benutzerdefinierte Ressourceninstanzen existieren, die zugrunde liegenden Kubernetes-Ressourcen (Bereitstellungen, Dienste ConfigMaps) jedoch nicht erstellt werden, überprüfen Sie, ob Kro über Berechtigungen verfügt, und suchen Sie nach Kompositionsfehlern.

Überprüfen Sie den Instanzstatus:

# Describe the instance (replace with your custom resource kind and name) kubectl describe custom-kind my-instance # View instance events kubectl get events --field-selector involvedObject.name=my-instance # Check instance status conditions kubectl get custom-kind my-instance -o jsonpath='{.status.conditions}' # Check instance state kubectl get custom-kind my-instance -o jsonpath='{.status.state}'

Instanzen haben ein state Feld, das den Status auf hoher Ebene anzeigt:

  • ACTIVE- Die Instanz wird erfolgreich ausgeführt

  • IN_PROGRESS- Die Instanz wird verarbeitet oder abgeglichen

  • FAILED- Die Instanz konnte nicht abgeglichen werden

  • DELETING- Die Instanz wird gelöscht

  • ERROR- Bei der Verarbeitung ist ein Fehler aufgetreten

Für Instanzen gelten außerdem vier Statusbedingungen:

  • InstanceManaged- Finalizer und Labels sind richtig eingestellt

  • GraphResolved- Das Laufzeitdiagramm wurde erstellt und die Ressourcen wurden aufgelöst

  • ResourcesReady- Alle Ressourcen wurden erstellt und sind bereit

  • Ready— Gesamtzustand der Instanz (wird erst erreichtTrue, wenn alle Unterbedingungen erfüllt sindTrue)

Konzentrieren Sie sich auf den Ready Zustand, um den Zustand der Instanz zu ermitteln. ReadyIst dies der False Fall, überprüfen Sie die Unterbedingungen, um festzustellen, welche Phase fehlgeschlagen ist.

Überprüfen Sie die RBAC-Berechtigungen:

Die Kro-Funktion benötigt Berechtigungen, um die zugrunde liegenden Kubernetes-Ressourcen zu erstellen, die in Ihrem definiert sind. ResourceGraphDefinitions

# Check if the capability has the AmazonEKSClusterAdminPolicy kubectl get accessentry -A | grep kro

Wenn Berechtigungen fehlen, verknüpfen Sie diese AmazonEKSClusterAdminPolicy mit dem Zugriffseintrag der Kro-Funktion oder erstellen Sie restriktivere RBAC-Richtlinien für den Produktionsgebrauch. Details dazu finden Sie unter Kro-Berechtigungen konfigurieren.

Fehler beim CEL-Ausdruck

CEL-Ausdrucksfehler werden bei der ResourceGraphDefinition Erstellung erkannt, nicht bei der Erstellung von Instanzen. kro validiert die gesamte CEL-Syntax, überprüft Ausdrücke anhand von Kubernetes-Schemas und überprüft die Existenz von Feldern, wenn Sie das RGD erstellen.

Häufige CEL-Validierungsfehler:

  • Undefinierter Feldverweis: Verweis auf ein Feld, das im Schema oder in der Ressource nicht existiert

  • Typkonflikt: Der Ausdruck gibt einen falschen Typ zurück (z. B. eine Zeichenfolge, bei der eine Ganzzahl erwartet wird)

  • Ungültige Syntax: Fehlende Klammern, Anführungszeichen oder Operatoren im CEL-Ausdruck

  • Unbekannter Ressourcentyp: Verweist auf eine CRD, die im Cluster nicht existiert

Überprüfen Sie den RGD-Validierungsstatus:

# Check if RGD was accepted kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.conditions[?(@.type=="ResourceGraphAccepted")]}' # View detailed validation errors kubectl describe resourcegraphdefinition my-rgd

Wenn ja ResourceGraphAcceptedFalse, enthält die Zustandsmeldung den Validierungsfehler.

Beispiel für gültige CEL-Ausdrücke:

# Reference schema field ${schema.spec.appName} # Conditional expression ${schema.spec.replicas > 1} # String template (expressions must return strings) name: "${schema.spec.appName}-service" # Standalone expression (can be any type) replicas: ${schema.spec.replicaCount} # Resource reference ${deployment.status.availableReplicas} # Optional field access (returns null if field doesn't exist) ${configmap.data.?DATABASE_URL}

Ressourcenabhängigkeiten werden nicht aufgelöst

kro leitet automatisch Abhängigkeiten aus CEL-Ausdrücken ab und erstellt Ressourcen in der richtigen Reihenfolge. Wenn Ressourcen nicht wie erwartet erstellt werden, überprüfen Sie die Reihenfolge der Abhängigkeiten und die Ressourcenbereitschaft.

Berechnete Erstellungsreihenfolge anzeigen:

# See the order kro will create resources kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.topologicalOrder}'

Dies zeigt die berechnete Reihenfolge auf der Grundlage von CEL-Ausdrücken zwischen Ressourcen.

Überprüfen Sie die Ressourcenbereitschaft:

# View instance status to see which resources are ready kubectl get custom-kind my-instance -o jsonpath='{.status}' # Check specific resource status kubectl get deployment my-deployment -o jsonpath='{.status.conditions}'

ReadyWenn-Bedingungen überprüfen (falls verwendet):

Das Feld readyWhen ist optional. Wenn nicht angegeben, werden Ressourcen sofort nach der Erstellung als bereit betrachtet. Wenn Sie readyWhen Bedingungen definiert haben, stellen Sie sicher, dass diese die Ressourcenbereitschaft korrekt überprüfen:

resources: - id: deployment readyWhen: - ${deployment.status.availableReplicas == deployment.spec.replicas}

Überprüfen Sie die Ereignisse in Bezug auf Ressourcen:

# View events for the underlying resources kubectl get events -n namespace --sort-by='.lastTimestamp'

Fehler bei der Schemaüberprüfung

Wenn Instanzen aufgrund von Fehlern bei der Schemaüberprüfung nicht erstellt werden können, stellen Sie sicher, dass die Instanz den RGD-Schemaanforderungen entspricht.

Überprüfen Sie die Validierungsfehler:

# Attempt to create instance and view error kubectl apply -f instance.yaml # View existing instance validation status kubectl describe custom-kind my-instance | grep -A 5 "Validation"

Häufige Probleme bei der Validierung:

  • Erforderliche Felder fehlen: Die Instanz stellt nicht alle erforderlichen Schemafelder bereit

  • Typkonflikt: Es wird eine Zeichenfolge angegeben, bei der eine Ganzzahl erwartet wird

  • Ungültiger Enum-Wert: Es wird ein Wert verwendet, der nicht in der Liste der zulässigen Werte enthalten ist

  • Musterkonflikt: Die Zeichenfolge entspricht nicht dem Regex-Muster

Überprüfen Sie das RGD-Schema:

# View the schema definition kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.spec.schema}'

Stellen Sie sicher, dass Ihre Instance alle erforderlichen Felder mit den richtigen Typen bereitstellt.

Nächste Schritte