Auf dieser Seite wird beschrieben, wie Sie Probleme bei Clusterupgrades von Google Kubernetes Engine (GKE) beheben.
Wenn Sie weitere Unterstützung benötigen, wenden Sie sich an den Cloud Customer Care.kube-apiserver ist nach dem Upgrade der Steuerungsebene fehlerhaft
Das folgende Problem tritt auf, wenn Sie ein manuelles Upgrade der Steuerungsebene Ihrer GKE-Clusterversion starten. Einige vom Nutzer bereitgestellte Zulassungs-Webhooks können verhindern, dass Systemkomponenten zulässige RBAC-Rollen erstellen, die für eine ordnungsgemäße Funktion erforderlich sind. Während des Upgrades der Steuerungsebene erstellt Google Cloud die Komponente des Kubernetes API-Servers (kube-apiserver) neu. Wenn ein Webhook die RBAC-Rolle für die API-Serverkomponente blockiert, wird der API-Server nicht gestartet und das Clusterupgrade wird nicht abgeschlossen.
Die Fehlermeldung in der gcloud CLI sieht in etwa so aus:
FAILED: All cluster resources were brought up, but: component "KubeApiserverReady" from endpoint "readyz of kube apiserver is not successful" is unhealthy.
Um den fehlerhaften Webhook zu identifizieren, prüfen Sie Ihre GKE-Audit-Logs auf RBAC-Aufrufe mit den folgenden Informationen:
protoPayload.resourceName="RBAC_RULE"
protoPayload.authenticationInfo.principalEmail="system:apiserver"
RBAC_RULE
ist der vollständige Name einer RBAC-Rolle, z. B. rbac.authorization.k8s.io/v1/clusterroles/system:controller:horizontal-pod-autoscaler
.
Der Name des fehlgeschlagenen Webhooks wird im Log im folgenden Format angezeigt:
admission webhook WEBHOOK_NAME denied the request
Versuchen Sie Folgendes, um dieses Problem zu beheben:
- Passen Sie Ihre Einschränkungen an, um das Erstellen und Aktualisieren von ClusterRoles mit dem Präfix
system:
zuzulassen. - Passen Sie Ihren Webhook so an, dass keine Anfragen zum Erstellen und Aktualisieren von System-RBAC-Rollen abgefangen werden.
- Deaktivieren Sie den Webhook.
Wie ist das möglich?
Kubernetes macht einen automatischen Abgleich der RBAC-Rollen des Standardsystems mit den Standardrichtlinien in der neuesten Nebenversion. Die Standardrichtlinien für Systemrollen ändern sich in neuen Kubernetes-Versionen manchmal.
Für diesen Abgleich erstellt oder aktualisiert GKE die ClusterRoles und ClusterRoleBindings im Cluster. Wenn Sie einen Webhook haben, der die Erstellungs- oder Aktualisierungsanfragen aufgrund des Umfangs der Berechtigungen, die die Standard-RBAC-Richtlinien verwenden, abfängt und ablehnt, kann der API-Server nicht mit der neuen Nebenversion funktionieren.
Nach dem Upgrade des Standard-Clusters entfernte Arbeitslasten
Ihre Arbeitslasten werden möglicherweise nach einem Clusterupgrade bereinigt, wenn alle folgenden Bedingungen erfüllt sind:
- Die Systemarbeitslasten benötigen mehr Speicherplatz, wenn die Steuerungsebene des Clusters die neue GKE-Version ausführt.
- Ihre vorhandenen Knoten haben nicht genügend Ressourcen, um die neuen Systemarbeitslasten und vorhandenen Arbeitslasten auszuführen.
- Cluster Autoscaler ist für den Cluster deaktiviert.
Versuchen Sie Folgendes, um dieses Problem zu beheben:
- Autoscaling für vorhandene Knotenpools aktivieren
- Automatische Knotenbereitstellung aktivieren
- Neuen Knotenpool erstellen
- Vorhandenen Knotenpool vertikal hochskalieren