Fehler beim Erstellen oder Aktualisieren von Clustern beheben

Auf dieser Seite erfahren Sie, wie Sie Probleme bei der Installation oder dem Upgrade von GKE on AWS beheben.

Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Cloud Customer Care.

Clustererstellung ist nicht erfolgreich

Wenn Sie eine Anfrage zum Erstellen eines Clusters senden, führt GKE on AWS zuerst eine Reihe von Preflight-Tests aus, um die Anfrage zu prüfen. Ist die Clustererstellung nicht erfolgreich, kann dies daran liegen, dass einer dieser Preflight-Tests fehlgeschlagen ist oder ein Schritt im Clustererstellungsprozess nicht abgeschlossen wurde.

Wenn ein Preflight-Test fehlschlägt, erstellt Ihr Cluster keine Ressourcen und gibt direkt Informationen zum Fehler zurück. Wenn Sie beispielsweise versuchen, einen Cluster mit dem Namen invalid%%%name zu erstellen, schlägt der Preflight-Test für einen gültigen Clusternamen fehl und die Anfrage gibt folgenden Fehler zurück:

ERROR: (gcloud.container.aws.clusters.create) INVALID_ARGUMENT: must be
between 1-63 characters, valid characters are /[a-z][0-9]-/, should start with a
letter, and end with a letter or a number: "invalid%%%name",
field: aws_cluster_id

Die Clustererstellung kann auch fehlschlagen, nachdem die Preflight-Tests bestanden wurden. Dies kann einige Minuten nach Beginn der Clustererstellung geschehen, nachdem GKE on AWS Ressourcen in Google Cloud und AWS erstellt hat. In diesem Fall ist in Ihrem Google Cloud -Projekt eine AWS-Ressource mit dem Status ERROR vorhanden.

Führen Sie den folgenden Befehl aus, um Details zum Fehler abzurufen:

gcloud container aws clusters describe CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION \
    --format "value(state, errors)"

Ersetzen Sie Folgendes:

  • CLUSTER_NAME durch den Namen des Clusters, dessen Status Sie abfragen
  • GOOGLE_CLOUD_LOCATION durch den Namen der Google Cloud Region, die diesen AWS-Cluster verwaltet

Alternativ können Sie Details zum Fehler bei der Erstellung abrufen. Beschreiben Sie dafür die Ressource Operation, die dem Aufruf der Cluster-API zugeordnet ist.

gcloud container aws operations describe OPERATION_ID

Ersetzen Sie OPERATION_ID durch die ID des Vorgangs, der den Cluster erstellt hat. Wenn Sie die Vorgangs-ID der Anfrage zur Clustererstellung nicht haben, können Sie sie mit dem folgenden Befehl abrufen:

gcloud container aws operations list \
    --location GOOGLE_CLOUD_LOCATION

Verwenden Sie den Zeitstempel oder zugehörige Informationen, um den gewünschten Clustererstellungsvorgang zu identifizieren.

Wenn die Clustererstellung beispielsweise aufgrund einer AWS-IAM-Rolle fehlgeschlagen ist, die nicht über alle erforderlichen Berechtigungen verfügt, sehen dieser Befehl und seine Ergebnisse in etwa so aus:

gcloud container aws operations describe b6a3d042-8c30-4524-9a99-6ffcdc24b370 \
  --location GOOGLE_CLOUD_LOCATION

Die Ausgabe sieht in etwa so aus:

done: true
error:
  code: 9
  message: 'could not set deregistration_delay timeout for the target group: AccessDenied
    User: arn:aws:sts::0123456789:assumed-role/foo-1p-dev-oneplatform/multicloud-service-agent
    is not authorized to perform: elasticloadbalancing:ModifyTargetGroupAttributes
    on resource: arn:aws:elasticloadbalancing:us-west-2:0123456789:targetgroup/gke-4nrk57tlyjva-cp-tcp443/74b57728e7a3d5b9
    because no identity-based policy allows the elasticloadbalancing:ModifyTargetGroupAttributes
    action'
