Probleme beim Erstellen oder Aktualisieren von Clustern beheben

Auf dieser Seite wird beschrieben, wie Sie Probleme im Zusammenhang mit 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 stellen, 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 erfolgen, 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 Erstellungsfehler abrufen, indem Sie die Operation-Ressource beschreiben, die mit dem API-Aufruf zum Erstellen von Clustern verknüpft 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 die zugehörigen Informationen, um den gewünschten Vorgang zur Clustererstellung 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 ein Cluster scheinbar erfolgreich erstellt wurde, kann eine falsch angegebene IAM-Rolle später während des Clusterbetriebs 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 sind unter API-Rolle und Rolle der Steuerungsebene verfügbar.

Erstellung oder Betrieb eines Clusters schlagen in der Systemdiagnose fehl

Manchmal schlägt die Clustererstellung während der Systemdiagnose mit einem Vorgangsstatus wie dem folgenden fehl:

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 auf fehlende IAM-Rollen oder falsch angegebene IAM-Rollen zurückzuführen sein. 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 enthält, werden die folgenden 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 Knoten der Steuerungsebene oder CLUSTER_NAME-np für Knotenpoolknoten.
  4. Wählen Sie Aktionen -> Monitoring und Fehlerbehebung -> Systemlog abrufen aus. Das Systemlog der Instanz wird angezeigt.

Fehler beim Aktualisieren des Clusters

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

Wenn ein Preflight-Test fehlschlägt, aktualisiert der Cluster keine Ressourcen und gibt Informationen über den Fehler direkt an Sie zurück. Wenn Sie beispielsweise versuchen, einen Cluster so zu aktualisieren, dass ein SSH-Schlüsselpaar mit dem Namen test_ec2_keypair verwendet wird, versucht der Preflight-Test, das EC2-Schlüsselpaar abzurufen, und die Anfrage schlägt fehl. Die Anfrage gibt beispielsweise 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 nach bestandenen Preflight-Tests fehlschlagen. Dies kann einige Minuten nach Beginn der Clusteraktualisierung erfolgen, wenn der Status der AWS-Ressource in Ihrem Google Cloud-Projekt auf DEGRADED gesetzt ist.

Führen Sie die unter Fehler bei der Clustererstellung beschriebenen Schritte aus, um Details zum Fehler und zum zugehörigen Vorgang abzurufen.

Clusterupdate schlägt beim Aktualisieren von Tags der Steuerungsebene fehl

Die AWS Update API unterstützt das Aktualisieren von Tags der Steuerungsebene. Zum Aktualisieren von Tags benötigen Sie einen Cluster mit Kubernetes Version 1.24 oder höher. Außerdem müssen Sie dafür sorgen, dass Ihre AWS-IAM-Rolle die entsprechenden Berechtigungen zum Aktualisieren von Tags der Steuerungsebene hat. Diese Berechtigungen finden Sie auf der Seite Cluster aktualisieren.

Ein Fehler, der einen Authentifizierungsfehler anzeigt, weist in der Regel darauf hin, dass Sie eine IAM-Berechtigung nicht hinzugefügt haben. Wenn die API-Rolle beispielsweise die Berechtigung ec2:DeleteTags nicht enthielt, schlägt die Clusteraktualisierung für Tags möglicherweise mit einer Fehlermeldung wie der folgenden fehl (<encoded_auth_failure_message> wird der Kürze halber 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>

Zum Debuggen der vorherigen codierten Fehlermeldung können Sie eine Anfrage an die AWS STS decode-authorization-message API 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 in 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 zeigt an, dass Sie die Aktion ec2:DeleteTags für die EC2-Sicherheitsgruppenregel-Ressource des AWS-Clusters nicht ausführen konnten. Aktualisieren Sie Ihre API-Rolle entsprechend und senden Sie die Update API-Anfrage noch einmal, um die Tags der Steuerungsebene zu aktualisieren.

Nächste Schritte