metadata:
  '@type': type.googleapis.com/google.cloud.gkemulticloud.v1.OperationMetadata
  createTime: '2021-12-02T17:47:31.516995Z'
  endTime: '2021-12-02T18:03:12.590148Z'
  statusDetail: Cluster is being deployed
  target: projects/123456789/locations/us-west1/awsClusters/aws-prod1
name: projects/123456789/locations/us-west1/operations/b6a3d042-8c30-4524-9a99-6ffcdc24b370

Erstellung oder Betrieb eines Clusters schlagen mit einem Autorisierungsfehler fehl

Ein angezeigter Autorisierungsfehler weist in der Regel darauf hin, dass eine der beiden beim Erstellen des Clusters angegebenen AWS-IAM-Rollen falsch erstellt wurde. Wenn die API-Rolle beispielsweise nicht die Berechtigung elasticloadbalancing:ModifyTargetGroupAttributes enthält, schlägt die Erstellung des Clusters mit einer Fehlermeldung fehl, die in etwa so aussieht:

ERROR: (gcloud.container.aws.clusters.create) could not set
deregistration_delay timeout for the target group: AccessDenied User:
arn:aws:sts::0123456789:assumed-role/cloudshell-user-dev-api-role/multicloud-
service-agent is not authorized to perform:
elasticloadbalancing:ModifyTargetGroupAttributes on resource:
arn:aws:elasticloadbalancing:us-east-1:0123456789:targetgroup/gke-u6au6c65e4iq-
cp-tcp443/be4c0f8d872bb60e because no identity-based policy allows the
elasticloadbalancing:ModifyTargetGroupAttributes action

Auch wenn es so wirkt, als wäre ein Cluster erfolgreich erstellt worden, kann eine falsch angegebene IAM-Rolle während des Betriebs des Clusters zu Fehlern führen, z. B. bei Verwendung von Befehlen wie kubectl logs.

Um solche Autorisierungsfehler zu beheben, prüfen Sie die Richtlinien, die Sie den beiden IAM-Rollen bei der Clustererstellung zugeordnet haben. Achten Sie insbesondere darauf, dass sie den Beschreibungen unter AWS-IAM-Rollen erstellen entsprechen. Löschen Sie dann den Cluster und erstellen Sie ihn neu. Die einzelnen Rollenbeschreibungen finden Sie unter API-Rolle und Rolle der Steuerungsebene.

Erstellung oder Betrieb eines Clusters schlagen in der Systemdiagnose fehl

Manchmal schlägt die Clustererstellung während der Systemdiagnose mit einem Vorgangsstatus fehl, der in etwa so aussieht:

done: true
error:
  code: 4
  message: Operation failed
metadata:
  '@type': type.googleapis.com/google.cloud.gkemulticloud.v1.OperationMetadata
  createTime: '2022-06-29T18:26:39.739574Z'
  endTime: '2022-06-29T18:54:45.632136Z'
  errorDetail: Operation failed
  statusDetail: Health-checking cluster
  target: projects/123456789/locations/us-west1/awsClusters/aws-prod1
name: projects/123456789/locations/us-west1/operations/8a7a3b7f-242d-4fff-b518-f361d41c6597

Dieser Fehler kann daran liegen, dass IAM-Rollen fehlen oder falsch angegeben sind. Sie können AWS CloudTrail verwenden, um IAM-Probleme aufzudecken.

Beispiel:

  • Wenn die API-Rolle nicht die Berechtigung kms:GenerateDataKeyWithoutPlaintext für den KMS-Schlüssel des Haupt-Volumes der Steuerungsebene enthielt, werden folgende Ereignisse angezeigt:

    "eventName": "AttachVolume",
    "errorCode": "Client.InvalidVolume.NotFound",
    "errorMessage": "The volume 'vol-0ff75940ce333aebb' does not exist.",
    

    und

    "errorCode": "AccessDenied",
    "errorMessage": "User: arn:aws:sts::0123456789:assumed-role/foo-1p-dev-oneplatform/multicloud-service-agent is not authorized to perform: kms:GenerateDataKeyWithoutPlaintext on resource: arn:aws:kms:us-west1:0123456789:key/57a61a45-d9c1-4038-9021-8eb08ba339ba because no identity-based policy allows the kms:GenerateDataKeyWithoutPlaintext action",
    
  • Wenn die Rolle der Steuerungsebene nicht die Berechtigung kms:CreateGrant für den KMS-Schlüssel des Haupt-Volumes der Steuerungsebene enthielt, werden folgende Ereignisse angezeigt:

    "eventName": "AttachVolume",
    "errorCode": "Client.CustomerKeyHasBeenRevoked",
    "errorMessage": "Volume vol-0d022beb769c8e33b cannot be attached. The encrypted volume was unable to access the KMS key.",
    

    und

    "errorCode": "AccessDenied",
    "errorMessage": "User: arn:aws:sts::0123456789:assumed-role/foo-controlplane/i-0a11fae03eb0b08c1 is not authorized to perform: kms:CreateGrant on resource: arn:aws:kms:us-west1:0123456789:key/57a61a45-d9c1-4038-9021-8eb08ba339ba because no identity-based policy allows the kms:CreateGrant action",
    
  • Wenn Sie die mit dem Dienst verknüpfte Rolle namens AWSServiceRoleForAutoScaling mit der Berechtigung kms:CreateGrant zur Verwendung des KMS-Schlüssels des Root-Volumes der Steuerungsebene nicht zugewiesen haben, werden folgende Ereignisse angezeigt:

    "errorCode": "AccessDenied",
    "errorMessage": "User: arn:aws:sts::0123456789:assumed-role/AWSServiceRoleForAutoScaling/AutoScaling is not authorized to perform: kms:CreateGrant on resource: arn:aws:kms:us-west1:0123456789:key/c77a3a26-bc91-4434-bac0-0aa963cb0c31 because no identity-based policy allows the kms:CreateGrant action",
    
  • Wenn Sie die mit dem Dienst verknüpfte Rolle namens AWSServiceRoleForAutoScaling mit der Berechtigung kms:GenerateDataKeyWithoutPlaintext zur Verwendung des KMS-Schlüssels des Root-Volumes der Steuerungsebene nicht zugewiesen haben, werden folgende Ereignisse angezeigt:

    "errorCode": "AccessDenied",
    "errorMessage": "User: arn:aws:sts::0123456789:assumed-role/AWSServiceRoleForAutoScaling/AutoScaling is not authorized to perform: kms:GenerateDataKeyWithoutPlaintext on resource: arn:aws:kms:us-west1:0123456789:key/c77a3a26-bc91-4434-bac0-0aa963cb0c31 because no identity-based policy allows the kms:CreateGrant action",
    

Warten, bis Knoten dem Cluster hinzugefügt werden

Wenn beim Erstellen eines Knotenpools der folgende Fehler angezeigt wird, prüfen Sie, dass Ihre VPC keinen verknüpften sekundären IPv4-CIDR-Block enthält.

errorDetail: Operation failed
statusDetail: Waiting for nodes to join the cluster (0 out of 1 are ready)

Erstellen Sie zur Behebung dieses Problems eine Sicherheitsgruppe, die alle CIDR-Blöcke enthält, und fügen Sie diese Gruppe Ihrem Cluster hinzu. Weitere Informationen finden Sie unter Knotenpools in sekundären CIDR-Blöcken von VPC.

Systemlog einer Instanz abrufen

Wenn eine Steuerungsebene oder Knotenpoolinstanz nicht gestartet wird, können Sie ihr Systemlog überprüfen. So prüfen Sie das Systemlog:

  1. Öffnen Sie die Konsole der AWS EC2-Instanz.
  2. Klicken Sie auf Instanzen.
  3. Suchen Sie die Instanz anhand des Namens. GKE on AWS erstellt in der Regel Instanzen mit dem Namen CLUSTER_NAME-cp für Steuerungsebenenknoten oder CLUSTER_NAME-np für Knotenpools.
  4. Wählen Sie Aktionen -> Monitoring und Fehlerbehebung -> Systemlog abrufen aus. Das Systemlog der Instanz wird angezeigt.

Fehler bei Clusterupdates

Wenn Sie einen Cluster aktualisieren, führt GKE on AWS wie beim Erstellen eines neuen Clusters zuerst eine Reihe von Preflight-Tests aus, um die Anfrage zu prüfen. Wenn das Clusterupdate fehlschlägt, kann dies daran liegen, dass einer dieser Preflight-Tests fehlgeschlagen ist oder ein Schritt im Clusterupdateprozess nicht abgeschlossen wurde.

Wenn ein Preflight-Test fehlschlägt, werden keine Ressourcen in Ihrem Cluster aktualisiert und Sie erhalten direkt Informationen zum Fehler. Wenn Sie beispielsweise versuchen, einen Cluster so zu aktualisieren, dass er ein SSH-Schlüsselpaar mit dem Namen test_ec2_keypair verwendet, versucht der Preflight-Test, das EC2-Schlüsselpaar abzurufen. Dies schlägt fehl und die Anfrage gibt den folgenden Fehler zurück:

ERROR: (gcloud.container.aws.clusters.update) INVALID_ARGUMENT: key pair
"test_ec2_keypair" not found,
field: aws_cluster.control_plane.ssh_config.ec2_key_pair

Clusterupdates können auch fehlschlagen, nachdem die Preflight-Tests bestanden wurden. Dies kann einige Minuten nach Beginn der Clusteraktualisierung geschehen, wenn der Status Ihrer AWS-Ressource in Ihrem Google Cloud Projekt auf DEGRADED gesetzt ist.

Wenn Sie Details zum Fehler und zum zugehörigen Vorgang abrufen möchten, folgen Sie der Anleitung unter Fehler bei der Clustererstellung.

Clusterupdate schlägt beim Aktualisieren von Steuerungsebenen-Tags fehl

Die AWS-Update-API unterstützt das Aktualisieren von Steuerungsebenen-Tags. Zum Aktualisieren von Tags benötigen Sie einen Cluster mit Kubernetes-Version 1.24 oder höher. Außerdem muss Ihre AWS IAM-Rolle die entsprechenden Berechtigungen haben, die auf der Seite Cluster aktualisieren für das Aktualisieren von Steuerungsebenen-Tags aufgeführt sind.

Ein angezeigter Authentifizierungsfehler weist in der Regel darauf hin, dass Sie eine IAM-Berechtigung nicht hinzugefügt haben. Wenn die API-Rolle beispielsweise nicht die Berechtigung ec2:DeleteTags enthält, schlägt die Clusteraktualisierung für Tags möglicherweise mit einer Fehlermeldung fehl, die in etwa so aussieht (<encoded_auth_failure_message> wurde aus Gründen der Übersichtlichkeit entfernt):

ERROR: (gcloud.container.aws.clusters.update) could not delete tags:
UnauthorizedOperation You are not authorized to perform this operation.
Encoded authorization failure message: <encoded_auth_failure_message>

Um die oben genannte codierte Fehlermeldung zu debuggen, können Sie eine Anfrage an die AWS STS API decode-authorization-message senden, wie im folgenden Befehl gezeigt:

aws sts decode-authorization-message --encoded-message
<encoded_auth_failure_message> --query DecodedMessage --output
text | jq '.' | less

Die Ausgabe sieht etwa so aus:

...
"principal": {
  "id": "AROAXMEL2SCNPG6RCJ72B:iam-session",
  "arn": "arn:aws:sts::1234567890:assumed-role/iam_role/iam-session"
},
"action": "ec2:DeleteTags",
"resource": "arn:aws:ec2:us-west-2:1234567890:security-group-rule/sgr-00bdbaef24a92df62",
...

Die vorherige Antwort gibt an, dass Sie die Aktion ec2:DeleteTags für die EC2-Sicherheitsgruppenregelressource des AWS-Clusters nicht ausführen konnten. Aktualisieren Sie die API-Rolle entsprechend und senden Sie die Update-API-Anfrage noch einmal, um die Tags der Steuerungsebene zu aktualisieren.

Nächste Schritte