Installation, Betriebssystem |
1.28.0–1.28.500, 1.29.0 |
IP-Adresse der Docker-Brücke verwendet 172.17.0.1/16 für Knoten der Steuerungsebene des COS-Clusters
GKE on VMware gibt in der Docker-Konfiguration das dedizierte Subnetz --bip=169.254.123.1/24 für die IP-Adresse der Docker-Brücke an, damit das 172.17.0.1/16 -Standardsubnetz nicht reserviert wird. In den Versionen 1.28.0–1.28.500 und 1.29.0 wurde der Docker-Dienst jedoch nicht neu gestartet, nachdem die Docker-Konfiguration von GKE on VMware aufgrund einer Regression im COS OS-Image angepasst wurde. Daher wählt Docker die Standardeinstellung 172.17.0.1/16 als Subnetz der Bridge-IP-Adresse aus. Dies kann zu einem IP-Adresskonflikt führen, wenn Sie bereits eine Arbeitslast in diesem IP-Adressbereich ausführen.
Workaround:
Sie müssen den Docker-Dienst neu starten, um dieses Problem zu umgehen:
sudo systemctl restart docker
Prüfen Sie, ob Docker die richtige Brücken-IP-Adresse nutzt:
ip a | grep docker0
Diese Lösung bleibt bei der Neuerstellung von VMs nicht erhalten. Sie müssen diese Problemumgehung immer dann anwenden, wenn VMs neu erstellt werden.
|
update |
1.28.0–1.28.400, 1.29.0 |
Die Verwendung mehrerer Netzwerkschnittstellen mit Standard-CNI funktioniert nicht
Die CNI-Standard-Binärdateien bridge, ipvlan, vlan, macvlan, dhcp, tuning,
host-local, ptp, portmap sind nicht in den Betriebssystem-Images der betroffenen Versionen enthalten. Diese CNI-Binärprogramme werden von der Datenebene v2 nicht verwendet, können aber für zusätzliche Netzwerkschnittstellen in der Funktion für mehrere Netzwerkschnittstellen verwendet werden.
Mehrere Netzwerkschnittstellen mit diesen CNI-Plug-ins funktionieren nicht.
Workaround:
Führen Sie ein Upgrade auf die Version mit der Fehlerkorrektur durch, wenn Sie diese Funktion verwenden.
|
update |
1,15, 1,16, 1,28 |
Netapp-trident-Abhängigkeiten beeinträchtigen den vSphere-CSI-Treiber
Bei der Installation von multipathd auf Clusterknoten wird der vSphere-CSI-Treiber beeinträchtigt, was dazu führt, dass Nutzerarbeitslasten nicht gestartet werden können.
Workaround:
|
Updates |
1,15; 1,16 |
Der Webhook des Administratorclusters blockiert möglicherweise Updates, wenn Sie erforderliche Konfigurationen hinzufügen
Wenn einige erforderliche Konfigurationen im Administratorcluster leer sind, da Validierungen übersprungen wurden, wird das Hinzufügen dieser Konfigurationen möglicherweise vom Webhook des Administratorclusters blockiert. Wenn beispielsweise das Feld gkeConnect nicht in einem vorhandenen Administratorcluster festgelegt wurde, kann beim Hinzufügen mit dem Befehl gkectl update admin die folgende Fehlermeldung angezeigt werden:
admission webhook "vonpremadmincluster.onprem.cluster.gke.io" denied the request: connect: Required value: GKE connect is required for user clusters
Workaround:
-
Führen Sie für 1.15-Administratorcluster den Befehl
gkectl update admin mit dem Flag --disable-admin-cluster-webhook aus. Beispiel:
gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig ADMIN_CLUSTER_KUBECONFIG --disable-admin-cluster-webhook
-
Führen Sie für 1.16-Administratorcluster
gkectl update admin -Befehle mit dem Flag --force aus. Beispiel:
gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig ADMIN_CLUSTER_KUBECONFIG --force
|
Konfiguration |
1.15.0–1.15.10, 1.16.0–1.16.6, 1.28.0–1.28.200 |
Das Feld controlPlaneNodePort ist standardmäßig 30968, wenn die manualLB -Spezifikation leer ist
Wenn Sie einen manuellen Load-Balancer verwenden (loadBalancer.kind ist auf "ManualLB" gesetzt), sollten Sie den Abschnitt loadBalancer.manualLB in der Konfigurationsdatei nicht für einen Hochverfügbarkeits-Administratorcluster in den Versionen 1.16 und höher konfigurieren müssen. Wenn dieser Abschnitt jedoch leer ist, weist GKE on VMware allen NodePorts, einschließlich manualLB.controlPlaneNodePort , Standardwerte zu. Dies führt dazu, dass die Clustererstellung mit der folgenden Fehlermeldung fehlschlägt:
- Validation Category: Manual LB
- [FAILURE] NodePort configuration: manualLB.controlPlaneNodePort must
not be set when using HA admin cluster, got: 30968
Workaround:
Geben Sie in der Konfiguration des Administratorclusters manualLB.controlPlaneNodePort: 0 für den Hochverfügbarkeits-Administratorcluster an:
loadBalancer:
...
kind: ManualLB
manualLB:
controlPlaneNodePort: 0
...
|
Speicher |
1.28.0-1.28.100 |
nfs-common fehlt im Ubuntu-Betriebssystem-Image
nfs-common fehlt im Ubuntu-Betriebssystem-Image, was bei Kunden mit NFS-abhängigen Treibern wie NetApp Probleme verursachen kann.
Wenn das Log nach dem Upgrade auf 1.28 einen Eintrag wie den folgenden enthält, sind Sie von diesem Problem betroffen:
Warning FailedMount 63s (x8 over 2m28s) kubelet MountVolume.SetUp failed for volume "pvc-xxx-yyy-zzz" : rpc error: code = Internal desc = error mounting NFS volume 10.0.0.2:/trident_pvc_xxx-yyy-zzz on mountpoint /var/lib/kubelet/pods/aaa-bbb-ccc/volumes/kubernetes.io~csi/pvc-xxx-yyy-zzz/mount: exit status 32".
Workaround:
Prüfen Sie, ob Ihre Knoten Pakete von Canonical herunterladen können.
Wenden Sie als Nächstes das folgende DaemonSet auf Ihren Cluster an, um nfs-common zu installieren:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: install-nfs-common
labels:
name: install-nfs-common
namespace: kube-system
spec:
selector:
matchLabels:
name: install-nfs-common
minReadySeconds: 0
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 100%
template:
metadata:
labels:
name: install-nfs-common
spec:
hostPID: true
hostIPC: true
hostNetwork: true
initContainers:
- name: install-nfs-common
image: ubuntu
imagePullPolicy: IfNotPresent
securityContext:
privileged: true
command:
- chroot
- /host
- bash
- -c
args:
- |
apt install -y nfs-common
volumeMounts:
- name: host
mountPath: /host
containers:
- name: pause
image: gcr.io/gke-on-prem-release/pause-amd64:3.1-gke.5
imagePullPolicy: IfNotPresent
volumes:
- name: host
hostPath:
path: /
|
Speicher |
1.28.0-1.28.100 |
In der Konfigurationsvorlage des Administratorclusters fehlt das Speicherrichtlinienfeld
SPBM in Administratorclustern wird ab Version 1.28.0 unterstützt. In der Vorlage für die Konfigurationsdatei fehlt jedoch das Feld vCenter.storagePolicyName .
Workaround:
Fügen Sie das Feld „vCenter.storagePolicyName“ in die Konfigurationsdatei des Administratorclusters ein, wenn Sie die Speicherrichtlinie für den Administratorcluster konfigurieren möchten. Eine Anleitung dazu instructions.
|
Logging und Monitoring |
1.28.0-1.28.100 |
Die kürzlich hinzugefügte API „kubernetesmetadata.googleapis.com“ unterstützt VPC-SC nicht.
Das führt dazu, dass der Agent, der Metadaten erhebt, diese API unter VPC-SC nicht erreichen kann. Danach fehlen die Metadatenlabels der Messwerte.
Workaround:
Legen Sie im Namespace „kube-system“ die Antwortvorlage „Stackdriver“ fest und setzen Sie das Feld „featureGates.disableExperimentalMetadataAgent“ auf „true“, indem Sie folgenden Befehl ausführen:
`kubectl -n kube-system patch stackdriver stackdriver -p '{"spec":{"featureGates":{"disableExperimentalMetadataAgent":true}}}'`
und dann ausführen
`kubectl -n kube-system patch deployment stackdriver-operator -p '{"spec":{"template":{"spec":{"containers":[{"name":"stackdriver-operator","env":[{"name":"ENABLE_LEGACY_METADATA_AGENT","value":"true"}]}]}}}}'`
|
Upgrades und Updates |
1.15.0–1.15.7, 1.16.0–1.16.4, 1.28.0 |
Der clusterapi-Controller kann abstürzen, wenn der Administratorcluster und ein Nutzercluster mit aktiviertem ControlPlane V2 unterschiedliche vSphere-Anmeldedaten verwenden.
Wenn ein Administratorcluster und ein Nutzercluster mit aktiviertem ControlPlane V2 unterschiedliche vSphere-Anmeldedaten verwenden, z.B. nach dem Aktualisieren der vSphere-Anmeldedaten für den Administratorcluster, kann der clusterapi-Controller nach dem Neustart möglicherweise keine Verbindung zu vCenter herstellen. Log des Clustersapi-Controllers ansehen, der im Namespace „kube-system“ des Administratorclusters ausgeführt wird
kubectl logs -f -l component=clusterapi-controllers -c vsphere-controller-manager \
-n kube-system --kubeconfig KUBECONFIG
Wenn das Log einen Eintrag wie den folgenden enthält, sind Sie von diesem Problem betroffen:
E1214 00:02:54.095668 1 machine_controller.go:165] Error checking existence of machine instance for machine object gke-admin-node-77f48c4f7f-s8wj2: Failed to check if machine gke-admin-node-77f48c4f7f-s8wj2 exists: failed to find datacenter "VSPHERE_DATACENTER": datacenter 'VSPHERE_DATACENTER' not found
Workaround:
Aktualisieren Sie vSphere-Anmeldedaten, damit der Administratorcluster und alle Nutzercluster mit aktiviertem Controlplane V2 dieselben vSphere-Anmeldedaten verwenden.
|
Logging und Monitoring |
1,14 |
etcd: hohe Anzahl fehlgeschlagener GRPC-Anfragen in Prometheus Alert Manager
Prometheus kann Benachrichtigungen ähnlich wie die folgenden melden:
Alert Name: cluster:gke-admin-test1: Etcd cluster kube-system/kube-etcd: 100% of requests for Watch failed on etcd instance etcd-test-xx-n001.
Mit den folgenden Schritten können Sie prüfen, ob diese Benachrichtigung ein falsch positives Ergebnis ist, der ignoriert werden kann:
- Vergleichen Sie den unbearbeiteten Messwert
grpc_server_handled_total mit dem in der Benachrichtigung angegebenen grpc_method . Prüfen Sie in diesem Beispiel das Label grpc_code auf Watch .
Sie können diesen Messwert mithilfe von Cloud Monitoring mit der folgenden MQL-Abfrage prüfen:
fetch
k8s_container | metric 'kubernetes.io/anthos/grpc_server_handled_total' | align rate(1m) | every 1m
- Eine Benachrichtigung für alle Codes außer
OK kann ignoriert werden, wenn der Code nicht einer der folgenden ist:
Unknown|FailedPrecondition|ResourceExhausted|Internal|Unavailable|DataLoss|DeadlineExceeded
Workaround:
Prüfen Sie die folgenden Optionen, um Prometheus so zu konfigurieren, dass diese falsch positiven Benachrichtigungen ignoriert werden:
- Über die Benutzeroberfläche des Benachrichtigungsmanagers können Sie die Benachrichtigung stummschalten.
- Wenn die Benachrichtigung nicht stummgeschaltet werden kann, führen Sie die folgenden Schritte aus, um falsch positive Ergebnisse zu unterdrücken:
- Skalieren Sie den Monitoring-Operator auf
0 -Replikate herunter, damit die Änderungen beibehalten werden können.
- Ändern Sie die
prometheus-config -Configmap und fügen Sie grpc_method!="Watch" der etcdHighNumberOfFailedGRPCRequests -Benachrichtigungskonfiguration hinzu, wie im folgenden Beispiel gezeigt:
- Original:
rate(grpc_server_handled_total{cluster="CLUSTER_NAME",grpc_code!="OK",job=~".*etcd.*"}[5m])
- Geändert:
rate(grpc_server_handled_total{cluster="CLUSTER_NAME",grpc_code=~"Unknown|FailedPrecondition|ResourceExhausted|Internal|Unavailable|DataLoss|DeadlineExceeded",grpc_method!="Watch",job=~".*etcd.*"}[5m])
Ersetzen Sie CLUSTER_NAME durch den Namen Ihres Clusters.
- Starten Sie Prometheus und Alertmanager Statefulset neu, um die neue Konfiguration zu übernehmen.
- Wenn der Code in einen der problematischen Fälle fällt, prüfen Sie das etcd-Log und das
kube-apiserver -Log, um weitere Fehlerbehebungen durchzuführen.
|
Netzwerk |
1.16.0–1.16.2, 1.28.0 |
Langlebige NAT-Verbindungen für ausgehenden Traffic werden getrennt
Ausgehende NAT-Verbindungen können 5 bis 10 Minuten nach dem Aufbau einer Verbindung unterbrochen werden, wenn kein Traffic vorhanden ist.
Da der Conntrack nur in der eingehenden Richtung (externe Verbindungen zum Cluster) wichtig ist, tritt dieses Problem nur auf, wenn die Verbindung eine Zeit lang keine Informationen überträgt und dann die Zielseite etwas überträgt. Wenn der ausgehende NAT-Pod die Nachrichten immer instanziiert, tritt dieses Problem nicht auf.
Dieses Problem tritt auf, weil die automatische Speicherbereinigung versehentlich Conntrack-Einträge entfernt, die der Daemon für ungenutzt hält.
Vor Kurzem wurde eine vorgelagerte Korrektur in anetd integriert, um das Verhalten zu korrigieren.
Workaround:
Es gibt keine einfache Problemumgehung. Wir haben in Version 1.16 keine entsprechenden Probleme festgestellt. Wenn Sie feststellen, dass langlebige Verbindungen aufgrund dieses Problems unterbrochen werden, können Sie das Problem umgehen, indem Sie eine Arbeitslast auf demselben Knoten wie die IP-Adresse des ausgehenden Traffics verwenden oder konsistent Nachrichten über die TCP-Verbindung senden.
|
Vorgang |
1,14, 1,15, 1,16 |
Der CSR-Signer ignoriert spec.expirationSeconds beim Signieren von Zertifikaten
Wenn Sie eine CertificateSigningRequest (CSR) mit expirationSeconds erstellen, wird expirationSeconds ignoriert.
Workaround:
Wenn Sie von diesem Problem betroffen sind, können Sie Ihren Nutzercluster aktualisieren. Fügen Sie dazu disableNodeIDVerificationCSRSigning: true in die Konfigurationsdatei des Nutzerclusters ein und führen Sie den Befehl gkectl update cluster aus, um den Cluster mit dieser Konfiguration zu aktualisieren.
|
Netzwerk, Upgrades und Updates |
1.16.0-1.16.3 |
Die Validierung des Nutzercluster-Load-Balancers für disable_bundled_ingress schlägt fehl
Wenn Sie versuchen, gebündelten eingehenden Traffic für einen vorhandenen Cluster zu deaktivieren, schlägt der Befehl gkectl update cluster mit einem Fehler wie im folgenden Beispiel fehl:
[FAILURE] Config: ingress IP is required in user cluster spec
Dieser Fehler tritt auf, weil gkectl während Preflight-Prüfungen nach einer eingehenden IP-Adresse des Load-Balancers sucht. Obwohl diese Prüfung beim Deaktivieren von gebündeltem eingehenden Traffic nicht erforderlich ist, schlägt die Preflight-Prüfung gkectl fehl, wenn disableBundledIngress auf true gesetzt ist.
Workaround:
Verwenden Sie den Parameter --skip-validation-load-balancer , wenn Sie den Cluster aktualisieren, wie im folgenden Beispiel gezeigt:
gkectl update cluster \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG \
--skip-validation-load-balancer
Weitere Informationen finden Sie unter Gebündelten eingehenden Traffic für einen vorhandenen Cluster deaktivieren.
|
Upgrades und Updates |
1.13, 1.14, 1.15.0–1.15.6 |
Administratorcluster-Updates schlagen nach CA-Rotation fehl
Wenn Sie die CA-Zertifikate des Administratorclusters rotieren, schlagen nachfolgende Versuche, den Befehl gkectl update admin auszuführen, fehl.
Der zurückgegebene Fehler sieht in etwa so aus:
failed to get last CARotationStage: configmaps "ca-rotation-stage" not found
Workaround:
Wenn Sie von diesem Problem betroffen sind, können Sie Ihren Administratorcluster mithilfe des Flags --disable-update-from-checkpoint mit dem Befehl gkectl update admin aktualisieren:
gkectl update admin --config ADMIN_CONFIG_file \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--disable-update-from-checkpoint
Wenn Sie das Flag --disable-update-from-checkpoint verwenden, verwendet der Update-Befehl während der Clusteraktualisierung nicht die Checkpoint-Datei als „Source of Truth“. Die Checkpoint-Datei wird weiterhin für die zukünftige Verwendung aktualisiert.
|
Speicher |
1.15.0–1.15.6, 1.16.0–1.16.2 |
Preflight-Prüfung der CSI-Arbeitslast schlägt aufgrund eines Pod-Startfehlers fehl
Während Preflight-Prüfungen installiert die CSI-Arbeitslastvalidierungsprüfung einen Pod im Namespace default . Der CSI-Arbeitslast-Pod prüft, ob der vSphere-CSI-Treiber installiert ist und dynamische Volume-Bereitstellung ausführen kann. Wenn dieser Pod nicht gestartet wird, schlägt die CSI-Arbeitslastvalidierungsprüfung fehl.
Es gibt einige bekannte Probleme, die verhindern können, dass dieser Pod gestartet wird:
- Wenn für den Pod keine Ressourcenlimits angegeben sind, was bei einigen Clustern mit installierten Zulassungs-Webhooks der Fall ist, wird der Pod nicht gestartet.
- Wenn Anthos Service Mesh im Cluster installiert ist und die automatische Istio-Sidecar-Injektion im Namespace
default aktiviert ist, wird der CSI-Arbeitslast-Pod nicht gestartet.
Wenn der CSI-Arbeitslast-Pod nicht gestartet wird, wird während der Preflight-Validierungen ein Zeitlimitfehler wie der folgende angezeigt:
- [FAILURE] CSI Workload: failure in CSIWorkload validation: failed to create writer Job to verify the write functionality using CSI: Job default/anthos-csi-workload-writer-<run-id> replicas are not in Succeeded phase: timed out waiting for the condition
Prüfen Sie, ob der Fehler durch zu wenige festgelegte Pod-Ressourcen verursacht wird. Führen Sie dazu den folgenden Befehl aus, um den Jobstatus anthos-csi-workload-writer-<run-id> zu prüfen:
kubectl describe job anthos-csi-workload-writer-<run-id>
Wenn die Ressourcenlimits für den CSI-Arbeitslast-Pod nicht ordnungsgemäß festgelegt sind, enthält der Jobstatus eine Fehlermeldung wie die folgende:
CPU and memory resource limits is invalid, as it are not defined for container: volume-tester
Wenn der CSI-Arbeitslast-Pod aufgrund einer Istio-Sidecar-Einfügung nicht gestartet wird, können Sie die automatische Istio-Sidecar-Einfügung im Namespace default vorübergehend deaktivieren. Prüfen Sie die Labels des Namespace und löschen Sie mit dem folgenden Befehl das Label, das mit istio.io/rev beginnt:
kubectl label namespace default istio.io/rev-
Wenn der Pod falsch konfiguriert ist, prüfen Sie manuell, ob die dynamische Bereitstellung von Volumes mit dem vSphere-CSI-Treiber funktioniert:
- Erstellen Sie einen PVC, der die Speicherklasse
standard-rwo verwendet.
- Erstellen Sie einen Pod, der den PVC verwendet.
- Prüfen Sie, ob der Pod Daten auf dem Volume lesen/schreiben kann.
- Entfernen Sie den Pod und den PVC, nachdem Sie den ordnungsgemäßen Betrieb überprüft haben.
Wenn die dynamische Volume-Bereitstellung mit dem vSphere-CSI-Treiber funktioniert, führen Sie gkectl diagnose oder gkectl upgrade mit dem Flag --skip-validation-csi-workload aus, um die CSI-Arbeitslastprüfung zu überspringen.
|
Vorgang |
1.16.0-1.16.2 |
Zeitüberschreitungen für die Aktualisierung von Nutzerclustern bei Administratorclusterversion 1.15
Wenn Sie bei einer
vom Nutzer verwalteten Administratorworkstation angemeldet sind, kann es durch den Befehl gkectl update cluster zu einer Zeitüberschreitung kommen und der Nutzercluster kann nicht aktualisiert werden. Dies geschieht, wenn die Administratorclusterversion 1.15 ist und Sie gkectl update admin vor dem gkectl update cluster ausführen.
Wenn dieser Fehler auftritt, wird der folgende Fehler angezeigt, wenn Sie versuchen, den Cluster zu aktualisieren:
Preflight check failed with failed to run server-side preflight checks: server-side preflight checks failed: timed out waiting for the condition
Preflight check failed with failed to run server-side preflight checks: server-side preflight checks failed: timed out waiting for the condition
Während der Aktualisierung eines Administratorclusters mit Version 1.15 wird die validation-controller , die die Preflight-Prüfungen auslöst, aus dem Cluster entfernt. Wenn Sie dann versuchen, den Nutzercluster zu aktualisieren, bleibt die Preflight-Prüfung, bis das Zeitlimit erreicht ist.
Workaround:
- Führen Sie den folgenden Befehl aus, um
validation-controller noch einmal bereitzustellen:
gkectl prepare --kubeconfig ADMIN_KUBECONFIG --bundle-path BUNDLE_PATH --upgrade-platform
-
Führen Sie nach Abschluss der Vorbereitung
gkectl update cluster noch einmal aus, um den Nutzercluster zu aktualisieren
|
Vorgang |
1.16.0-1.16.2 |
Zeitüberschreitungen beim Erstellen von Nutzerclustern, wenn die Administratorclusterversion 1.15 ist
Wenn Sie bei einer
vom Nutzer verwalteten Administratorworkstation angemeldet sind, kann es durch den Befehl gkectl create cluster zu einer Zeitüberschreitung kommen und der Nutzercluster kann nicht erstellt werden. Dies geschieht, wenn die Version des Administratorclusters 1.15 ist.
Wenn dieser Fehler auftritt, wird beim Erstellen des Clusters der folgende Fehler angezeigt:
Preflight check failed with failed to run server-side preflight checks: server-side preflight checks failed: timed out waiting for the condition
Preflight check failed with failed to run server-side preflight checks: server-side preflight checks failed: timed out waiting for the condition
Da die validation-controller in 1.16 hinzugefügt wurde, fehlt bei Verwendung des 1.15-Administratorclusters die validation-controller , die zum Auslösen der Preflight-Prüfungen verantwortlich ist. Daher bleiben beim Erstellen eines Nutzerclusters die Preflight-Prüfungen hängen, bis das Zeitlimit erreicht ist.
Workaround:
- Führen Sie den folgenden Befehl aus, um
validation-controller bereitzustellen:
gkectl prepare --kubeconfig ADMIN_KUBECONFIG --bundle-path BUNDLE_PATH --upgrade-platform
-
Führen Sie nach Abschluss der Vorbereitung
gkectl create cluster noch einmal aus, um den Nutzercluster zu erstellen
|
Upgrades und Updates |
1.16.0-1.16.2 |
Das Aktualisieren oder Upgrade des Administratorclusters schlägt fehl, wenn die Projekte oder Standorte von Add-on-Diensten nicht übereinstimmen
Wenn Sie einen Administratorcluster von Version 1.15.x auf 1.16.x upgraden oder beim Aktualisieren eines Administratorclusters eine connect -, stackdriver -, cloudAuditLogging - oder gkeOnPremAPI -Konfiguration hinzufügen, wird der Vorgang möglicherweise vom Administratorcluster-Webhook abgelehnt. Eine der folgenden Fehlermeldungen wird angezeigt:
"projects for connect, stackdriver and cloudAuditLogging must be the
same when specified during cluster creation."
"locations for connect, gkeOnPremAPI, stackdriver and
cloudAuditLogging must be in the same region when specified during
cluster creation."
"locations for stackdriver and cloudAuditLogging must be the same
when specified during cluster creation."
Für die Aktualisierung oder das Upgrade eines Administratorclusters muss onprem-admin-cluster-controller den Administratorcluster in einer Art Cluster abgleichen. Wenn der Status des Administratorclusters im Typcluster wiederhergestellt wird, kann der Administratorcluster-Webhook nicht erkennen, ob das Objekt OnPremAdminCluster zum Erstellen eines Administratorclusters vorgesehen ist oder Vorgänge für eine Aktualisierung oder ein Upgrade fortgesetzt werden soll. Einige Validierungen, die nur die Erstellung betreffen, werden bei unerwarteten Aktualisierungen und Upgrades aufgerufen.
Workaround:
Fügen Sie dem Objekt OnPremAdminCluster die Annotation onprem.cluster.gke.io/skip-project-location-sameness-validation: true hinzu:
- Bearbeiten Sie die Clusterressource
onpremadminclusters :
kubectl edit onpremadminclusters ADMIN_CLUSTER_NAME -n kube-system –kubeconfig ADMIN_CLUSTER_KUBECONFIG
Ersetzen Sie Folgendes:
ADMIN_CLUSTER_NAME : der Name des Administratorclusters.
ADMIN_CLUSTER_KUBECONFIG : der Pfad der kubeconfig-Datei des Administratorclusters.
- Fügen Sie die Annotation
onprem.cluster.gke.io/skip-project-location-sameness-validation: true hinzu und speichern Sie die benutzerdefinierte Ressource.
- Führen Sie je nach Typ der Administratorcluster einen der folgenden Schritte aus:
- Für Nicht-HA-Administratorcluster mit einer Checkpoint-Datei:Fügen Sie den Parameter
disable-update-from-checkpoint im Aktualisierungsbefehl oder den Parameter „disable-upgrade-from-checkpoint“ im Upgradebefehl hinzu. Diese Parameter werden nur bei der nächsten Ausführung des Befehls update oder upgrade benötigt:
-
gkectl update admin --config ADMIN_CONFIG_file --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--disable-update-from-checkpoint
-
gkectl upgrade admin --config ADMIN_CONFIG_file --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--disable-upgrade-from-checkpoint
- Für Hochverfügbarkeits-Administratorcluster oder eine Checkpoint-Datei ist deaktiviert: Aktualisieren oder führen Sie ein Upgrade des Administratorclusters wie gewohnt durch. Für die Aktualisierungs- oder Upgradebefehle sind keine zusätzlichen Parameter erforderlich.
|
Vorgang |
1.16.0-1.16.2 |
Der Nutzercluster kann nicht gelöscht werden, wenn eine vom Nutzer verwaltete Administratorworkstation verwendet wird
Wenn Sie bei einer
vom Nutzer verwalteten Administratorworkstation angemeldet sind, kann es durch den Befehl gkectl delete cluster zu einer Zeitüberschreitung kommen und der Nutzercluster kann nicht gelöscht werden. Dies geschieht, wenn Sie gkectl zuerst auf der vom Nutzer verwalteten Workstation ausgeführt haben, um den Nutzercluster zu erstellen, zu aktualisieren oder zu aktualisieren. Wenn dieser Fehler auftritt, wird beim Löschen des Clusters der folgende Fehler angezeigt:
failed to wait for user cluster management namespace "USER_CLUSTER_NAME-gke-onprem-mgmt"
to be deleted: timed out waiting for the condition
Während des Löschens werden zuerst alle zugehörigen Objekte eines Clusters gelöscht. Das Löschen der Validierungsobjekte, die beim Erstellen, Aktualisieren oder Upgraden erstellt wurden, bleibt in der Löschphase. Dies geschieht, da ein Finaler das Löschen des Objekts blockiert, wodurch das Löschen des Clusters fehlschlägt.
Workaround:
- Rufen Sie die Namen aller Validierungsobjekte ab:
kubectl --kubeconfig ADMIN_KUBECONFIG get validations \
-n USER_CLUSTER_NAME-gke-onprem-mgmt
-
Führen Sie für jedes Validierungsobjekt den folgenden Befehl aus, um den Finalizer aus dem Validierungsobjekt zu entfernen:
kubectl --kubeconfig ADMIN_KUBECONFIG patch validation/VALIDATION_OBJECT_NAME \
-n USER_CLUSTER_NAME-gke-onprem-mgmt -p '{"metadata":{"finalizers":[]}}' --type=merge
Nachdem der Finalizer aus allen Validierungsobjekten entfernt wurde, werden die Objekte entfernt und der Löschvorgang des Nutzerclusters automatisch abgeschlossen. Sie müssen nichts weiter tun.
|
Netzwerk |
1,15; 1,16 |
Ausgehender NAT-Gateway-Traffic zu externem Server schlägt fehl
Wenn sich der Quell-Pod und der Ausgangs-NAT-Gateway-Pod auf zwei verschiedenen Worker-Knoten befinden, kann der Traffic vom Quell-Pod keine externen Dienste erreichen. Wenn sich die Pods auf demselben Host befinden, ist die Verbindung zum externen Dienst oder zur externen Anwendung erfolgreich.
Dieses Problem wird dadurch verursacht, dass vSphere VXLAN-Pakete löscht, wenn die Tunnelaggregation aktiviert ist. Es gibt ein bekanntes Problem mit NSX und VMware, das aggregierten Traffic nur über bekannte VXLAN-Ports (4789) sendet.
Workaround:
Ändern Sie den von Cilium verwendeten VXLAN-Port zu 4789 :
- Bearbeiten Sie die ConfigMap
cilium-config :
kubectl edit cm -n kube-system cilium-config --kubeconfig USER_CLUSTER_KUBECONFIG
- Fügen Sie der ConfigMap
cilium-config Folgendes hinzu:
tunnel-port: 4789
- Starten Sie das anetd-DaemonSet neu:
kubectl rollout restart ds anetd -n kube-system --kubeconfig USER_CLUSTER_KUBECONFIG
Diese Problemumgehung wird bei jedem Upgrade des Clusters rückgängig gemacht. Sie müssen sie nach jedem Upgrade neu konfigurieren. VMware muss das Problem in vSphere beheben, um es dauerhaft zu beheben.
|
Upgrades |
1.15.0-1.15.4 |
Das Upgrade eines Administratorclusters mit aktivierter Always-on-Secret-Verschlüsselung schlägt fehl
Das Upgrade des Administratorclusters von 1.14.x auf 1.15.x mit aktivierter Always-On-Secret-Verschlüsselung schlägt aufgrund einer Diskrepanz zwischen dem Controller-generierten Verschlüsselungsschlüssel und dem Schlüssel, der auf dem Administrator-Master-Datenlaufwerk bestehen bleibt, fehl. Die Ausgabe von gkectl upgrade
admin enthält die folgende Fehlermeldung:
E0926 14:42:21.796444 40110 console.go:93] Exit with error:
E0926 14:42:21.796491 40110 console.go:93] Failed to upgrade the admin cluster: failed to create admin cluster: failed to wait for OnPremAdminCluster "admin-cluster-name" to become ready: failed to wait for OnPremAdminCluster "admin-cluster-name" to be ready: error: timed out waiting for the condition, message: failed to wait for OnPremAdminCluster "admin-cluster-name" to stay in ready status for duration "2m0s": OnPremAdminCluster "non-prod-admin" is not ready: ready condition is not true: CreateOrUpdateControlPlane: Creating or updating credentials for cluster control plane
Die Ausführung von kubectl get secrets -A --kubeconfig KUBECONFIG` schlägt mit folgendem Fehler fehl:
Internal error occurred: unable to transform key "/registry/secrets/anthos-identity-service/ais-secret": rpc error: code = Internal desc = failed to decrypt: unknown jwk
Problemumgehung
Wenn Sie eine Sicherung des Administratorclusters haben, führen Sie die folgenden Schritte aus, um den Upgradefehler zu umgehen:
-
Deaktivieren Sie
secretsEncryption in der Konfigurationsdatei des Administratorclusters und aktualisieren Sie den Cluster mit dem folgenden Befehl:
gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig KUBECONFIG
-
Nachdem die neue Administrator-Master-VM erstellt wurde, stellen Sie eine SSH-Verbindung zur Administrator-Master-VM her und ersetzen Sie den neuen Schlüssel auf dem Datenlaufwerk durch den alten Schlüssel aus der Sicherung. Der Schlüssel befindet sich im Administrator-Master unter
/opt/data/gke-k8s-kms-plugin/generatedkeys .
-
Aktualisieren Sie das statische Pod-Manifest kms-plugin.yaml in
/etc/kubernetes/manifests , um --kek-id so zu aktualisieren, dass es mit dem Feld kid im ursprünglichen Verschlüsselungsschlüssel übereinstimmt.
-
Starten Sie den statischen Pod „kms-plugin“ neu. Verschieben Sie dazu
/etc/kubernetes/manifests/kms-plugin.yaml in ein anderes Verzeichnis und dann zurück.
-
Setzen Sie das Administratorupgrade fort, indem Sie
gkectl upgrade admin noch einmal ausführen.
Upgradefehler verhindern
Wenn Sie noch kein Upgrade auf 1.15.0-1.15.4 durchgeführt haben, empfehlen wir Ihnen, kein Upgrade durchzuführen. Wenn Sie ein Upgrade auf eine betroffene Version durchführen müssen, führen Sie die folgenden Schritte aus, bevor Sie den Administratorcluster upgraden:
-
Administratorcluster sichern
-
Deaktivieren Sie
secretsEncryption in der Konfigurationsdatei des Administratorclusters und aktualisieren Sie den Cluster mit dem folgenden Befehl:
gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig KUBECONFIG
- Führen Sie ein Upgrade des Administratorclusters durch.
-
Aktivieren Sie die Always-on-Secret-Verschlüsselung wieder.
|
Speicher |
1.11.–1.16. |
Laufwerkfehler und Fehler beim Anhängen, wenn Changed Block Tracking (CBT) verwendet wird
GKE on VMware unterstützt Changed Block Tracking (CBT) auf Laufwerken nicht. Einige Sicherungssoftware verwendet das CBT-Feature, um den Laufwerkstatus zu verfolgen und Sicherungen durchzuführen. Dadurch kann das Laufwerk keine Verbindung zu einer VM herstellen, auf der GKE on VMware ausgeführt wird. Weitere Informationen finden Sie im VMware-KB-Artikel.
Workaround:
Sichern Sie keine GKE on VMware-VMs, da die Sicherungssoftware von Drittanbietern dazu führen kann, dass CBT auf ihren Laufwerken aktiviert wird. Es ist nicht erforderlich, diese VMs zu sichern.
Aktivieren Sie CBT auf dem Knoten nicht, da diese Änderung bei Updates oder Upgrades nicht erhalten bleibt.
Wenn Sie bereits Laufwerke mit aktiviertem CBT haben, folgen Sie den Lösungsschritten im VMware-KB-Artikel, um CBT auf dem First Class-Laufwerk zu deaktivieren.
|
Speicher |
1,14, 1,15, 1,16 |
Datenbeschädigung unter NFSv3, wenn parallele Anfügungen an eine freigegebene Datei von mehreren Hosts aus ausgeführt werden
Wenn Sie Nutanix-Speicherarrays verwenden, um Ihren Hosts NFSv3-Freigaben bereitzustellen, können Daten beschädigt werden oder Pods können nicht erfolgreich ausgeführt werden. Dieses Problem wird durch ein bekanntes Kompatibilitätsproblem zwischen bestimmten VMware- und Nutanix-Versionen verursacht. Weitere Informationen finden Sie im zugehörigen VMware-KB-Artikel.
Workaround:
Der VMware-KB-Artikel ist veraltet und weist darauf hin, dass keine aktuelle Lösung verfügbar ist. Aktualisieren Sie auf Ihren Hosts auf die neueste ESXi-Version und in Ihren Speicherarrays auf die neueste Nutanix-Version, um dieses Problem zu beheben.
|
Betriebssystem |
1.13.10, 1.14.6, 1.15.3 |
Versionsabweichung zwischen Kubelet und der Kubernetes-Steuerungsebene
Bei bestimmten GKE on VMware-Releases verwendet das auf den Knoten ausgeführte Kubelet eine andere Version als die Kubernetes-Steuerungsebene. Es gibt eine Abweichung, da die auf das Betriebssystem-Image vorinstallierte kubelet-Binärdatei eine andere Version verwendet.
In der folgenden Tabelle sind die erkannten nicht übereinstimmenden Versionen aufgeführt:
GKE on VMware-Version |
Kubelet-Version |
Kubernetes-Version |
1.13.10 |
Version 1.24.11-gke.1200 |
Version 1.24.14-gke.2100 |
1.14.6 |
Version 1.25.8-gke.1500 |
Version 1.25.10-gke.1200 |
1.15.3 |
Version 1.26.2-gke.1001 |
Version 1.26.5-gke.2100 |
Workaround:
Sie müssen nichts tun. Die Inkonsistenz tritt nur zwischen den Kubernetes-Patchversionen auf und es wurden keine Probleme durch diese Versionsabweichung verursacht.
|
Upgrades und Updates |
1.15.0-1.15.4 |
Das Upgrade oder Aktualisieren eines Administratorclusters mit einer CA-Version höher als 1 schlägt fehl
Wenn ein Administratorcluster eine Version der Zertifizierungsstelle (Certificate Authority, CA) höher als 1 hat, schlägt eine Aktualisierung oder ein Upgrade aufgrund der CA-Versionsprüfung im Webhook fehl. Die Ausgabe des Upgrades/Updates von gkectl enthält die folgende Fehlermeldung:
CAVersion must start from 1
Workaround:
-
Skalieren Sie das Deployment
auto-resize-controller im Administratorcluster herunter, um die automatische Größenanpassung von Knoten zu deaktivieren. Dies ist erforderlich, da ein neues Feld, das in 1.15 für die benutzerdefinierte Ressource des Administratorclusters eingeführt wurde, einen NULL-Zeiger-Fehler in auto-resize-controller verursachen kann.
kubectl scale deployment auto-resize-controller -n kube-system --replicas=0 --kubeconfig KUBECONFIG
-
Führen Sie
gkectl -Befehle mit dem Flag --disable-admin-cluster-webhook aus.Beispiel:
gkectl upgrade admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig KUBECONFIG --disable-admin-cluster-webhook
|
Vorgang |
1.13, 1.14.0–1.14.8, 1.15.0–1.15.4, 1.16.0–1.16.1 |
Löschen des Clusters der V2-Steuerungsebene ohne Hochverfügbarkeit bleibt bis zum Zeitlimit hängen
Wenn ein V2-Cluster der Steuerungsebene ohne Hochverfügbarkeit gelöscht wird, bleibt er beim Löschen des Knotens hängen, bis eine Zeitüberschreitung auftritt.
Workaround:
Wenn der Cluster ein StatefulSet mit kritischen Daten enthält, wenden Sie sich an Cloud Customer Care, um das Problem zu beheben.
Andernfalls gehen Sie so vor:
|
Speicher |
1.15.0+, 1.16.0+ |
Nach dem Upgrade auf Version 1.15 oder höher werden für integrierte PVC/PV-Aufgaben konstante CNS-AttachVolume-Aufgaben pro Minute angezeigt
Wenn ein Cluster integrierte nichtflüchtige vSphere-Volumes enthält (z. B. PVCs, die mit der Speicherklasse standard erstellt wurden), beobachten Sie com.vmware.cns.tasks.attachvolume-Aufgaben, die jede Minute von vCenter ausgelöst werden.
Workaround:
Bearbeiten Sie die configMap für das vSphere-CSI-Feature und setzen Sie list-volumes auf „false“:
kubectl edit configmap internal-feature-states.csi.vsphere.vmware.com -n kube-system --kubeconfig KUBECONFIG
Starten Sie die vSphere CSI-Controller-Pods neu:
kubectl rollout restart vsphere-csi-controller -n kube-system --kubeconfig KUBECONFIG
|
Speicher |
1.16.0 |
Falsche Warnungen gegen PVCs
Wenn ein Cluster integrierte nichtflüchtige vSphere-Volumes enthält, können die Befehle gkectl diagnose und gkectl upgrade beim Validieren der Clusterspeichereinstellungen falsche Warnungen zu ihren Anforderungen an nichtflüchtige Volumes (Persistent Volume Claims, PVCs) ausgeben. Die Warnmeldung sieht in etwa so aus:
CSIPrerequisites pvc/pvc-name: PersistentVolumeClaim pvc-name bounds to an in-tree vSphere volume created before CSI migration enabled, but it doesn't have the annotation pv.kubernetes.io/migrated-to set to csi.vsphere.vmware.com after CSI migration is enabled
Workaround:
Führen Sie den folgenden Befehl aus, um die Annotationen eines PVC mit der obigen Warnung zu prüfen:
kubectl get pvc PVC_NAME -n PVC_NAMESPACE -oyaml --kubeconfig KUBECONFIG
Wenn das Feld annotations in der Ausgabe Folgendes enthält, können Sie die Warnung ignorieren:
pv.kubernetes.io/bind-completed: "yes"
pv.kubernetes.io/bound-by-controller: "yes"
volume.beta.kubernetes.io/storage-provisioner: csi.vsphere.vmware.com
|
Upgrades und Updates |
1.15.0+, 1.16.0+ |
Die Rotation des Dienstkontoschlüssels schlägt fehl, wenn mehrere Schlüssel abgelaufen sind
Wenn Ihr Cluster keine private Registry verwendet und der Dienstkontoschlüssel für den Komponentenzugriff sowie die Dienstkontoschlüssel für Logging-Monitoring (oder Connect-Register) abgelaufen sind, schlägt gkectl update credentials beim Rotieren der Dienstkontoschlüssel mit einem Fehler wie dem folgenden fehl:
Error: reconciliation failed: failed to update platform: ...
Workaround:
Rotieren Sie zuerst den Dienstkontoschlüssel für den Komponentenzugriff. Obwohl die gleiche Fehlermeldung angezeigt wird, sollten Sie die anderen Schlüssel nach der Rotation des Dienstkontoschlüssels für den Komponentenzugriff rotieren können.
Wenn das Update weiterhin nicht erfolgreich ist, wenden Sie sich an Cloud Customer Care, um das Problem zu beheben.
|
Upgrades |
1.16.0-1.16.5 |
1.15 Beim Upgrade des Nutzercluster-Controllers auf 1.16 kommt es zu einer unerwarteten Neuerstellung der Nutzermastermaschine
Wenn während eines Nutzerclusterupgrades ein Upgrade des Nutzerclustercontrollers auf 1.16 durchgeführt wurde und Sie weitere 1, 15 Nutzercluster haben, die vom selben Administratorcluster verwaltet werden, wird deren Nutzermastercomputer möglicherweise unerwartet neu erstellt.
Im Nutzercluster-Controller der Version 1.16 liegt ein Fehler vor, der die Neuerstellung der Nutzermaster-Maschine in Version 1.15 auslösen kann.
Die Problemumgehung hängt davon ab, wie das Problem auftritt.
Problemumgehung beim Upgrade des Nutzerclusters über die Google Cloud Console:
Option 1: Verwenden Sie Version 1.16.6 oder höher von GKE on VMware mit der Lösung.
Option 2: Gehen Sie so vor:
- Fügen Sie die Annotation für die erneute Ausführung mit dem folgenden Befehl manuell hinzu:
kubectl edit onpremuserclusters USER_CLUSTER_NAME -n USER_CLUSTER_NAME-gke-onprem-mgmt --kubeconfig ADMIN_KUBECONFIG
Die Annotation für die erneute Ausführung lautet:
onprem.cluster.gke.io/server-side-preflight-rerun: true
- Überwachen Sie den Upgradefortschritt, indem Sie das Feld
status des OnPremUserClusters anklicken.
Problemumgehung beim Upgrade des Nutzerclusters mit Ihrer eigenen Administratorworkstation:
Option 1: Verwenden Sie Version 1.16.6 oder höher von GKE on VMware mit der Lösung.
Option 2: Gehen Sie so vor:
- Fügen Sie die Build-Infodatei
/etc/cloud/build.info mit dem folgenden Inhalt hinzu. Dadurch werden die Preflight-Prüfungen lokal auf Ihrer Administratorworkstation und nicht auf dem Server ausgeführt.
gke_on_prem_version: GKE_ON_PREM_VERSION
Beispiel:
gke_on_prem_version: 1.16.0-gke.669
- Führen Sie den Upgradebefehl noch einmal aus.
- Löschen Sie nach Abschluss des Upgrades die Datei „build.info“.
|
Erstellen |
1.16.0–1.16.5, 1.28.0–1.28.100 |
Die Preflight-Prüfung schlägt fehl, wenn der Hostname nicht in der IP-Blockdatei enthalten ist.
Wenn Sie bei der Clustererstellung nicht für jede IP-Adresse in der IP-Blockdatei einen Hostnamen angeben, schlägt die Preflight-Prüfung fehl und die folgende Fehlermeldung wird angezeigt:
multiple VMs found by DNS name in xxx datacenter. Anthos Onprem doesn't support duplicate hostname in the same vCenter and you may want to rename/delete the existing VM.`
Die Preflight-Prüfung enthält einen Fehler, der einen leeren Hostnamen als Duplikat voraussetzt.
Workaround:
Option 1: Version mit der Korrektur verwenden
Option 2: Sie können diese Preflight-Prüfung umgehen, indem Sie das Flag --skip-validation-net-config hinzufügen.
Option 3: Geben Sie für jede IP-Adresse in der IP-Blockdatei einen eindeutigen Hostnamen an.
|
Upgrades und Updates |
1.16 |
Volume-Bereitstellungsfehler beim Upgrade/Aktualisieren des Administratorclusters, wenn der Administratorcluster ohne Hochverfügbarkeit und der v1-Nutzercluster der Steuerungsebene verwendet wird
Wenn Sie bei einem Administratorcluster ohne Hochverfügbarkeit und einem v1-Nutzercluster der Steuerungsebene ein Upgrade oder eine Aktualisierung des Administratorclusters durchführen, kann die Wiederherstellung des Administratorclusters der Mastermaschine gleichzeitig mit dem Neustart der Mastermaschine des Nutzerclusters erfolgen, was zu einer Race-Bedingung führen kann.
Dies führt dazu, dass die Pods der Nutzercluster-Steuerungsebene nicht mit der Steuerungsebene des Administratorclusters kommunizieren können. Dies führt zu Problemen beim Anhängen von Volumes für „kube-etcd“ und „kube-apiserver“ auf der Steuerungsebene des Nutzerclusters.
Führen Sie die folgenden Befehle für den betroffenen Pod aus, um das Problem zu prüfen:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace USER_CLUSTER_NAME describe pod IMPACTED_POD_NAME
Daraufhin werden folgende Ereignisse angezeigt:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedMount 101s kubelet Unable to attach or mount volumes: unmounted volumes=[kube-audit], unattached volumes=[], failed to process volumes=[]: timed out waiting for the condition
Warning FailedMount 86s (x2 over 3m28s) kubelet MountVolume.SetUp failed for volume "pvc-77cd0635-57c2-4392-b191-463a45c503cb" : rpc error: code = FailedPrecondition desc = volume ID: "bd313c62-d29b-4ecd-aeda-216648b0f7dc" does not appear staged to "/var/lib/kubelet/plugins/kubernetes.io/csi/csi.vsphere.vmware.com/92435c96eca83817e70ceb8ab994707257059734826fedf0c0228db6a1929024/globalmount"
Workaround:
-
Stellen Sie eine SSH-Verbindung zu einem Knoten der Nutzersteuerungsebene her. Da es sich um einen v1-Nutzercluster der Steuerungsebene handelt, befindet sich der Knoten der Nutzersteuerungsebene im Administratorcluster.
-
Starten Sie das Kubelet mit dem folgenden Befehl neu:
sudo systemctl restart kubelet
Nach dem Neustart kann das Kubelet die globale Bereitstellung der Phase korrekt rekonstruieren.
|
Upgrades und Updates |
1.16.0 |
Knoten der Steuerungsebene kann nicht erstellt werden
Während eines Upgrades oder einer Aktualisierung eines Administratorclusters kann eine Race-Bedingung dazu führen, dass der vSphere Cloud Controller-Manager unerwartet einen neuen Knoten der Steuerungsebene löscht. Dies führt dazu, dass der clusterapi-Controller beim Erstellen des Knotens hängen bleibt und sogar beim Upgrade/Update eine Zeitüberschreitung auftritt. In diesem Fall sieht die Ausgabe des gkectl -Befehls „upgrade/update“ in etwa so aus:
controlplane 'default/gke-admin-hfzdg' is not ready: condition "Ready": condition is not ready with reason "MachineInitializing", message "Wait for the control plane machine "gke-admin-hfzdg-6598459f9zb647c8-0\" to be rebooted"...
Um das Symptom zu identifizieren, führen Sie den folgenden Befehl aus, um das Protokoll im vSphere Cloud Controller Manager im Administratorcluster abzurufen:
kubectl get pods --kubeconfig ADMIN_KUBECONFIG -n kube-system | grep vsphere-cloud-controller-manager
kubectl logs -f vsphere-cloud-controller-manager-POD_NAME_SUFFIX --kubeconfig ADMIN_KUBECONFIG -n kube-system
Hier ist ein Beispiel für eine Fehlermeldung des obigen Befehls:
node name: 81ff17e25ec6-qual-335-1500f723 has a different uuid. Skip deleting this node from cache.
Workaround:
-
Starten Sie die fehlgeschlagene Maschine neu, um das gelöschte Knotenobjekt neu zu erstellen.
-
Stellen Sie eine SSH-Verbindung zu jedem Knoten der Steuerungsebene her und starten Sie den statischen Pod des vSphere Cloud-Controller-Managers neu:
sudo crictl ps | grep vsphere-cloud-controller-manager | awk '{print $1}'
sudo crictl stop PREVIOUS_COMMAND_OUTPUT
-
Upgrade-/Aktualisierungsbefehl noch einmal ausführen.
|
Vorgang |
1.16 |
Doppelter Hostname im selben Rechenzentrum führt zu Fehlern beim Upgrade- oder Erstellen von Clustern
Ein Upgrade eines 1.15-Clusters oder eines 1.16-Clusters mit statischen IP-Adressen schlägt fehl, wenn im selben Rechenzentrum doppelte Hostnamen vorhanden sind. Dieser Fehler tritt auf, weil der vSphere Cloud Controller-Manager dem Knotenobjekt keine externe IP-Adresse und Anbieter-ID hinzufügen kann. Dies führt zu einer Zeitüberschreitung beim Upgrade/Erstellen des Clusters.
Um das Problem zu identifizieren, rufen Sie die Pod-Logs des vSphere Cloud Controller Managers für den Cluster ab. Der verwendete Befehl hängt wie folgt vom Clustertyp ab:
- Administratorcluster:
kubectl get pods --kubeconfig ADMIN_KUBECONFIG -n kube-system | grep vsphere-cloud-controller-manager
kubectl logs -f vsphere-cloud-controller-manager-POD_NAME_SUFFIX --kubeconfig ADMIN_KUBECONFIG -n kube-system
- Nutzercluster (kubeception):
kubectl get pods --kubeconfig ADMIN_KUBECONFIG -n USER_CLUSTER_NAME | grep vsphere-cloud-controller-manager
kubectl logs -f vsphere-cloud-controller-manager-POD_NAME_SUFFIX --kubeconfig ADMIN_KUBECONFIG -n USER_CLUSTER_NAME
- Nutzercluster: (Controlplane V2):
kubectl get pods --kubeconfig USER_KUBECONFIG -n kube-system | grep vsphere-cloud-controller-manager
kubectl logs -f vsphere-cloud-controller-manager-POD_NAME_SUFFIX --kubeconfig USER_KUBECONFIG -n kube-system
Hier ist ein Beispiel für eine Fehlermeldung:
I1003 17:17:46.769676 1 search.go:152] Finding node admin-vm-2 in vc=vcsa-53598.e5c235a1.asia-northeast1.gve.goog and datacenter=Datacenter
E1003 17:17:46.771717 1 datacenter.go:111] Multiple vms found VM by DNS Name. DNS Name: admin-vm-2
Prüfen Sie, ob der Hostname im Rechenzentrum doppelt vorhanden ist:
Mit dem folgenden Ansatz können Sie prüfen, ob der Hostname doppelt vorhanden ist, und bei Bedarf eine Problemumgehung anwenden.
export GOVC_DATACENTER=GOVC_DATACENTER
export GOVC_URL=GOVC_URL
export GOVC_USERNAME=GOVC_USERNAME
export GOVC_PASSWORD=GOVC_PASSWORD
export GOVC_INSECURE=true
govc find . -type m -guest.hostName HOSTNAME
Beispielbefehle und -ausgabe:
export GOVC_DATACENTER=mtv-lifecycle-vc01
export GOVC_URL=https://mtv-lifecycle-vc01.anthos/sdk
export GOVC_USERNAME=xxx
export GOVC_PASSWORD=yyy
export GOVC_INSECURE=true
govc find . -type m -guest.hostName f8c3cd333432-lifecycle-337-xxxxxxxz
./vm/gke-admin-node-6b7788cd76-wkt8g
./vm/gke-admin-node-6b7788cd76-99sg2
./vm/gke-admin-master-5m2jb
Die Problemumgehung hängt davon ab, welcher Vorgang fehlgeschlagen ist.
Problemumgehung für Upgrades:
Führen Sie die Problemumgehung für den entsprechenden Clustertyp aus.
- Nutzercluster:
-
Aktualisieren Sie den Hostnamen des betroffenen Computers in user-ip-block.yaml auf einen eindeutigen Namen und lösen Sie ein erzwungenes Update aus:
gkectl update cluster --kubeconfig ADMIN_KUBECONFIG --config NEW_USER_CLUSTER_CONFIG --force
-
gkectl upgrade cluster noch einmal ausführen
- Administratorcluster:
- Ändern Sie den Hostnamen des betroffenen Computers in „admin-ip-block.yaml“ in einen eindeutigen Namen und lösen Sie ein erzwungenes Update aus:
gkectl update admin --kubeconfig ADMIN_KUBECONFIG --config NEW_ADMIN_CLUSTER_CONFIG --force --skip-cluster-ready-check
- Wenn es sich um einen Administratorcluster ohne Hochverfügbarkeit handelt und Sie feststellen, dass die Administrator-Master-VM doppelten Hostnamen verwendet, müssen Sie außerdem Folgendes tun:
Name der Administrator-Master-Maschine abrufen
kubectl get machine --kubeconfig ADMIN_KUBECONFIG -owide -A
Administrator-Master-Maschinenobjekt aktualisieren
Hinweis: Der NEW_ADMIN_MASTER_HOSTNAME sollte mit den Angaben in der Datei "admin-ip-block.yaml" in Schritt 1 übereinstimmen.
kubectl patch machine ADMIN_MASTER_MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG --type='json' -p '[{"op": "replace", "path": "/spec/providerSpec/value/networkSpec/address/hostname", "value":"NEW_ADMIN_MASTER_HOSTNAME"}]'
Prüfen Sie, ob der Hostname im Administrator-Master-Maschinenobjekt aktualisiert wurde:
kubectl get machine ADMIN_MASTER_MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG -oyaml
kubectl get machine ADMIN_MASTER_MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG -o jsonpath='{.spec.providerSpec.value.networkSpec.address.hostname}'
- Upgrade des Administratorclusters noch einmal mit deaktiviertem Prüfpunkt ausführen:
gkectl upgrade admin --kubeconfig ADMIN_KUBECONFIG --config ADMIN_CLUSTER_CONFIG --disable-upgrade-from-checkpoint
Problemumgehung bei Installationen:
Führen Sie die Problemumgehung für den entsprechenden Clustertyp aus.
|
Vorgang |
1.16.0, 1.16.1, 1.16.2, 1.16.3 |
$ und ` werden im vSphere-Nutzernamen oder ‐Passwort nicht unterstützt
Die folgenden Vorgänge schlagen fehl, wenn der vSphere-Nutzername oder das Passwort $ oder ` enthält:
- Upgrade eines Nutzerclusters von 1.15 mit aktiviertem Controlplane V2 auf 1.16 durchführen
- Upgrade eines Hochverfügbarkeits-Administratorclusters mit 1.15 auf 1.16 wird durchgeführt
- Nutzercluster der Version 1.16 mit aktiviertem Controlplane V2 erstellen
- 1,16-HA-Administratorcluster erstellen
Verwenden Sie mindestens Version 1.16.4 von GKE on VMware mit der Fehlerbehebung oder führen Sie die folgende Problemumgehung durch. Die Problemumgehung hängt davon ab, welcher Vorgang fehlgeschlagen ist.
Problemumgehung für Upgrades:
- Ändern Sie den vCenter-Nutzernamen oder das vCenter-Passwort auf der vCenter-Seite, um
$ und ` zu entfernen.
- Aktualisieren Sie den vCenter-Nutzernamen oder das Passwort in der Konfigurationsdatei für Anmeldedaten.
- Erzwungene Aktualisierung des Clusters auslösen.
- Nutzercluster:
gkectl update cluster --kubeconfig ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG --force
- Administratorcluster:
gkectl update admin --kubeconfig ADMIN_KUBECONFIG --config ADMIN_CLUSTER_CONFIG --force --skip-cluster-ready-check
Problemumgehung bei Installationen:
- Ändern Sie den vCenter-Nutzernamen oder das vCenter-Passwort auf der vCenter-Seite, um
$ und ` zu entfernen.
- Aktualisieren Sie den vCenter-Nutzernamen oder das Passwort in der Konfigurationsdatei für Anmeldedaten.
- Führen Sie die Problemumgehung für den entsprechenden Clustertyp aus.
|
Speicher |
1.11+, 1.12+, 1.13+, 1.14+, 1.15+, 1.16 |
Fehler bei der PVC-Erstellung, nachdem der Knoten mit demselben Namen neu erstellt wurde
Nachdem ein Knoten gelöscht und dann mit demselben Knotennamen neu erstellt wurde, besteht die geringe Wahrscheinlichkeit, dass eine nachfolgende PVC-Erstellung (VolumeClaim) mit einem Fehler wie dem folgenden fehlschlägt:
The object 'vim.VirtualMachine:vm-988369' has already been deleted or has not been completely created
Dies wird durch eine Race-Bedingung verursacht, in der der vSphere CSI-Controller eine entfernte Maschine nicht aus dem Cache löscht.
Workaround:
Starten Sie die vSphere CSI-Controller-Pods neu:
kubectl rollout restart vsphere-csi-controller -n kube-system --kubeconfig KUBECONFIG
|
Vorgang |
1.16.0 |
gkectl-Reparatur-admin-master gibt kubeconfig-Unmarshall-Fehler zurück
Wenn Sie den Befehl gkectl repair admin-master in einem Administratorcluster mit Hochverfügbarkeit ausführen, gibt gkectl die folgende Fehlermeldung zurück:
Exit with error: Failed to repair: failed to select the template: failed to get cluster name from kubeconfig, please contact Google support. failed to decode kubeconfig data: yaml: unmarshal errors:
line 3: cannot unmarshal !!seq into map[string]*api.Cluster
line 8: cannot unmarshal !!seq into map[string]*api.Context
Workaround:
Fügen Sie dem Befehl das Flag --admin-master-vm-template= hinzu und geben Sie die VM-Vorlage der zu reparierenden Maschine an:
gkectl repair admin-master --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
--config ADMIN_CLUSTER_CONFIG_FILE \
--admin-master-vm-template=/DATA_CENTER/vm/VM_TEMPLATE_NAME
So finden Sie die VM-Vorlage der Maschine:
- Rufen Sie im vSphere-Client die Seite Hosts und Cluster auf.
- Klicken Sie auf VM-Vorlagen und filtern Sie nach dem Namen des Administratorclusters.
Sie sollten die drei VM-Vorlagen für den Administratorcluster sehen.
- Kopieren Sie den Namen der VM-Vorlage, der dem Namen der zu reparierenden Maschine entspricht, und verwenden Sie den Vorlagennamen im Reparaturbefehl.
gkectl repair admin-master \
--config=/home/ubuntu/admin-cluster.yaml \
--kubeconfig=/home/ubuntu/kubeconfig \
--admin-master-vm-template=/atl-qual-vc07/vm/gke-admin-98g94-zx...7vx-0-tmpl
|
Netzwerk |
1.10.0+, 1.11.0+, 1.12.0+, 1.13.0+, 1.14.0–1.14.7, 1.15.0–1.15.3, 1.16.0 |
Seesaw-VM aufgrund von wenig Speicherplatz fehlerhaft
Wenn Sie Seesaw als Load-Balancer-Typ für Ihren Cluster verwenden und feststellen, dass eine Seesaw-VM nicht verfügbar ist oder weiterhin nicht gestartet werden kann, wird möglicherweise die folgende Fehlermeldung in der vSphere-Konsole angezeigt:
GRUB_FORCE_PARTUUID set, initrdless boot failed. Attempting with initrd
Dieser Fehler weist darauf hin, dass nur noch wenig Speicherplatz auf der VM verfügbar ist, da das auf der Seesaw-VM ausgeführte fließende Bit nicht mit der richtigen Logrotation konfiguriert ist.
Workaround:
Suchen Sie mit du -sh -- /var/lib/docker/containers/* | sort -rh nach den Protokolldateien, die den meisten Speicherplatz belegen. Bereinigen Sie die Logdatei mit der größten Größe und starten Sie die VM neu.
Hinweis:Wenn auf die VM nicht zugegriffen werden kann, hängen Sie das Laufwerk an eine funktionierende VM an (z.B. Administratorworkstation), entfernen Sie die Datei vom angehängten Laufwerk und hängen Sie das Laufwerk wieder an die ursprüngliche Seesaw-VM an.
Damit das Problem nicht noch einmal auftritt, stellen Sie eine Verbindung zur VM her und ändern die Datei /etc/systemd/system/docker.fluent-bit.service . Fügen Sie im Docker-Befehl --log-opt max-size=10m --log-opt max-file=5 hinzu und führen Sie dann systemctl restart docker.fluent-bit.service aus
|
Vorgang |
1.13; 1.14.0–1.14.6, 1.15 |
Fehler beim öffentlichen SSH-Schlüssel des Administrators nach Upgrade oder Update des Administratorclusters
Wenn Sie versuchen, einen Administratorcluster ohne Hochverfügbarkeit mit aktiviertem Checkpoint zu aktualisieren (gkectl upgrade admin ) oder zu aktualisieren (gkectl update admin ), schlägt das Upgrade oder Update möglicherweise mit folgenden Fehlern fehl:
Checking admin cluster certificates...FAILURE
Reason: 20 admin cluster certificates error(s).
Unhealthy Resources:
AdminMaster clusterCA bundle: failed to get clusterCA bundle on admin master, command [ssh -o IdentitiesOnly=yes -i admin-ssh-key -o StrictHostKeyChecking=no -o ConnectTimeout=30 ubuntu@AdminMasterIP -- sudo cat /etc/kubernetes/pki/ca-bundle.crt] failed with error: exit status 255, stderr: Authorized uses only. All activity may be monitored and reported.
ubuntu@AdminMasterIP: Permission denied (publickey).
failed to ssh AdminMasterIP, failed with error: exit status 255, stderr: Authorized uses only. All activity may be monitored and reported.
ubuntu@AdminMasterIP: Permission denied (publickey)
error dialing ubuntu@AdminMasterIP: failed to establish an authenticated SSH connection: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey]...
Workaround:
Wenn Sie mit dieser Fehlerbehebung kein Upgrade auf eine Patchversion von GKE on VMware durchführen können, wenden Sie sich an den Google-Support.
|
Upgrades |
1.13.0–1.13.9, 1.14.0–1.14.6, 1.15.1–1.15.2 |
Das Upgrade eines Administratorclusters, der in der GKE On-Prem API registriert ist, kann fehlschlagen
Wenn ein Administratorcluster in der GKE On-Prem API registriert ist, kann das Upgrade des Administratorclusters auf die betroffenen Versionen fehlschlagen, da die Flottenmitgliedschaft nicht aktualisiert werden konnte. Wenn dieser Fehler auftritt, wird der folgende Fehler angezeigt, wenn Sie versuchen, das Clusterupgrade durchzuführen:
failed to register cluster: failed to apply Hub Membership: Membership API request failed: rpc error: code = InvalidArgument desc = InvalidFieldError for field endpoint.on_prem_cluster.resource_link: field cannot be updated
Ein Administratorcluster wird in der API registriert, wenn Sie den Cluster explizit registrieren oder einen Nutzercluster mit einem GKE On-Prem API-Client upgraden.
Workaround:
Melden Sie den Administratorcluster ab:
gcloud alpha container vmware admin-clusters unenroll ADMIN_CLUSTER_NAME --project CLUSTER_PROJECT --location=CLUSTER_LOCATION --allow-missing
und fahren Sie mit dem Upgrade des Administratorclusters fort. Möglicherweise wird der veraltete Fehler „Cluster konnte nicht registriert werden“ vorübergehend angezeigt. Nach einer Weile sollte sie automatisch aktualisiert werden.
|
Upgrades und Updates |
1.13.0–1.13.9, 1.14.0–1.14.4, 1.15.0 |
Die Anmerkung zum Ressourcenlink des registrierten Administratorclusters wird nicht beibehalten
Wenn ein Administratorcluster in der GKE On-Prem API registriert ist, wird seine Ressourcenlink-Annotation auf die benutzerdefinierte Ressource OnPremAdminCluster angewendet. Diese wird bei späteren Aktualisierungen des Administratorclusters nicht beibehalten, da der falsche Annotationsschlüssel verwendet wird. Dies kann dazu führen, dass der Administratorcluster versehentlich wieder in der GKE On-Prem API registriert wird.
Ein Administratorcluster wird in der API registriert, wenn Sie den Cluster explizit registrieren oder einen Nutzercluster mit einem GKE On-Prem API-Client upgraden.
Workaround:
Melden Sie den Administratorcluster ab:
gcloud alpha container vmware admin-clusters unenroll ADMIN_CLUSTER_NAME --project CLUSTER_PROJECT --location=CLUSTER_LOCATION --allow-missing
und registrieren Sie den Administratorcluster noch einmal.
|
Netzwerk |
1.15.0-1.15.2 |
CoreDNS orderPolicy nicht erkannt
OrderPolicy wird nicht als Parameter erkannt und nicht verwendet. Stattdessen verwendet GKE on VMware immer Random .
Dieses Problem tritt auf, weil die CoreDNS-Vorlage nicht aktualisiert wurde. Dadurch wird orderPolicy ignoriert.
Workaround:
Aktualisieren Sie die CoreDNS-Vorlage und wenden Sie die Korrektur an. Diese Problembehebung bleibt bis zu einem Upgrade bestehen.
- Bearbeiten Sie die vorhandene Vorlage:
kubectl edit cm -n kube-system coredns-template
Ersetzen Sie den Inhalt der Vorlage durch Folgendes:
coredns-template: |-
.:53 {
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
}
{{- if .PrivateGoogleAccess }}
import zones/private.Corefile
{{- end }}
{{- if .RestrictedGoogleAccess }}
import zones/restricted.Corefile
{{- end }}
prometheus :9153
forward . {{ .UpstreamNameservers }} {
max_concurrent 1000
{{- if ne .OrderPolicy "" }}
policy {{ .OrderPolicy }}
{{- end }}
}
cache 30
{{- if .DefaultDomainQueryLogging }}
log
{{- end }}
loop
reload
loadbalance
}{{ range $i, $stubdomain := .StubDomains }}
{{ $stubdomain.Domain }}:53 {
errors
{{- if $stubdomain.QueryLogging }}
log
{{- end }}
cache 30
forward . {{ $stubdomain.Nameservers }} {
max_concurrent 1000
{{- if ne $.OrderPolicy "" }}
policy {{ $.OrderPolicy }}
{{- end }}
}
}
{{- end }}
|
Upgrades und Updates |
1.10, 1.11, 1.12, 1.13.0–1.13.7, 1.14.0–1.14.3 |
OnPremAdminCluster-Status zwischen Prüfpunkt und tatsächlicher Antwortvorlage inkonsistent
Bestimmte Race-Bedingungen können dazu führen, dass der OnPremAdminCluster -Status zwischen dem Checkpoint und der tatsächlichen Antwortvorlage inkonsistent ist. Wenn das Problem auftritt, kann beim Aktualisieren des Administratorclusters nach dem Upgrade der folgende Fehler auftreten:
Exit with error:
E0321 10:20:53.515562 961695 console.go:93] Failed to update the admin cluster: OnPremAdminCluster "gke-admin-rj8jr" is in the middle of a create/upgrade ("" -> "1.15.0-gke.123"), which must be completed before it can be updated
Failed to update the admin cluster: OnPremAdminCluster "gke-admin-rj8jr" is in the middle of a create/upgrade ("" -> "1.15.0-gke.123"), which must be completed before it can be updated
Um dieses Problem zu umgehen, müssen Sie entweder den Checkpoint bearbeiten oder für ein Upgrade/Update deaktivieren. Wenden Sie sich an unser Supportteam, um mit der Problemumgehung fortzufahren.
|
Vorgang |
1.13.0–1.13.9, 1.14.0–1.14.5, 1.15.0–1.15.1 |
Änderungen an Administratorzertifikaten für Administratorcluster beim Abgleichsprozess
GKE on VMware ändert die Administratorzertifikate auf Steuerungsebenen von Administratorclustern mit jedem Abgleichsprozess, z. B. während eines Clusterupgrades. Dieses Verhalten erhöht die Wahrscheinlichkeit, dass ungültige Zertifikate für Ihren Administratorcluster ausgegeben werden, insbesondere für Cluster der Version 1.15.
Wenn Sie von diesem Problem betroffen sind, können Probleme wie die folgenden auftreten:
- Ungültige Zertifikate können bei den folgenden Befehlen zu einer Zeitüberschreitung und zu Fehlermeldungen führen:
gkectl create admin
gkectl upgrade amdin
gkectl update admin
Diese Befehle können Autorisierungsfehler wie die folgenden zurückgeben:
Failed to reconcile admin cluster: unable to populate admin clients: failed to get admin controller runtime client: Unauthorized
- Die
kube-apiserver -Logs für Ihren Administratorcluster können Fehler wie die folgenden enthalten:
Unable to authenticate the request" err="[x509: certificate has expired or is not yet valid...
Workaround:
Führen Sie ein Upgrade auf eine GKE on VMware-Version mit der folgenden Fehlerbehebung durch:
1.13.10 oder höher, 1.14.6 oder höher, 1.15.2 oder höher.
Wenn kein Upgrade für Sie möglich ist, wenden Sie sich an Cloud Customer Care, um das Problem zu beheben.
|
Netzwerk, Betrieb |
1,10, 1,11, 1,12, 1,13, 1,14 |
Anthos Network Gateway-Komponenten wurden aufgrund fehlender Prioritätsklasse entfernt oder ausstehend
Netzwerk-Gateway-Pods in kube-system können den Status Pending oder Evicted anzeigen, wie in der folgenden komprimierten Beispielausgabe gezeigt:
$ kubectl -n kube-system get pods | grep ang-node
ang-node-bjkkc 2/2 Running 0 5d2h
ang-node-mw8cq 0/2 Evicted 0 6m5s
ang-node-zsmq7 0/2 Pending 0 7h
Diese Fehler weisen auf Bereinigungsereignisse hin oder darauf, dass Pods aufgrund von Knotenressourcen nicht geplant werden können. Da Anthos Network Gateway-Pods keine PriorityClass haben, haben sie dieselbe Standardpriorität wie andere Arbeitslasten.
Wenn Knoten ressourcenbeschränkt sind, werden die Netzwerk-Gateway-Pods möglicherweise entfernt. Dieses Verhalten ist besonders schlecht für das DaemonSet ang-node , da diese Pods auf einem bestimmten Knoten geplant werden müssen und nicht migriert werden können.
Workaround:
Führen Sie ein Upgrade auf Version 1.15 oder höher aus.
Als kurzfristige Lösung können Sie den Anthos Network Gateway-Komponenten manuell eine PriorityClass zuweisen. Der GKE on VMware-Controller überschreibt diese manuellen Änderungen während eines Abgleichsprozesses, z. B. während eines Clusterupgrades.
- Weisen Sie den Clustercontroller-Deployments
ang-controller-manager und autoscaler die PriorityClass system-cluster-critical zu.
- Weisen Sie dem DaemonSet des Knotens
ang-daemon die PriorityClass system-node-critical zu.
|
Upgrades und Updates |
1.12, 1.13, 1.14, 1.15.0–1.15.2 |
Administratorclusterupgrade schlägt nach der Registrierung des Clusters bei gcloud fehl
Nachdem Sie gcloud zum Registrieren eines Administratorclusters mit dem nicht leeren Abschnitt gkeConnect verwendet haben, wird möglicherweise der folgende Fehler angezeigt, wenn Sie versuchen, den Cluster zu aktualisieren:
failed to register cluster: failed to apply Hub Mem\
bership: Membership API request failed: rpc error: code = InvalidArgument desc = InvalidFieldError for field endpoint.o\
n_prem_cluster.admin_cluster: field cannot be updated
Löschen Sie den Namespace gke-connect :
kubectl delete ns gke-connect --kubeconfig=ADMIN_KUBECONFIG
Rufen Sie den Namen des Administratorclusters ab:
kubectl get onpremadmincluster -n kube-system --kubeconfig=ADMIN_KUBECONFIG
Löschen Sie die Flottenmitgliedschaft:
gcloud container fleet memberships delete ADMIN_CLUSTER_NAME
und setzen Sie das Upgrade des Administratorclusters fort.
|
Vorgang |
1.13.0–1.13.8, 1.14.0–1.14.5, 1.15.0–1.15.1 |
gkectl diagnose snapshot --log-since kann das Zeitfenster für journalctl -Befehle, die auf den Clusterknoten ausgeführt werden, nicht begrenzen
Dies wirkt sich nicht auf die Funktion zum Erstellen eines Cluster-Snapshots aus, da der Snapshot weiterhin alle Logs enthält, die standardmäßig durch Ausführen von journalctl auf den Clusterknoten erfasst werden. Daher werden keine Informationen zur Fehlerbehebung übersehen.
|
Installation, Upgrades und Updates |
1.9+, 1.10+, 1.11+, 1.12+ |
gkectl prepare windows fehlgeschlagen
gkectl prepare windows kann Docker in GKE in VMware-Versionen vor 1.13 nicht installieren, da MicrosoftDockerProvider verworfen wurde.
Workaround:
Die allgemeine Idee zur Umgehung dieses Problems besteht darin, ein Upgrade auf GKE on VMware 1.13 durchzuführen und mit dem gkectl von 1.13 eine Windows-VM-Vorlage und dann Windows-Knotenpools zu erstellen. Sie haben zwei Möglichkeiten, von Ihrer aktuellen Version zu GKE on VMware 1.13 zu gelangen (siehe unten).
Hinweis: Wir haben Möglichkeiten, dieses Problem in der aktuellen Version zu umgehen, ohne ein Upgrade auf Version 1.13 durchführen zu müssen. Es sind jedoch weitere manuelle Schritte erforderlich. Wenden Sie sich an unser Supportteam, wenn Sie diese Option in Betracht ziehen möchten.
Option 1:Blau/Grün-Upgrade
Sie können einen neuen Cluster mit GKE on VMware Version 1.13 oder höher mit Windows-Knotenpools erstellen, Ihre Arbeitslasten zum neuen Cluster migrieren und dann den aktuellen Cluster herunterfahren. Es wird empfohlen, die neueste Nebenversion von GKE on VMware zu verwenden.
Hinweis: Dies erfordert zusätzliche Ressourcen für die Bereitstellung des neuen Clusters, aber weniger Ausfallzeiten und Unterbrechungen bei vorhandenen Arbeitslasten.
Option 2: Beim Upgrade auf GKE on VMware 1.13 Windows-Knotenpools löschen und wieder hinzufügen
Hinweis: Bei dieser Option können die Windows-Arbeitslasten erst dann ausgeführt werden, wenn der Cluster auf 1.13 aktualisiert wurde und die Windows-Knotenpools wieder hinzugefügt wurden.
- Löschen Sie vorhandene Windows-Knotenpools. Entfernen Sie dazu die Konfiguration für Windows-Knotenpools aus der Datei user-cluster.yaml und führen Sie dann den folgenden Befehl aus:
gkectl update cluster --kubeconfig=ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG_FILE
- Führen Sie ein Upgrade der Linux-Administrator- und Nutzercluster auf 1.12 durch. Folgen Sie dazu dem
Nutzerhandbuch für das Upgrade für die entsprechende Ziel-Nebenversion.
- (Führen Sie diesen Schritt vor dem Upgrade auf 1.13 aus.) Achten Sie darauf, dass
enableWindowsDataplaneV2: true in der Antwortvorlage OnPremUserCluster konfiguriert ist. Andernfalls verwendet der Cluster weiterhin Docker für Windows-Knotenpools. Diese sind nicht mit der neu erstellten Windows-VM-Vorlage 1.13 kompatibel, auf der Docker nicht installiert ist. Wenn die Datei nicht konfiguriert oder auf „false“ gesetzt ist, aktualisieren Sie den Cluster in „user-cluster.yaml“ auf „true“ und führen Sie dann folgenden Befehl aus:
gkectl update cluster --kubeconfig=ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG_FILE
- Führen Sie ein Upgrade der Linux-Administrator- und Nutzercluster auf Version 1.13 durch. Folgen Sie dazu dem
Nutzerhandbuch für das Upgrade.
- Bereiten Sie die Windows-VM-Vorlage mit gkectl 1.13 vor:
gkectl prepare windows --base-vm-template BASE_WINDOWS_VM_TEMPLATE_NAME --bundle-path 1.13_BUNDLE_PATH --kubeconfig=ADMIN_KUBECONFIG
- Fügen Sie die Windows-Knotenpoolkonfiguration wieder in user-cluster.yaml ein, wobei das Feld
OSImage auf die neu erstellte Windows-VM-Vorlage gesetzt ist.
- Cluster aktualisieren, um Windows-Knotenpools hinzuzufügen
gkectl update cluster --kubeconfig=ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG_FILE
|
Installation, Upgrades und Updates |
1.13.0–1.13.9, 1.14.0–1.14.5, 1.15.0–1.15.1 |
RootDistanceMaxSec -Konfiguration wird für ubuntu Knoten nicht wirksam
Auf den Knoten wird der Standardwert von 5 Sekunden für RootDistanceMaxSec verwendet, anstelle von 20 Sekunden, wie dies die erwartete Konfiguration sein sollte. Wenn Sie das Startlog des Knotens prüfen, indem Sie eine SSH-Verbindung zur VM herstellen, die sich in „/var/log/startup.log“ befindet, wird der folgende Fehler angezeigt:
+ has_systemd_unit systemd-timesyncd
/opt/bin/master.sh: line 635: has_systemd_unit: command not found
Die Verwendung eines RootDistanceMaxSec -Werts von 5 Sekunden kann dazu führen, dass die Systemuhr mit dem NTP-Server nicht synchron ist, wenn die Zeitverschiebung größer als 5 Sekunden ist.
Workaround:
Wenden Sie das folgende DaemonSet auf Ihren Cluster an, um RootDistanceMaxSec zu konfigurieren:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: change-root-distance
namespace: kube-system
spec:
selector:
matchLabels:
app: change-root-distance
template:
metadata:
labels:
app: change-root-distance
spec:
hostIPC: true
hostPID: true
tolerations:
# Make sure pods gets scheduled on all nodes.
- effect: NoSchedule
operator: Exists
- effect: NoExecute
operator: Exists
containers:
- name: change-root-distance
image: ubuntu
command: ["chroot", "/host", "bash", "-c"]
args:
- |
while true; do
conf_file="/etc/systemd/timesyncd.conf.d/90-gke.conf"
if [ -f $conf_file ] && $(grep -q "RootDistanceMaxSec=20" $conf_file); then
echo "timesyncd has the expected RootDistanceMaxSec, skip update"
else
echo "updating timesyncd config to RootDistanceMaxSec=20"
mkdir -p /etc/systemd/timesyncd.conf.d
cat > $conf_file << EOF
[Time]
RootDistanceMaxSec=20
EOF
systemctl restart systemd-timesyncd
fi
sleep 600
done
volumeMounts:
- name: host
mountPath: /host
securityContext:
privileged: true
volumes:
- name: host
hostPath:
path: /
|
Upgrades und Updates |
1.12.0–1.12.6, 1.13.0–1.13.6, 1.14.0–1.14.2 |
gkectl update admin schlägt aufgrund eines leeren Feldes osImageType fehl
Wenn Sie Version 1.13 gkectl zum Aktualisieren eines Administratorclusters der Version 1.12 verwenden, wird möglicherweise der folgende Fehler angezeigt:
Failed to update the admin cluster: updating OS image type in admin cluster
is not supported in "1.12.x-gke.x"
Wenn Sie gkectl update admin für Cluster der Version 1.13 oder 1.14 verwenden, wird möglicherweise die folgende Meldung in der Antwort angezeigt:
Exit with error:
Failed to update the cluster: the update contains multiple changes. Please
update only one feature at a time
Wenn Sie das gkectl -Log prüfen, sehen Sie möglicherweise, dass zu den mehreren Änderungen die Einstellung osImageType von einem leeren String in ubuntu_containerd gehört.
Diese Aktualisierungsfehler sind auf einen fehlerhaften Backfill des Felds osImageType in der Administratorclusterkonfiguration seit der Einführung in Version 1.9 zurückzuführen.
Workaround:
Führen Sie ein Upgrade auf eine Version von GKE on VMware durch, um das Problem zu beheben. Wenn für Sie kein Upgrade möglich ist, wenden Sie sich an Cloud Customer Care, um das Problem zu beheben.
|
Installation, Sicherheit |
1,13, 1,14, 1,15, 1,16 |
SNI funktioniert nicht auf Nutzerclustern mit Controlplane V2
Die Möglichkeit, ein zusätzliches Bereitstellungszertifikat für den Kubernetes API-Server eines Nutzerclusters mit
authentication.sni bereitzustellen, funktioniert nicht, wenn die Steuerungsebene V2 (
enableControlplaneV2: true ) aktiviert ist.
Workaround:
Deaktivieren Sie Controlplane V2 (enableControlplaneV2: false ), bis ein GKE on VMware-Patch mit der Lösung verfügbar ist, wenn Sie SNI verwenden müssen.
|
Installation |
1.0–1.11, 1.12, 1.13.0–1.13.9, 1.14.0–1.14.5, 1.15.0–1.15.1 |
$ im Nutzernamen der privaten Registry verursacht einen Fehler beim Starten der Maschine der Administrator-Steuerungsebene
Die Maschine der Administrator-Steuerungsebene kann nicht gestartet werden, wenn der Nutzername der privaten Registry $ enthält.
Beim Prüfen von /var/log/startup.log auf der Maschine der Administrator-Steuerungsebene wird der folgende Fehler angezeigt:
++ REGISTRY_CA_CERT=xxx
++ REGISTRY_SERVER=xxx
/etc/startup/startup.conf: line 7: anthos: unbound variable
Workaround:
Verwenden Sie einen Nutzernamen für die private Registry ohne $ oder eine Version von GKE on VMware mit der Lösung.
|
Upgrades und Updates |
1.12.0-1.12.4 |
Falsch positive Warnungen zu nicht unterstützten Änderungen während der Aktualisierung des Administratorclusters
Wenn Sie
Administratorcluster aktualisieren, sehen Sie die folgenden falsch positiven Warnungen im Log und können sie ignorieren.
console.go:47] detected unsupported changes: &v1alpha1.OnPremAdminCluster{
...
- CARotation: &v1alpha1.CARotationConfig{Generated: &v1alpha1.CARotationGenerated{CAVersion: 1}},
+ CARotation: nil,
...
}
|
Upgrades und Updates |
1.13.0–1.13.9, 1.14.0–1.14.5, 1.15.0–1.15.1 |
Aktualisieren des Nutzerclusters ist nach der Rotation des KSA-Signaturschlüssels fehlgeschlagen
Nachdem Sie KSA-Signaturschlüssel rotiert und anschließend
einen Nutzercluster aktualisiert haben, schlägt gkectl update möglicherweise mit der folgenden Fehlermeldung fehl:
Failed to apply OnPremUserCluster 'USER_CLUSTER_NAME-gke-onprem-mgmt/USER_CLUSTER_NAME':
admission webhook "vonpremusercluster.onprem.cluster.gke.io" denied the request:
requests must not decrement *v1alpha1.KSASigningKeyRotationConfig Version, old version: 2, new version: 1"
Workaround:
Ändern Sie die Version Ihres KSA-Signaturschlüssels wieder in 1, behalten Sie jedoch die neuesten Schlüsseldaten bei:
- Prüfen Sie das Secret im Administratorcluster unter dem Namespace
USER_CLUSTER_NAME und rufen Sie den Namen des Secrets für den ksa-signing-key-Schlüssel ab:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME get secrets | grep ksa-signing-key
- Kopieren Sie das Secret „ksa-signing-key“ und nennen Sie es den Namen „service-account-cert“:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME get secret KSA-KEY-SECRET-NAME -oyaml | \
sed 's/ name: .*/ name: service-account-cert/' | \
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME apply -f -
- Löschen Sie das vorherige Secret des KSA-Signaturschlüssels:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME delete secret KSA-KEY-SECRET-NAME
- Aktualisieren Sie das Feld
data.data in der configmap von ksa-signing-key-rotation-stage auf '{"tokenVersion":1,"privateKeyVersion":1,"publicKeyVersions":[1]}' :
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME \
edit configmap ksa-signing-key-rotation-stage
- Deaktivieren Sie den Validierungs-Webhook, um die Versionsinformationen in der benutzerdefinierten Ressource „OnPremUserCluster“ zu bearbeiten:
kubectl --kubeconfig=ADMIN_KUBECONFIG patch validatingwebhookconfiguration onprem-user-cluster-controller -p '
webhooks:
- name: vonpremnodepool.onprem.cluster.gke.io
rules:
- apiGroups:
- onprem.cluster.gke.io
apiVersions:
- v1alpha1
operations:
- CREATE
resources:
- onpremnodepools
- name: vonpremusercluster.onprem.cluster.gke.io
rules:
- apiGroups:
- onprem.cluster.gke.io
apiVersions:
- v1alpha1
operations:
- CREATE
resources:
- onpremuserclusters
'
- Aktualisieren Sie in Ihrer benutzerdefinierten Ressource „OnPremUserCluster“ das Feld
spec.ksaSigningKeyRotation.generated.ksaSigningKeyRotation auf 1 :
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME-gke-onprem-mgmt \
edit onpremusercluster USER_CLUSTER_NAME
- Warten Sie, bis der Zielnutzercluster bereit ist. So können Sie den Status prüfen:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME-gke-onprem-mgmt \
get onpremusercluster
- Stellen Sie den Validierungs-Webhook für den Nutzercluster wieder her:
kubectl --kubeconfig=ADMIN_KUBECONFIG patch validatingwebhookconfiguration onprem-user-cluster-controller -p '
webhooks:
- name: vonpremnodepool.onprem.cluster.gke.io
rules:
- apiGroups:
- onprem.cluster.gke.io
apiVersions:
- v1alpha1
operations:
- CREATE
- UPDATE
resources:
- onpremnodepools
- name: vonpremusercluster.onprem.cluster.gke.io
rules:
- apiGroups:
- onprem.cluster.gke.io
apiVersions:
- v1alpha1
operations:
- CREATE
- UPDATE
resources:
- onpremuserclusters
'
- Vermeiden Sie eine weitere Rotation des KSA-Signaturschlüssels, bis der Cluster auf die Version mit der Fehlerkorrektur aktualisiert wurde.
|
Vorgang |
1.13.1+, 1.14, 1., 1.16 |
Wenn Sie Terraform verwenden, um einen Nutzercluster mit einem F5 BIG-IP-Load-Balancer zu löschen, werden die virtuellen F5 BIG-IP-Server nach dem Löschen des Clusters nicht entfernt.
Workaround:
Folgen Sie der Anleitung zum Bereinigen der F5-Partition eines Nutzerclusters
, um die F5-Ressourcen zu entfernen. |
Installation, Upgrades und Updates |
1.13.8, 1.14.4 |
Der Typcluster ruft Container-Images aus docker.io ab
Wenn Sie einen Administratorcluster der Version 1.13.8 oder Version 1.14.4 erstellen oder einen Administratorcluster auf Version 1.13.8 oder 1.14.4 upgraden, ruft der Typcluster die folgenden Container-Images aus docker.io ab:
docker.io/kindest/kindnetd
docker.io/kindest/local-path-provisioner
docker.io/kindest/local-path-helper
Wenn docker.io über Ihre Administratorworkstation nicht zugänglich ist, kann der Typcluster beim Erstellen oder Upgrade des Administratorclusters nicht aufgerufen werden.
Wenn Sie den folgenden Befehl auf der Administratorworkstation ausführen, werden die entsprechenden Container angezeigt, die mit ErrImagePull ausstehen:
docker exec gkectl-control-plane kubectl get pods -A
Die Antwort enthält Einträge wie die folgenden:
...
kube-system kindnet-xlhmr 0/1
ErrImagePull 0 3m12s
...
local-path-storage local-path-provisioner-86666ffff6-zzqtp 0/1
Pending 0 3m12s
...
Diese Container-Images sollten in das Container-Image der Art des Clusters vorab geladen werden. Allerdings hat Art v0.18.0 ein Problem mit den vorinstallierten Container-Images, wodurch sie versehentlich aus dem Internet abgerufen werden.
Workaround:
Führen Sie die folgenden Befehle auf der Administratorworkstation aus, während die Erstellung oder das Upgrade des Administratorclusters aussteht:
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/kindnetd:v20230330-48f316cd@sha256:c19d6362a6a928139820761475a38c24c0cf84d507b9ddf414a078cf627497af docker.io/kindest/kindnetd:v20230330-48f316cd
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/kindnetd:v20230330-48f316cd@sha256:c19d6362a6a928139820761475a38c24c0cf84d507b9ddf414a078cf627497af docker.io/kindest/kindnetd@sha256:c19d6362a6a928139820761475a38c24c0cf84d507b9ddf414a078cf627497af
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/local-path-helper:v20230330-48f316cd@sha256:135203f2441f916fb13dad1561d27f60a6f11f50ec288b01a7d2ee9947c36270 docker.io/kindest/local-path-helper:v20230330-48f316cd
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/local-path-helper:v20230330-48f316cd@sha256:135203f2441f916fb13dad1561d27f60a6f11f50ec288b01a7d2ee9947c36270 docker.io/kindest/local-path-helper@sha256:135203f2441f916fb13dad1561d27f60a6f11f50ec288b01a7d2ee9947c36270
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/local-path-provisioner:v0.0.23-kind.0@sha256:f2d0a02831ff3a03cf51343226670d5060623b43a4cfc4808bd0875b2c4b9501 docker.io/kindest/local-path-provisioner:v0.0.23-kind.0
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/local-path-provisioner:v0.0.23-kind.0@sha256:f2d0a02831ff3a03cf51343226670d5060623b43a4cfc4808bd0875b2c4b9501 docker.io/kindest/local-path-provisioner@sha256:f2d0a02831ff3a03cf51343226670d5060623b43a4cfc4808bd0875b2c4b9501
|
Vorgang |
1.13.0–1.13.7, 1.14.0–1.14.4, 1.15.0 |
Fehlgeschlagener Failover auf dem Nutzercluster und dem Administratorcluster der HA Controlplane V2, wenn das Netzwerk doppelte GARP-Anfragen herausfiltert
Wenn Ihre Cluster-VMs mit einem Switch verbunden sind, der doppelte GARP-Anfragen (Gratuitous ARP) herausfiltert, kann bei der Keepalive-Lead-Auswahl eine Race-Bedingung auftreten, was dazu führt, dass einige Knoten falsche ARP-Tabelleneinträge enthalten.
Die betroffenen Knoten können die virtuelle IP-Adresse der Steuerungsebene ping , allerdings kommt es bei einer TCP-Verbindung zur virtuellen IP-Adresse der Steuerungsebene zu einer Zeitüberschreitung.
Workaround:
Führen Sie den folgenden Befehl auf jedem Knoten der Steuerungsebene des betroffenen Clusters aus:
iptables -I FORWARD -i ens192 --destination CONTROL_PLANE_VIP -j DROP
|
Upgrades und Updates |
1.13.0–1.13.7, 1.14.0–1.14.4, 1.15.0 |
vsphere-csi-controller muss nach der vCenter-Zertifikatsrotation neu gestartet werden
vsphere-csi-controller sollte nach der vCenter-Zertifikatrotation sein vCenter-Secret aktualisieren. Das aktuelle System startet jedoch die Pods von vsphere-csi-controller nicht ordnungsgemäß neu, wodurch vsphere-csi-controller nach der Rotation abstürzt.
Workaround:
Folgen Sie für Cluster, die mit 1.13 und höher erstellt wurden, der Anleitung unten, um vsphere-csi-controller neu zu starten
kubectl --kubeconfig=ADMIN_KUBECONFIG rollout restart deployment vsphere-csi-controller -n kube-system
|
Installation |
1.10.3–1.10.7, 1.11, 1.12, 1.13.0–1.13.1 |
Das Erstellen des Administratorclusters schlägt bei Clusterregistrierungsfehlern nicht fehl
Selbst wenn die Clusterregistrierung während der Erstellung des Administratorclusters fehlschlägt, schlägt der Befehl gkectl create admin nicht bei dem Fehler fehl und ist möglicherweise erfolgreich. Das heißt, die Erstellung des Administratorclusters könnte „erfolgreich“ sein, ohne bei einer Flotte registriert zu sein.
Zum Identifizieren des Symptoms können Sie im Log von „gkectl create admin“ nach den folgenden Fehlermeldungen suchen:
Failed to register admin cluster
Sie können auch prüfen, ob der Cluster unter registrierten Clustern in der Cloud Console angezeigt wird.
Workaround:
Folgen Sie bei Clustern, die mit 1.12 und höher erstellt wurden, der Anleitung zum erneuten Registrierungsversuch des Administratorclusters nach der Clustererstellung. Bei Clustern, die mit früheren Versionen erstellt wurden,
-
Hängen Sie ein falsches Schlüssel/Wert-Paar wie „foo: bar“ an Ihre Connect-Register-SA-Schlüsseldatei an
-
Führen Sie
gkectl update admin aus, um den Administratorcluster noch einmal zu registrieren.
|
Upgrades und Updates |
1.10, 1.11, 1.12, 1.13.0–1.13.1 |
Die erneute Registrierung des Administratorclusters wird beim Upgrade des Administratorclusters möglicherweise übersprungen
Wenn während des Administratorclusterupgrades eine Zeitüberschreitung beim Upgrade von Knoten der Nutzersteuerungsebene auftritt, wird der Administratorcluster nicht noch einmal mit der aktualisierten Version des Connect-Agents registriert.
Workaround:
Prüfen Sie, ob der Cluster unter registrierten Clustern angezeigt wird.
Optional können Sie sich nach dem Einrichten der Authentifizierung beim Cluster anmelden. Wenn der Cluster noch registriert ist, können Sie die folgende Anleitung für einen neuen Registrierungsversuch überspringen.
Folgen Sie bei Clustern, die auf Version 1.12 und höher aktualisiert wurden, nach der Clustererstellung der Anleitung zum erneuten Registrierungsversuch des Administratorclusters. Für Cluster, für die ein Upgrade auf frühere Versionen durchgeführt wurde:
-
Hängen Sie ein falsches Schlüssel/Wert-Paar wie „foo: bar“ an Ihre Connect-Register-SA-Schlüsseldatei an
-
Führen Sie
gkectl update admin aus, um den Administratorcluster noch einmal zu registrieren.
|
Konfiguration |
1.15.0 |
Falsche Fehlermeldung zu vCenter.dataDisk
Bei einem Hochverfügbarkeits-Administratorcluster zeigt gkectl prepare diese falsche Fehlermeldung an:
vCenter.dataDisk must be present in the AdminCluster spec
Workaround:
Sie können diese Fehlermeldung ignorieren.
|
VMware |
1.15.0 |
Knotenpoolerstellung aufgrund redundanter VM-Host-Affinitätsregeln fehlgeschlagen
Beim Erstellen eines Knotenpools mit VM-Host-Affinität kann eine Race-Bedingung dazu führen, dass mehrere VM-Host-Affinitätsregeln mit demselben Namen erstellt werden. Dies kann dazu führen, dass das Erstellen des Knotenpools fehlschlägt.
Workaround:
Entfernen Sie die alten redundanten Regeln, damit die Knotenpoolerstellung fortgesetzt werden kann.
Diese Regeln haben den Namen [USER_CLUSTER_NAME]–[HASH].
|
Vorgang |
1.15.0 |
gkectl repair admin-master kann aus folgendem Grund fehlschlagen: failed
to delete the admin master node object and reboot the admin master VM
Der Befehl gkectl repair admin-master kann aufgrund einer Race-Bedingung mit dem folgenden Fehler fehlschlagen.
Failed to repair: failed to delete the admin master node object and reboot the admin master VM
Workaround:
Dieser Befehl ist idempotent. Es kann sicher noch einmal ausgeführt werden, bis der Befehl erfolgreich ausgeführt wurde.
|
Upgrades und Updates |
1.15.0 |
Pods verbleiben nach der Neuerstellung oder Aktualisierung eines Knotens der Steuerungsebene im Status „Fehlgeschlagen“
Nachdem Sie einen Knoten der Steuerungsebene neu erstellt oder aktualisiert haben, behalten bestimmte Pods aufgrund eines Fehlers des NodeAffinity-Prädikats möglicherweise den Status Failed bei. Diese fehlgeschlagenen Pods haben keine Auswirkungen auf normale Clustervorgänge oder -integrität.
Workaround:
Sie können die fehlgeschlagenen Pods bedenkenlos ignorieren oder manuell löschen.
|
Sicherheit, Konfiguration |
1.15.0-1.15.1 |
OnPremUserCluster ist aufgrund von Anmeldedaten der privaten Registry nicht bereit
Wenn Sie vorbereitete Anmeldedaten und eine private Registry verwenden, aber keine vorbereiteten Anmeldedaten für Ihre private Registry konfiguriert haben, ist der OnPremUserCluster möglicherweise nicht bereit und Sie sehen die folgende Fehlermeldung:
failed to check secret reference for private registry …
Workaround:
Bereiten Sie die Anmeldedaten der privaten Registry für den Nutzercluster gemäß der Anleitung unter Vorbereitete Anmeldedaten konfigurieren vor.
|
Upgrades und Updates |
1.15.0 |
Während des gkectl upgrade admin wird durch die Preflight-Prüfung für Speicher für die CSI-Migration bestätigt, dass die StorageClasses keine Parameter haben, die nach der CSI-Migration ignoriert werden.
Wenn beispielsweise eine Speicherklasse mit dem Parameter diskformat vorhanden ist, markiert gkectl upgrade admin die Speicherklasse und meldet einen Fehler bei der Preflight-Validierung.
Administratorcluster, die in GKE unter VMware 1.10 und davor erstellt wurden, haben eine Speicherklasse mit diskformat: thin , die diese Validierung nicht besteht. Diese Speicherklasse funktioniert jedoch auch nach der CSI-Migration weiterhin einwandfrei. Diese Fehler sollten stattdessen als Warnungen interpretiert werden.
Weitere Informationen finden Sie im Abschnitt mit den Speicherklassenparametern unter In-Tree vSphere-Volumes zum vSphere Container Storage-Plug-in migrieren.
Workaround:
Nachdem Sie geprüft haben, ob der Cluster eine Speicherklasse mit Parametern hat, die nach der CSI-Migration ignoriert werden, führen Sie gkectl upgrade admin mit dem Flag --skip-validation-cluster-health aus.
|
Speicher |
1,15; 1,16 |
Migrierte integrierte vSphere-Volumes, die das Windows-Dateisystem verwenden, können nicht mit dem vSphere-CSI-Treiber verwendet werden
Unter bestimmten Bedingungen können Laufwerke schreibgeschützt an Windows-Knoten angehängt werden. Dies führt dazu, dass das entsprechende Volume in einem Pod schreibgeschützt ist.
Dieses Problem tritt eher auf, wenn eine neue Gruppe von Knoten eine alte Gruppe von Knoten ersetzt (z. B. ein Clusterupgrade oder ein Knotenpoolupdate). Zustandsorientierte Arbeitslasten, die zuvor einwandfrei funktioniert haben, können möglicherweise nicht auf ihre Volumes auf dem neuen Knotensatz schreiben.
Workaround:
-
Rufen Sie die UID des Pods ab, der nicht auf sein Volume schreiben kann:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get pod \
POD_NAME --namespace POD_NAMESPACE \
-o=jsonpath='{.metadata.uid}{"\n"}'
-
Rufen Sie mit PersistentClaim den Namen des Persistentes ab:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get pvc \
PVC_NAME --namespace POD_NAMESPACE \
-o jsonpath='{.spec.volumeName}{"\n"}'
-
Ermitteln Sie den Namen des Knotens, auf dem der Pod ausgeführt wird:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIGget pods \
--namespace POD_NAMESPACE \
-o jsonpath='{.spec.nodeName}{"\n"}'
-
Fordern Sie PowerShell-Zugriff auf den Knoten an, entweder über SSH oder die vSphere-Weboberfläche.
-
Legen Sie Umgebungsvariablen fest:
PS C:\Users\administrator> pvname=PV_NAME
PS C:\Users\administrator> podid=POD_UID
- Ermitteln Sie die Laufwerksnummer des Laufwerks, das mit dem PersistentVolume verknüpft ist:
PS C:\Users\administrator> disknum=(Get-Partition -Volume (Get-Volume -UniqueId ("\\?\"+(Get-Item (Get-Item
"C:\var\lib\kubelet\pods\$podid\volumes\kubernetes.io~csi\$pvname\mount").Target).Target))).DiskNumber
-
Prüfen Sie, ob das Laufwerk
readonly ist:
PS C:\Users\administrator> (Get-Disk -Number $disknum).IsReadonly
Das Ergebnis sollte True sein.
- Setzen Sie
readonly auf false .
PS C:\Users\administrator> Set-Disk -Number $disknum -IsReadonly $false
PS C:\Users\administrator> (Get-Disk -Number $disknum).IsReadonly
-
Löschen Sie den Pod, damit er neu gestartet wird:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG delete pod POD_NAME \
--namespace POD_NAMESPACE
-
Der Pod sollte für denselben Knoten geplant werden. Falls der Pod jedoch für einen neuen Knoten geplant wird, müssen Sie möglicherweise die vorherigen Schritte auf dem neuen Knoten wiederholen.
|
Upgrades und Updates |
1.12, 1.13.0–1.13.7, 1.14.0–1.14.4 |
vsphere-csi-secret wird nach dem gkectl update credentials vsphere --admin-cluster nicht mehr aktualisiert
Wenn Sie die vSphere-Anmeldedaten für einen Administratorcluster aktualisieren, nachdem Sie die Clusteranmeldedaten aktualisiert haben, verwendet vsphere-csi-secret im Namespace kube-system im Administratorcluster möglicherweise weiterhin die alten Anmeldedaten.
Workaround:
- Rufen Sie den Namen des
vsphere-csi-secret -Secrets ab:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system get secrets | grep vsphere-csi-secret
- Aktualisieren Sie die Daten des Secrets
vsphere-csi-secret , das Sie im obigen Schritt erhalten haben:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system patch secret CSI_SECRET_NAME -p \
"{\"data\":{\"config\":\"$( \
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system get secrets CSI_SECRET_NAME -ojsonpath='{.data.config}' \
| base64 -d \
| sed -e '/user/c user = \"VSPHERE_USERNAME_TO_BE_UPDATED\"' \
| sed -e '/password/c password = \"VSPHERE_PASSWORD_TO_BE_UPDATED\"' \
| base64 -w 0 \
)\"}}"
vsphere-csi-controller neu starten:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system rollout restart deployment vsphere-csi-controller
- Sie können den Roll-out-Status mit folgenden Elementen verfolgen:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system rollout status deployment vsphere-csi-controller
Nachdem die Bereitstellung erfolgreich eingeführt wurde, sollte die aktualisierte vsphere-csi-secret vom Controller verwendet werden.
|
Upgrades und Updates |
1.10, 1.11, 1.12.0–1.12.6, 1.13.0–1.13.6, 1.14.0–1.14.2 |
Absturzschleife von audit-proxy beim Aktivieren von Cloud-Audit-Logs mit gkectl update cluster
audit-proxy könnte aufgrund einer leeren --cluster-name in einer Absturzschleife erscheinen.
Dieses Verhalten wird durch einen Fehler in der Aktualisierungslogik verursacht, bei dem der Clustername nicht an den Audit-Proxy-Pod / das Containermanifest weitergegeben wird.
Workaround:
Stellen Sie bei einem v2-Nutzercluster der Steuerungsebene mit enableControlplaneV2: true über SSH eine Verbindung zum Computer der Nutzersteuerungsebene her und aktualisieren Sie /etc/kubernetes/manifests/audit-proxy.yaml mit --cluster_name=USER_CLUSTER_NAME .
Bearbeiten Sie bei einem v1-Nutzercluster der Steuerungsebene den Container audit-proxy im Zustandsorientierten kube-apiserver , um --cluster_name=USER_CLUSTER_NAME hinzuzufügen:
kubectl edit statefulset kube-apiserver -n USER_CLUSTER_NAME --kubeconfig=ADMIN_CLUSTER_KUBECONFIG
|
Upgrades und Updates |
1.11, 1.12, 1.13.0–1.13.5, 1.14.0–1.14.1 |
Zusätzliche erneute Bereitstellung der Steuerungsebene direkt nach gkectl upgrade cluster
Direkt nach gkectl upgrade cluster werden die Pods der Steuerungsebene möglicherweise noch einmal bereitgestellt.
Der Clusterstatus von gkectl list clusters wird von RUNNING in RECONCILING geändert.
Bei Anfragen an den Nutzercluster kann es zu einer Zeitüberschreitung kommen.
Dieses Verhalten ist darauf zurückzuführen, dass die Zertifikatsrotation der Steuerungsebene nach gkectl upgrade cluster automatisch erfolgt.
Dieses Problem tritt nur bei Nutzerclustern auf, die die Steuerungsebene v2 NICHT verwenden.
Workaround:
Warten Sie, bis der Clusterstatus in gkectl list clusters wieder in RUNNING geändert wird, oder führen Sie ein Upgrade auf Versionen mit dieser Fehlerkorrektur durch: 1.13.6+, 1.14.2+ oder 1.15+.
|
Upgrades und Updates |
1.12.7 |
Der fehlerhafte Release 1.12.7-gke.19 wurde entfernt
GKE on VMware 1.12.7-gke.19 ist ein fehlerhafter Release, den Sie nicht verwenden sollten. Die Artefakte wurden aus dem Cloud Storage-Bucket entfernt.
Workaround:
Verwenden Sie stattdessen den Release 1.12.7-gke.20.
|
Upgrades und Updates |
1.12.0+, 1.13.0–1.13.7, 1.14.0–1.14.3 |
gke-connect-agent verwendet nach der Aktualisierung der Registrierungsanmeldedaten weiterhin das ältere Image
Wenn Sie die Anmeldedaten für die Registrierung mit einer der folgenden Methoden aktualisieren:
gkectl update credentials componentaccess , wenn keine private Registry verwendet wird
gkectl update credentials privateregistry , wenn Sie eine private Registry verwenden
Möglicherweise verwendet gke-connect-agent weiterhin das ältere Image oder die gke-connect-agent -Pods können aufgrund von ImagePullBackOff nicht abgerufen werden.
Dieses Problem wird in den GKE on VMware-Releases 1.13.8, 1.14.4 und nachfolgenden Releases behoben.
Workaround:
Option 1: Stellen Sie gke-connect-agent manuell noch einmal bereit:
- Löschen Sie den Namespace
gke-connect :
kubectl --kubeconfig=KUBECONFIG delete namespace gke-connect
- Stellen Sie
gke-connect-agent noch einmal mit dem ursprünglichen Dienstkontoschlüssel für die Registrierung bereit (Schlüssel muss nicht aktualisiert werden):
Für Administratorcluster:
gkectl update credentials register --kubeconfig=ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG_FILE --admin-cluster Für Nutzercluster:
gkectl update credentials register --kubeconfig=ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG_FILE
Option 2: Sie können die Daten des Image-Pull-Secrets regcred , das von der gke-connect-agent -Bereitstellung verwendet wird, manuell ändern:
kubectl --kubeconfig=KUBECONFIG -n=gke-connect patch secrets regcred -p "{\"data\":{\".dockerconfigjson\":\"$(kubectl --kubeconfig=KUBECONFIG -n=kube-system get secrets private-registry-creds -ojsonpath='{.data.\.dockerconfigjson}')\"}}"
Option 3: So fügen Sie das Standard-Image-Pull-Secret für Ihren Cluster im gke-connect-agent -Deployment hinzu:
- Kopieren Sie das Standard-Secret in den Namespace
gke-connect :
kubectl --kubeconfig=KUBECONFIG -n=kube-system get secret private-registry-creds -oyaml | sed 's/ namespace: .*/ namespace: gke-connect/' | kubectl --kubeconfig=KUBECONFIG -n=gke-connect apply -f -
- Rufen Sie den
gke-connect-agent -Bereitstellungsnamen ab:
kubectl --kubeconfig=KUBECONFIG -n=gke-connect get deployment | grep gke-connect-agent
- Fügen Sie das Standard-Secret der
gke-connect-agent -Bereitstellung hinzu:
kubectl --kubeconfig=KUBECONFIG -n=gke-connect patch deployment DEPLOYMENT_NAME -p '{"spec":{"template":{"spec":{"imagePullSecrets": [{"name": "private-registry-creds"}, {"name": "regcred"}]}}}}'
|
Installation |
1,13, 1,14 |
Fehler bei der manuellen Prüfung der Konfiguration des Load-Balancers
Wenn Sie die Konfiguration validieren, bevor Sie einen Cluster mit manuellem Load-Balancer erstellen, indem Sie gkectl check-config ausführen, schlägt der Befehl mit den folgenden Fehlermeldungen fehl.
- Validation Category: Manual LB Running validation check for "Network
configuration"...panic: runtime error: invalid memory address or nil pointer
dereference
Workaround:
Option 1: Du kannst die Patchversion 1.13.7 und 1.14.4 verwenden, die die Korrektur enthalten.
Option 2: Sie können auch denselben Befehl ausführen, um die Konfiguration zu validieren, aber die Validierung des Load-Balancers überspringen.
gkectl check-config --skip-validation-load-balancer
|
Vorgang |
1,0, 1,1, 1,2, 1,3, 1,4, 1,5, 1,6, 1,7, 1,8, 1,9, 1,10, 1,11, 1,12, 1,13 und 1,14 |
EZD-Smartwatch-Aushunger
Bei Clustern, auf denen die etcd-Version 3.4.13 oder niedriger ausgeführt wird, kann es zu einem Watch-Mangel und nicht operativen Ressourcen-Uhren kommen, was zu folgenden Problemen führen kann:
- Pod-Planung ist unterbrochen
- Knoten können nicht registriert werden
- Kubelet beobachtet keine Pod-Änderungen
Diese Probleme können dazu führen, dass der Cluster nicht mehr funktioniert.
Dieses Problem wurde in den GKE on VMware-Releases 1.12.7, 1.13.6, 1.14.3 und nachfolgenden Releases behoben. Diese neueren Releases verwenden die etcd-Version 3.4.21. Von diesem Problem sind alle früheren Versionen von GKE on VMware betroffen.
Problemumgehung
Wenn Sie kein sofortiges Upgrade durchführen können, können Sie das Risiko eines Clusterausfalls verringern, indem Sie die Anzahl der Knoten im Cluster reduzieren. Entfernen Sie Knoten, bis der Messwert etcd_network_client_grpc_sent_bytes_total unter 300 Mbit/s liegt.
So rufen Sie diesen Messwert im Metrics Explorer auf:
- Rufen Sie in der Google Cloud Console den Metrics Explorer auf:
Zum Metrics Explorer
- Wählen Sie den Tab Konfiguration aus.
- Maximieren Sie Messwert auswählen, geben Sie
Kubernetes Container in die Filterleiste ein und wählen Sie dann über die Untermenüs den Messwert aus:
- Wählen Sie im Menü Aktive Ressourcen die Option Kubernetes-Container aus.
- Wählen Sie im Menü Aktive Messwertkategorien die Option Anthos aus.
- Wählen Sie im Menü Aktive Messwerte die Option
etcd_network_client_grpc_sent_bytes_total aus.
- Klicken Sie auf „Anwenden“.
|
Upgrades und Updates |
1.10, 1.11, 1.12, 1.13 und 1.14 |
GKE Identity Service kann Latenzen der Steuerungsebene verursachen.
Bei Clusterneustarts oder ‐upgrades kann der GKE Identity Service mit Traffic überlastet werden, der aus abgelaufenen JWT-Tokens besteht, die über den Authentifizierungs-Webhook von kube-apiserver an GKE Identity Service weitergeleitet werden. Der GKE Identity Service führt zwar keine Absturzschleife durch, reagiert jedoch nicht mehr und stellt keine weiteren Anfragen mehr bereit.
Dieses Problem führt letztendlich zu höheren Latenzen der Steuerungsebene.
Dieses Problem wurde in den folgenden GKE on VMware-Releases behoben:
So finden Sie heraus, ob Sie von diesem Problem betroffen sind:
- Prüfen Sie, ob der Endpunkt des GKE Identity Service extern erreichbar ist:
curl -s -o /dev/null -w "%{http_code}" \
-X POST https://CLUSTER_ENDPOINT/api/v1/namespaces/anthos-identity-service/services/https:ais:https/proxy/authenticate -d '{}'
Ersetzen Sie CLUSTER_ENDPOINT durch die virtuelle IP-Adresse der Steuerungsebene und den Load-Balancer-Port der Steuerungsebene für Ihren Cluster (z. B. 172.16.20.50:443 ).
Wenn Sie von diesem Problem betroffen sind, gibt der Befehl den Statuscode 400 zurück. Wenn das Zeitlimit für die Anfrage überschritten wird, starten Sie den Pod ais neu und führen Sie den Befehl curl noch einmal aus, um zu sehen, ob das Problem dadurch behoben wird. Wenn Sie den Statuscode 000 erhalten, wurde das Problem behoben und Sie sind fertig. Wenn Sie weiterhin den Statuscode 400 erhalten, wird der HTTP-Server des GKE Identity Service nicht gestartet. Fahren Sie in diesem Fall fort.
- Prüfen Sie die Logs von GKE Identity Service und kube-apiserver:
- Prüfen Sie das GKE Identity-Dienstlog:
kubectl logs -f -l k8s-app=ais -n anthos-identity-service \
--kubeconfig KUBECONFIG
Wenn das Protokoll einen Eintrag wie den folgenden enthält, sind Sie von diesem Problem betroffen:
I0811 22:32:03.583448 32 authentication_plugin.cc:295] Stopping OIDC authentication for ???. Unable to verify the OIDC ID token: JWT verification failed: The JWT does not appear to be from this identity provider. To match this provider, the 'aud' claim must contain one of the following audiences:
- Prüfen Sie die
kube-apiserver -Logs für Ihre Cluster:
In den folgenden Befehlen ist KUBE_APISERVER_POD der Name des Pods kube-apiserver im angegebenen Cluster.
Administratorcluster:
kubectl --kubeconfig ADMIN_KUBECONFIG logs \
-n kube-system KUBE_APISERVER_POD kube-apiserver
Nutzercluster:
kubectl --kubeconfig ADMIN_KUBECONFIG logs \
-n USER_CLUSTER_NAME KUBE_APISERVER_POD kube-apiserver
Wenn die kube-apiserver -Logs Einträge wie die folgenden enthalten, sind Sie von diesem Problem betroffen:
E0811 22:30:22.656085 1 webhook.go:127] Failed to make webhook authenticator request: error trying to reach service: net/http: TLS handshake timeout
E0811 22:30:22.656266 1 authentication.go:63] "Unable to authenticate the request" err="[invalid bearer token, error trying to reach service: net/http: TLS handshake timeout]"
Problemumgehung
Wenn Sie Ihre Cluster nicht sofort aktualisieren können, um das Problem zu beheben, können Sie die betroffenen Pods identifizieren und neu starten:
- Erhöhen Sie die Ausführlichkeitsstufe des GKE Identity Service auf 9:
kubectl patch deployment ais -n anthos-identity-service --type=json \
-p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", \
"value":"--vmodule=cloud/identity/hybrid/charon/*=9"}]' \
--kubeconfig KUBECONFIG
- Prüfen Sie das GKE Identity Service-Log auf den ungültigen Tokenkontext:
kubectl logs -f -l k8s-app=ais -n anthos-identity-service \
--kubeconfig KUBECONFIG
- Parsen Sie jedes zugehörige Dienstkonto-Secret mit dem folgenden Befehl, um die Tokennutzlast abzurufen, die mit jedem ungültigen Tokenkontext verknüpft ist:
kubectl -n kube-system get secret SA_SECRET \
--kubeconfig KUBECONFIG \
-o jsonpath='{.data.token}' | base64 --decode
- Um das Token zu decodieren und den Namen und den Namespace des Quell-Pods aufzurufen, kopieren Sie das Token in den Debugger unter jwt.io.
- Starten Sie die in den Tokens identifizierten Pods neu.
|
Vorgang |
1,8, 1,9, 1,10 |
Die Speichernutzung erhöht das Problem von etcd-wartungs-Pods
Die etcd-Wartungs-Pods, die das Image etcddefrag:gke_master_etcddefrag_20210211.00_p0 verwenden, sind betroffen. Mit dem Container „etcddefrag“ wird während jedes Defragmentierungszyklus eine neue Verbindung zum etcd-Server hergestellt. Die alten Verbindungen werden nicht bereinigt.
Workaround:
Option 1: Führen Sie ein Upgrade auf die neueste Patchversion von 1.8 auf 1.11 durch, die die Fehlerkorrektur enthält.
Option 2: Wenn Sie eine Patchversion vor 1.9.6 und 1.10.3 verwenden, müssen Sie den etcd-Wartungs-Pod für Administrator- und Nutzercluster herunterskalieren:
kubectl scale --replicas 0 deployment/gke-master-etcd-maintenance -n USER_CLUSTER_NAME --kubeconfig ADMIN_CLUSTER_KUBECONFIG
kubectl scale --replicas 0 deployment/gke-master-etcd-maintenance -n kube-system --kubeconfig ADMIN_CLUSTER_KUBECONFIG
|
Vorgang |
1,9, 1,10, 1,11, 1,12, 1,13 |
Systemdiagnosen von Pods der Steuerungsebene des Nutzerclusters fehlen
Sowohl der Cluster-Zustandscontroller als auch der Befehl gkectl diagnose cluster führen eine Reihe von Systemdiagnosen aus, einschließlich der Systemdiagnosen der Pods in den Namespaces. Allerdings beginnen sie damit, die Pods der Nutzersteuerungsebene versehentlich zu überspringen. Wenn Sie den v2-Modus der Steuerungsebene verwenden, hat dies keine Auswirkungen auf den Cluster.
Workaround:
Dies hat keine Auswirkungen auf die Arbeitslast- oder Clusterverwaltung. Wenn Sie die Integrität der Pods der Steuerungsebene prüfen möchten, können Sie die folgenden Befehle ausführen:
kubectl get pods -owide -n USER_CLUSTER_NAME --kubeconfig ADMIN_CLUSTER_KUBECONFIG
|
Upgrades und Updates |
1.6+, 1.7+ |
Upgrades von Administratorclustern auf 1.6 und 1.7 können von der Weiterleitung von k8s.gcr.io nach registry.k8s.io betroffen sein
Kubernetes hat den Traffic am 20.03.2023 von k8s.gcr.io zu registry.k8s.io umgeleitet. In GKE on VMware 1.6.x und 1.7.x verwenden die Upgrades des Administratorclusters das Container-Image k8s.gcr.io/pause:3.2 . Wenn Sie einen Proxy für Ihre Administratorworkstation verwenden und der Proxy registry.k8s.io nicht zulässt und das Container-Image k8s.gcr.io/pause:3.2 nicht lokal im Cache gespeichert wird, schlagen die Upgrades des Administratorclusters fehl, wenn das Container-Image abgerufen wird.
Workaround:
Fügen Sie registry.k8s.io der Zulassungsliste des Proxys für Ihre Administratorworkstation hinzu.
|
Netzwerk |
1.10, 1.11, 1.12.0–1.12.6, 1.13.0–1.13.6, 1.14.0–1.14.2 |
Seesaw-Validierungsfehler beim Erstellen des Load-Balancers
gkectl create loadbalancer schlägt mit folgender Fehlermeldung fehl:
- Validation Category: Seesaw LB - [FAILURE] Seesaw validation: xxx cluster lb health check failed: LB"xxx.xxx.xxx.xxx" is not healthy: Get "http://xxx.xxx.xxx.xxx:xxx/healthz": dial tcpxxx.xxx.xxx.xxx:xxx: connect: no route to host
Dies liegt daran, dass die Wippengruppendatei bereits vorhanden ist. Die Preflight-Prüfung versucht, einen nicht vorhandenen Wiederherstellungs-Load-Balancer zu validieren.
Workaround:
Entfernen Sie die vorhandene Seesaw-Gruppendatei für diesen Cluster. Der Dateiname lautet seesaw-for-gke-admin.yaml für den Administratorcluster und seesaw-for-{CLUSTER_NAME}.yaml für einen Nutzercluster.
|
Netzwerk |
1,14 |
Anwendungszeitüberschreitungen, die durch Fehler beim Einfügen von Conntrack-Tabellen verursacht werden
GKE on VMware Version 1.14 ist anfällig für Fehler beim Einfügen von Tabellen mit Netfilter-Verbindungsverfolgung (Conntrack), wenn Sie Ubuntu- oder COS-Betriebssystem-Images verwenden. Einfügungsfehler führen zu zufälligen Anwendungszeitüberschreitungen und können auch dann auftreten, wenn in der Conntrack-Tabelle Platz für neue Einträge vorhanden ist. Die Fehler werden durch Änderungen in Kernel 5.15 und höher verursacht, die das Einfügen von Tabellen je nach Kettenlänge einschränken.
Um herauszufinden, ob Sie von diesem Problem betroffen sind, können Sie mit dem folgenden Befehl die Systemstatistiken des Kernel-Verbindungs-Tracking-Systems auf jedem Knoten überprüfen:
sudo conntrack -S
Die Antwort sieht so aus:
cpu=0 found=0 invalid=4 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=1 found=0 invalid=0 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=2 found=0 invalid=16 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=3 found=0 invalid=13 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=4 found=0 invalid=9 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=5 found=0 invalid=1 insert=0 insert_failed=0 drop=0 early_drop=0 error=519 search_restart=0 clash_resolve=126 chaintoolong=0
...
Wenn ein chaintoolong -Wert in der Antwort eine Zahl ungleich null ist, sind Sie von diesem Problem betroffen.
Problemumgehung
Zur vorläufigen Abhilfe können Sie die Größe der Netfiler-Hash-Tabelle (nf_conntrack_buckets ) und der Netfilter-Verbindungs-Tracking-Tabelle (nf_conntrack_max ) erhöhen. Verwenden Sie die folgenden Befehle auf jedem Clusterknoten, um die Tabellengröße zu erhöhen:
sysctl -w net.netfilter.nf_conntrack_buckets=TABLE_SIZE
sysctl -w net.netfilter.nf_conntrack_max=TABLE_SIZE
Ersetzen Sie TABLE_SIZE durch die neue Größe in Byte. Der Standardwert für die Tabellengröße ist 262144 . Es empfiehlt sich, einen Wert festzulegen, der dem 65.536-Fachen der Anzahl der Kerne auf dem Knoten entspricht. Wenn Ihr Knoten beispielsweise acht Kerne hat, legen Sie die Tabellengröße auf 524288 fest.
|
Netzwerk |
1.13.0-1.13.2 |
Absturzschleife des Calico-Typha- oder anetd-Operators auf Windows-Knoten mit Controlplane v2
Mit Steuerungsebene v2 oder einem neuen Installationsmodell wird calico-typha oder anetd-operator möglicherweise für Windows-Knoten geplant und geraten in eine Absturzschleife.
Der Grund ist, dass die beiden Bereitstellungen alle Markierungen tolerieren, auch die Windows-Knotenmarkierung.
Workaround:
Führen Sie entweder ein Upgrade auf Version 1.13.3 oder höher aus oder führen Sie die folgenden Befehle aus, um die Bereitstellung „calico-typha“ oder „anetd-operator“ zu bearbeiten:
# If dataplane v2 is not used.
kubectl edit deployment -n kube-system calico-typha --kubeconfig USER_CLUSTER_KUBECONFIG
# If dataplane v2 is used.
kubectl edit deployment -n kube-system anetd-operator --kubeconfig USER_CLUSTER_KUBECONFIG
Entferne die folgenden spec.template.spec.tolerations :
- effect: NoSchedule
operator: Exists
- effect: NoExecute
operator: Exists
Fügen Sie außerdem die folgende Toleranz hinzu:
- key: node-role.kubernetes.io/master
operator: Exists
|
Konfiguration |
1.14.0-1.14.2 |
Die Datei mit den Anmeldedaten der privaten Registry des Nutzerclusters kann nicht geladen werden
Sie können möglicherweise keinen Nutzercluster erstellen, wenn Sie den Abschnitt privateRegistry mit den Anmeldedaten fileRef angeben.
Das Preflight kann mit der folgenden Meldung fehlschlagen:
[FAILURE] Docker registry access: Failed to login.
Workaround:
|
Operations |
1.10+ |
Anthos Service Mesh und andere Service Meshes, die nicht mit Dataplane v2 kompatibel sind
Dataplane V2 übernimmt das Load-Balancing und erstellt einen Kernel-Socket anstelle eines paketbasierten DNAT. Dies bedeutet, dass Anthos Service Mesh keine Paketprüfung durchführen kann, da der Pod umgangen wird und nie IPTables verwendet.
Dies zeigt sich im kostenlosen kube-proxy-Modus durch Verbindungsverlust oder falsches Traffic-Routing für Dienste mit Anthos Service Mesh, da der Sidecar keine Paketprüfung durchführen kann.
Dieses Problem tritt in allen Versionen von GKE on Bare Metal 1.10 auf. Für einige neuere Versionen von 1.10 (1.10.2+) gibt es jedoch eine Problemumgehung.
Workaround:
Führen Sie entweder ein Upgrade auf Version 1.11 aus, um die vollständige Kompatibilität zu erhalten, oder führen Sie bei Ausführung von Version 1.10.2 oder höher folgenden Befehl aus:
kubectl edit cm -n kube-system cilium-config --kubeconfig USER_CLUSTER_KUBECONFIG
Fügen Sie der configmap bpf-lb-sock-hostns-only: true hinzu und starten Sie dann das anetd-Daemonset neu:
kubectl rollout restart ds anetd -n kube-system --kubeconfig USER_CLUSTER_KUBECONFIG
|
Speicher |
1.12+, 1.13.3 |
kube-controller-manager trennt nichtflüchtige Volumes möglicherweise nach 6 Minuten erzwungen
Bei kube-controller-manager kann es zu einer Zeitüberschreitung kommen, wenn PV/PVCs nach 6 Minuten getrennt werden und die Verknüpfung erzwungen wird. Detaillierte Logs von kube-controller-manager enthalten Ereignisse wie die folgenden:
$ cat kubectl_logs_kube-controller-manager-xxxx | grep "DetachVolume started" | grep expired
kubectl_logs_kube-controller-manager-gke-admin-master-4mgvr_--container_kube-controller-manager_--kubeconfig_kubeconfig_--request-timeout_30s_--namespace_kube-system_--timestamps:2023-01-05T16:29:25.883577880Z W0105 16:29:25.883446 1 reconciler.go:224] attacherDetacher.DetachVolume started for volume "pvc-8bb4780b-ba8e-45f4-a95b-19397a66ce16" (UniqueName: "kubernetes.io/csi/csi.vsphere.vmware.com^126f913b-4029-4055-91f7-beee75d5d34a") on node "sandbox-corp-ant-antho-0223092-03-u-tm04-ml5m8-7d66645cf-t5q8f"
This volume is not safe to detach, but maxWaitForUnmountDuration 6m0s expired, force detaching
Melden Sie sich beim Knoten an und führen Sie die folgenden Befehle aus, um das Problem zu prüfen:
# See all the mounting points with disks
lsblk -f
# See some ext4 errors
sudo dmesg -T
Im Kubelet-Log werden Fehler wie die folgenden angezeigt:
Error: GetDeviceMountRefs check failed for volume "pvc-8bb4780b-ba8e-45f4-a95b-19397a66ce16" (UniqueName: "kubernetes.io/csi/csi.vsphere.vmware.com^126f913b-4029-4055-91f7-beee75d5d34a") on node "sandbox-corp-ant-antho-0223092-03-u-tm04-ml5m8-7d66645cf-t5q8f" :
the device mount path "/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-8bb4780b-ba8e-45f4-a95b-19397a66ce16/globalmount" is still mounted by other references [/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-8bb4780b-ba8e-45f4-a95b-19397a66ce16/globalmount
Workaround:
Stellen Sie über SSH eine Verbindung zum betroffenen Knoten her und starten Sie den Knoten neu.
|
Upgrades und Updates |
1.12+, 1.13+, 1.14+ |
Clusterupgrade hängt, wenn CSI-Treiber eines Drittanbieters verwendet werden
Sie können einen Cluster möglicherweise nicht upgraden, wenn Sie den CSI-Treiber eines Drittanbieters verwenden. Der Befehl gkectl cluster diagnose gibt möglicherweise den folgenden Fehler zurück:
"virtual disk "kubernetes.io/csi/csi.netapp.io^pvc-27a1625f-29e3-4e4f-9cd1-a45237cc472c" IS NOT attached to machine "cluster-pool-855f694cc-cjk5c" but IS listed in the Node.Status"
Workaround:
Führen Sie das Upgrade mit der Option --skip-validation-all aus.
|
Vorgang |
1.10+, 1.11+, 1.12+, 1.13+, 1.14+ |
gkectl repair admin-master erstellt die Administrator-Master-VM, ohne ein Upgrade der VM-Hardwareversion durchzuführen.
Der über gkectl repair admin-master erstellte Administrator-Master-Knoten verwendet möglicherweise eine niedrigere VM-Hardwareversion als erwartet. Wenn das Problem auftritt, wird der Fehler im gkectl diagnose cluster -Bericht angezeigt.
CSIPrerequisites [VM Hardware]: The current VM hardware versions are lower than vmx-15 which is unexpected. Please contact Anthos support to resolve this issue.
Workaround:
Fahren Sie den Administrator-Master-Knoten herunter und folgen Sie der Anleitung unter https://kb.vmware.com/s/article/1003746, um den Knoten auf die in der Fehlermeldung beschriebene erwartete Version zu aktualisieren, und starten Sie dann den Knoten.
|
Betriebssystem |
1.10+, 1.11+, 1.12+, 1.13+, 1.14+, 1.15+, 1.16+ |
VM gibt beim Herunterfahren/Neustarten das DHCP-Lease unerwartet frei, was zu IP-Änderungen führen kann
In systemd v244 hat systemd-networkd eine Standardverhaltensänderung in der KeepConfiguration -Konfiguration. Vor dieser Änderung haben VMs beim Herunterfahren oder Neustarten keine DHCP-Lease-Release-Nachricht an den DHCP-Server gesendet. Nach dieser Änderung senden VMs eine solche Nachricht und geben die IP-Adressen an den DHCP-Server zurück. Daher kann die freigegebene IP-Adresse einer anderen VM neu zugewiesen und/oder der VM eine andere IP-Adresse zugewiesen werden, was zu einem IP-Konflikt (auf Kubernetes-, nicht auf vSphere-Ebene) und/oder einer IP-Änderung auf den VMs führt, wodurch die Cluster auf verschiedene Weise beeinträchtigt werden können.
Es können beispielsweise die folgenden Symptome angezeigt werden.
- Die vCenter-Benutzeroberfläche zeigt, dass keine VMs dieselbe IP-Adresse verwenden, aber
kubectl get
nodes -o wide gibt Knoten mit doppelten IP-Adressen zurück.
NAME STATUS AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node1 Ready 28h v1.22.8-gke.204 10.180.85.130 10.180.85.130 Ubuntu 20.04.4 LTS 5.4.0-1049-gkeop containerd://1.5.13
node2 NotReady 71d v1.22.8-gke.204 10.180.85.130 10.180.85.130 Ubuntu 20.04.4 LTS 5.4.0-1049-gkeop containerd://1.5.13
- Neue Knoten können aufgrund des
calico-node -Fehlers
2023-01-19T22:07:08.817410035Z 2023-01-19 22:07:08.817 [WARNING][9] startup/startup.go 1135: Calico node 'node1' is already using the IPv4 address 10.180.85.130.
2023-01-19T22:07:08.817514332Z 2023-01-19 22:07:08.817 [INFO][9] startup/startup.go 354: Clearing out-of-date IPv4 address from this node IP="10.180.85.130/24"
2023-01-19T22:07:08.825614667Z 2023-01-19 22:07:08.825 [WARNING][9] startup/startup.go 1347: Terminating
2023-01-19T22:07:08.828218856Z Calico node failed to start nicht gestartet werden
Workaround:
Stellen Sie das folgende DaemonSet auf dem Cluster bereit, um die Änderung des Standardverhaltens für systemd-networkd rückgängig zu machen. Die VMs, auf denen dieses DaemonSet ausgeführt wird, geben die IP-Adressen beim Herunterfahren/Neustart nicht für den DHCP-Server frei. Die IP-Adressen werden nach Ablauf der Leases automatisch vom DHCP-Server freigegeben.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: set-dhcp-on-stop
spec:
selector:
matchLabels:
name: set-dhcp-on-stop
template:
metadata:
labels:
name: set-dhcp-on-stop
spec:
hostIPC: true
hostPID: true
hostNetwork: true
containers:
- name: set-dhcp-on-stop
image: ubuntu
tty: true
command:
- /bin/bash
- -c
- |
set -x
date
while true; do
export CONFIG=/host/run/systemd/network/10-netplan-ens192.network;
grep KeepConfiguration=dhcp-on-stop "${CONFIG}" > /dev/null
if (( $? != 0 )) ; then
echo "Setting KeepConfiguration=dhcp-on-stop"
sed -i '/\[Network\]/a KeepConfiguration=dhcp-on-stop' "${CONFIG}"
cat "${CONFIG}"
chroot /host systemctl restart systemd-networkd
else
echo "KeepConfiguration=dhcp-on-stop has already been set"
fi;
sleep 3600
done
volumeMounts:
- name: host
mountPath: /host
resources:
requests:
memory: "10Mi"
cpu: "5m"
securityContext:
privileged: true
volumes:
- name: host
hostPath:
path: /
tolerations:
- operator: Exists
effect: NoExecute
- operator: Exists
effect: NoSchedule
|
Betrieb, Upgrades und Updates |
1.12.0–1.12.5, 1.13.0–1.13.5, 1.14.0–1.14.1 |
Der Dienstkontoschlüssel für den Komponentenzugriff wurde nach dem Upgrade des Administratorclusters von 1.11.x gelöscht
Dieses Problem betrifft nur Administratorcluster, die von 1.11.x aktualisiert wurden, und keine Administratorcluster, die nach 1.12 neu erstellt werden.
Nach dem Upgrade eines Clusters von 1.11.x auf 1.12.x wird das Feld component-access-sa-key im Secret admin-cluster-creds gelöscht.
Sie können dies mit dem folgenden Befehl prüfen:
kubectl --kubeconfig ADMIN_KUBECONFIG -n kube-system get secret admin-cluster-creds -o yaml | grep 'component-access-sa-key'
Wenn Sie feststellen, dass die Ausgabe leer ist, wurde der Schlüssel gelöscht.
Nachdem der Dienstkontoschlüssel für den Komponentenzugriff gelöscht wurde, können keine neuen Nutzercluster installiert oder vorhandene Nutzercluster aktualisiert werden. Im Folgenden finden Sie einige Fehlermeldungen, die auftreten können:
- Preflight-Fehler bei der langsamen Validierung mit Fehlermeldung:
"Failed
to create the test VMs: failed to get service account key: service
account is not configured."
- Fehler bei der Vorbereitung durch
gkectl prepare und Fehlermeldung: "Failed to prepare OS images: dialing: unexpected end of JSON
input"
- Wenn Sie einen Nutzercluster der Version 1.13 mit der Google Cloud Console oder der gcloud CLI aktualisieren und
gkectl update admin --enable-preview-user-cluster-central-upgrade ausführen, um den Upgrade-Plattform-Controller bereitzustellen, schlägt der Befehl mit der Meldung "failed to download bundle to disk: dialing:
unexpected end of JSON input" fehl. Sie sehen diese Meldung im Feld status in der Ausgabe von kubectl --kubeconfig
ADMIN_KUBECONFIG -n kube-system get onprembundle -oyaml .
Problemumgehung:
Fügen Sie den Dienstkontoschlüssel für den Komponentenzugriff manuell wieder in das Secret ein. Führen Sie dazu den folgenden Befehl aus:
kubectl --kubeconfig ADMIN_KUBECONFIG -n kube-system get secret admin-cluster-creds -ojson | jq --arg casa "$(cat COMPONENT_ACESS_SERVICE_ACOOUNT_KEY_PATH | base64 -w 0)" '.data["component-access-sa-key"]=$casa' | kubectl --kubeconfig ADMIN_KUBECONFIG apply -f -
|
Vorgang |
1.13.0+, 1.14.0+ |
Cluster-Autoscaling funktioniert nicht, wenn Controlplane V2 aktiviert ist
Bei Nutzerclustern, die mit Controlplane V2 oder einem neuen Installationsmodell erstellt wurden, verwenden Knotenpools mit aktiviertem Autoscaling immer ihre autoscaling.minReplicas in der Datei user-cluster.yaml. Das Log des Clusters für Cluster-Autoscaling-Pods zeigt ebenfalls, dass sie fehlerhaft sind.
> kubectl --kubeconfig $USER_CLUSTER_KUBECONFIG -n kube-system \
logs $CLUSTER_AUTOSCALER_POD --container_cluster-autoscaler
TIMESTAMP 1 gkeonprem_provider.go:73] error getting onpremusercluster ready status: Expected to get a onpremusercluster with id foo-user-cluster-gke-onprem-mgmt/foo-user-cluster
TIMESTAMP 1 static_autoscaler.go:298] Failed to get node infos for groups: Expected to get a onpremusercluster with id foo-user-cluster-gke-onprem-mgmt/foo-user-cluster
Der Cluster-Autoscaling-Pod kann durch Ausführen der folgenden Befehle ermittelt werden.
> kubectl --kubeconfig $USER_CLUSTER_KUBECONFIG -n kube-system \
get pods | grep cluster-autoscaler
cluster-autoscaler-5857c74586-txx2c 4648017n 48076Ki 30s
Problemumgehung:
Deaktivieren Sie Autoscaling in allen Knotenpools mit „gkectl update cluster“, bis Sie ein Upgrade auf eine Version mit dieser Fehlerbehebung ausführen
|
Installation |
1.12.0–1.12.4, 1.13.0–1.13.3, 1.14.0 |
CIDR ist in der IP-Blockdatei nicht zulässig
Wenn Nutzer CIDR in der IP-Blockdatei verwenden, schlägt die Konfigurationsvalidierung mit dem folgenden Fehler fehl:
- Validation Category: Config Check
- [FAILURE] Config: AddressBlock for admin cluster spec is invalid: invalid IP:
172.16.20.12/30
Problemumgehung:
Nehmen Sie einzelne IP-Adressen in die IP-Blockdatei auf, bis Sie ein Upgrade auf eine Version mit dieser Fehlerbehebung ausführen: 1.12.5, 1.13.4, 1.14.1+.
|
Upgrades und Updates |
1.14.0-1.14.1 |
Beim Aktualisieren des Betriebssystem-Image-Typs in der Datei „admin-cluster.yaml“ wird nicht darauf gewartet, dass Maschinen der Nutzersteuerungsebene neu erstellt werden
Wenn Sie in der Datei „admin-cluster.yaml“ den Betriebssystem-Image-Typ der Steuerungsebene aktualisieren und der entsprechende Nutzercluster über Controlplane V2 erstellt wurde, wird die Neuerstellung der Maschinen der Nutzersteuerungsebene möglicherweise nicht abgeschlossen, wenn der Befehl „gkectl“ abgeschlossen ist.
Problemumgehung:
Warten Sie nach Abschluss des Updates, bis die Maschinen der Nutzersteuerungsebene ebenfalls neu erstellt wurden. Überwachen Sie dazu die Image-Typen des Knotenbetriebs mit kubectl --kubeconfig USER_KUBECONFIG get nodes -owide . Wenn Sie beispielsweise ein Update von Ubuntu auf COS durchführen, sollten wir warten, bis alle Maschinen der Steuerungsebene vollständig von Ubuntu zu COS gewechselt sind, auch wenn der Aktualisierungsbefehl abgeschlossen ist.
|
Vorgang |
1.10, 1.11, 1.12, 1.13, 1.14.0 |
Fehler beim Erstellen oder Löschen von Pods aufgrund eines Problems mit dem Authentifizierungstoken für das Calico CNI-Dienstkonto
Ein Problem mit Calico in GKE on VMware 1.14.0 führt dazu, dass das Erstellen und Löschen von Pods mit der folgenden Fehlermeldung in der Ausgabe von kubectl describe pods fehlschlägt:
error getting ClusterInformation: connection is unauthorized: Unauthorized
Dieses Problem tritt erst 24 Stunden nach dem Erstellen oder Aktualisieren des Clusters mit Calico auf 1.14 auf.
Administratorcluster verwenden immer Calico, während für Nutzercluster das Konfigurationsfeld „enableDataPlaneV2“ in der Datei „user-cluster.yaml“ vorhanden ist. Wenn dieses Feld auf „false“ gesetzt oder nicht angegeben ist, bedeutet dies, dass Sie Calico im Nutzercluster verwenden.
Der install-cni -Container des Knotens erstellt eine kubeconfig-Datei mit einem Token, das 24 Stunden lang gültig ist. Dieses Token muss regelmäßig vom Pod calico-node erneuert werden. Der Pod calico-node kann das Token nicht verlängern, da er keinen Zugriff auf das Verzeichnis hat, das die kubeconfig-Datei auf dem Knoten enthält.
Workaround:
Dieses Problem wurde in GKE on VMware Version 1.14.1 behoben. Führen Sie ein Upgrade auf diese oder eine höhere Version durch.
Wenn Sie nicht sofort ein Upgrade durchführen können, wenden Sie den folgenden Patch auf das DaemonSet calico-node in Ihrem Administrator- und Nutzercluster an:
kubectl -n kube-system get daemonset calico-node \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG -o json \
| jq '.spec.template.spec.containers[0].volumeMounts += [{"name":"cni-net-dir","mountPath":"/host/etc/cni/net.d"}]' \
| kubectl apply --kubeconfig ADMIN_CLUSTER_KUBECONFIG -f -
kubectl -n kube-system get daemonset calico-node \
--kubeconfig USER_CLUSTER_KUBECONFIG -o json \
| jq '.spec.template.spec.containers[0].volumeMounts += [{"name":"cni-net-dir","mountPath":"/host/etc/cni/net.d"}]' \
| kubectl apply --kubeconfig USER_CLUSTER_KUBECONFIG -f -
Ersetzen Sie Folgendes:
ADMIN_CLUSTER_KUBECONFIG : der Pfad der kubeconfig-Datei des Administratorclusters.
USER_CLUSTER_CONFIG_FILE : der Pfad Ihrer Nutzercluster-Konfigurationsdatei.
|
Installation |
1.12.0–1.12.4, 1.13.0–1.13.3, 1.14.0 |
IP-Block-Validierung schlägt bei Verwendung von CIDR fehl
Der Cluster kann nicht erstellt werden, obwohl der Nutzer die richtige Konfiguration hat. Der Nutzer sieht, dass die Erstellung fehlschlägt, weil der Cluster nicht genügend IP-Adressen hat.
Problemumgehung:
Teilen Sie CIDRs in mehrere kleinere CIDR-Blöcke auf, z. B. aus 10.0.0.0/30 zu 10.0.0.0/31, 10.0.0.2/31 . Es sollte ausreichend sein, solange N+1 CIDRs vorhanden sind, wobei N die Anzahl der Knoten im Cluster ist.
|
Betrieb, Upgrades und Updates |
1.11.0–1.11.1, 1.10.0–1.10.4, 1.9.0–1.9.6 |
Die Sicherung des Administratorclusters enthält nicht die Verschlüsselungsschlüssel und Konfiguration von Always-on-Secrets
Wenn das Feature zur Verschlüsselung von immer aktiven Secrets zusammen mit der Clustersicherung aktiviert ist, enthält die Sicherung des Administratorclusters nicht die Verschlüsselungsschlüssel und die Konfiguration, die für die Verschlüsselung durch immer aktive Secrets erforderlich sind. Daher führt das Reparieren des Admin-Masters mit dieser Sicherung mit gkectl repair admin-master --restore-from-backup zu folgendem Fehler:
Validating admin master VM xxx ...
Waiting for kube-apiserver to be accessible via LB VIP (timeout "8m0s")... ERROR
Failed to access kube-apiserver via LB VIP. Trying to fix the problem by rebooting the admin master
Waiting for kube-apiserver to be accessible via LB VIP (timeout "13m0s")... ERROR
Failed to access kube-apiserver via LB VIP. Trying to fix the problem by rebooting the admin master
Waiting for kube-apiserver to be accessible via LB VIP (timeout "18m0s")... ERROR
Failed to access kube-apiserver via LB VIP. Trying to fix the problem by rebooting the admin master
Behelfslösung:
- Verwenden Sie die gkectl-Binärdatei der neuesten verfügbaren Patchversion für die entsprechende Nebenversion, um die Sicherung des Administratorclusters nach kritischen Clustervorgängen auszuführen. Wenn auf dem Cluster beispielsweise Version 1.10.2 ausgeführt wird, verwenden Sie das Binärprogramm 1.10.5 „gkectl“, um eine manuelle Sicherung des Administratorclusters durchzuführen, wie unter Administratorcluster mit gkectl sichern und wiederherstellen beschrieben.
|
Betrieb, Upgrades und Updates |
1.10+ |
Die Administrator-Master-VM mit einem neuen Bootlaufwerk (z.B. gkectl repair admin-master ) schlägt fehl, wenn das Feature zur Verschlüsselung von immer aktiven Secrets mit dem Befehl „gkectl update“ aktiviert wird.
Wenn das Feature zur Verschlüsselung von immer aktiven Secrets beim Erstellen des Clusters nicht, aber später mit dem gkectl update -Vorgang aktiviert ist, kann gkectl repair admin-master den Knoten der Steuerungsebene des Administratorclusters nicht reparieren. Es wird empfohlen, das Feature zur Verschlüsselung von immer aktiven Secrets bei der Clustererstellung zu aktivieren. Es gibt derzeit keine Abhilfe.
|
Upgrades und Updates |
1.10 |
Durch ein Upgrade des ersten Nutzerclusters von 1.9 auf 1.10 werden Knoten in anderen Nutzerclustern neu erstellt
Durch ein Upgrade des ersten Nutzerclusters von 1.9 auf 1.10 könnten Knoten in anderen Nutzerclustern unter demselben Administratorcluster neu erstellt werden. Die Neuerstellung erfolgt rollierend.
Das disk_label wurde aus MachineTemplate.spec.template.spec.providerSpec.machineVariables entfernt, wodurch unerwartet ein Update für alle MachineDeployment ausgelöst wurde.
Workaround:
Umgehungsschritte ansehen
- Skalieren Sie das Replikat von
clusterapi-controllers für alle Nutzercluster auf 0.
kubectl scale --replicas=0 -n=USER_CLUSTER_NAME deployment/clusterapi-controllers --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Führen Sie für jeden Nutzercluster ein Upgrade durch.
|
Upgrades und Updates |
1.10.0 |
Docker wird nach dem Clusterupgrade häufig neu gestartet
Ein Upgrade des Nutzerclusters auf 1.10.0 kann zu häufigen Docker-Neustarts führen.
Sie können dieses Problem erkennen, indem Sie kubectl describe node NODE_NAME --kubeconfig USER_CLUSTER_KUBECONFIG ausführen
Eine Knotenbedingung zeigt an, ob der Docker häufig neu gestartet wird. Hier ist eine Beispielausgabe:
Normal FrequentDockerRestart 41m (x2 over 141m) systemd-monitor Node condition FrequentDockerRestart is now: True, reason: FrequentDockerRestart
Um die Ursache zu verstehen, müssen Sie eine SSH-Verbindung zu dem Knoten herstellen, auf dem das Symptom auftritt, und Befehle wie sudo journalctl --utc -u docker oder sudo journalctl -x ausführen.
Workaround:
|
Upgrades und Updates |
1,11, 1,12 |
Selbst bereitgestellte GMP-Komponenten werden nach dem Upgrade auf Version 1.12 nicht beibehalten
Wenn Sie eine GKE on VMware-Version unter 1.12 verwenden und manuell Komponenten von Google-verwaltetem Prometheus (GMP) im Namespace gmp-system für Ihren Cluster eingerichtet haben, werden die Komponenten beim Upgrade auf Version 1.12.x nicht beibehalten.
Ab Version 1.12 werden GMP-Komponenten im gmp-system -Namespace und in CRDs vom stackdriver -Objekt verwaltet, wobei das Flag enableGMPForApplications standardmäßig auf false gesetzt ist. Wenn Sie vor dem Upgrade auf 1.12 GMP-Komponenten im Namespace manuell bereitstellen, werden die Ressourcen von stackdriver gelöscht.
Workaround:
|
Vorgang |
1.11, 1.12, 1.13.0–1.13.1 |
Fehlende ClusterAPI-Objekte im Cluster-Snapshot-Szenario system
Im system -Szenario enthält der Cluster-Snapshot keine Ressourcen unter dem Namespace default .
Einige Kubernetes-Ressourcen wie Cluster API-Objekte, die sich unter diesem Namespace befinden, enthalten jedoch nützliche Informationen zur Fehlerbehebung. Der Cluster-Snapshot sollte sie enthalten.
Workaround:
Sie können die folgenden Befehle manuell ausführen, um die Informationen zur Fehlerbehebung zu erfassen.
export KUBECONFIG=USER_CLUSTER_KUBECONFIG
kubectl get clusters.cluster.k8s.io -o yaml
kubectl get controlplanes.cluster.k8s.io -o yaml
kubectl get machineclasses.cluster.k8s.io -o yaml
kubectl get machinedeployments.cluster.k8s.io -o yaml
kubectl get machines.cluster.k8s.io -o yaml
kubectl get machinesets.cluster.k8s.io -o yaml
kubectl get services -o yaml
kubectl describe clusters.cluster.k8s.io
kubectl describe controlplanes.cluster.k8s.io
kubectl describe machineclasses.cluster.k8s.io
kubectl describe machinedeployments.cluster.k8s.io
kubectl describe machines.cluster.k8s.io
kubectl describe machinesets.cluster.k8s.io
kubectl describe services
, wobei:
USER_CLUSTER_KUBECONFIG ist die kubeconfig-Datei des Nutzerclusters.
|
Upgrades und Updates |
1.11.0–1.11.4, 1.12.0–1.12.3, 1.13.0–1.13.1 |
Das Löschen von Nutzerclustern bleibt im Knotenausgleich für die vSAN-Einrichtung hängen
Beim Löschen, Aktualisieren oder Aktualisieren eines Nutzerclusters kann der Knotenausgleich in den folgenden Szenarien hängen bleiben:
- Der Administratorcluster verwendet den vSphere-CSI-Treiber seit Version 1.12.x unter vSAN und
- Im Administrator- und Nutzercluster werden keine PVC/PV-Objekte von integrierten vSphere-Plug-ins erstellt.
Führen Sie den folgenden Befehl aus, um das Symptom zu identifizieren:
kubectl logs clusterapi-controllers-POD_NAME_SUFFIX --kubeconfig ADMIN_KUBECONFIG -n USER_CLUSTER_NAMESPACE
Hier ist ein Beispiel für eine Fehlermeldung des obigen Befehls:
E0920 20:27:43.086567 1 machine_controller.go:250] Error deleting machine object [MACHINE]; Failed to delete machine [MACHINE]: failed to detach disks from VM "[MACHINE]": failed to convert disk path "kubevols" to UUID path: failed to convert full path "ds:///vmfs/volumes/vsan:[UUID]/kubevols": ServerFaultCode: A general system error occurred: Invalid fault
kubevols ist das Standardverzeichnis für den integrierten vSphere-Treiber. Wenn keine PVC/PV-Objekte erstellt werden, tritt möglicherweise der Fehler auf, dass der Knotenausgleich beim Ermitteln von kubevols hängt, da die aktuelle Implementierung davon ausgeht, dass kubevols immer vorhanden ist.
Workaround:
Erstellen Sie das Verzeichnis kubevols im Datenspeicher, in dem der Knoten erstellt wird. Dies wird im Feld vCenter.datastore in den Dateien user-cluster.yaml oder admin-cluster.yaml definiert.
|
Konfiguration |
1,7, 1,8, 1,9, 1,10, 1,11, 1,12, 1,13, 1,14 |
Cluster Autoscaler Clusterrolebinding und clusterrole werden nach dem Löschen eines Nutzerclusters gelöscht.
Beim Löschen eines Nutzerclusters werden die entsprechenden clusterrole und clusterrolebinding für Cluster-Autoscaling ebenfalls gelöscht. Dies wirkt sich auf alle anderen Nutzercluster im selben Administratorcluster mit aktiviertem Cluster-Autoscaling aus. Das liegt daran, dass dieselbe clusterrole und clusterrolebinding für alle Cluster-Autoscaling-Pods innerhalb desselben Administratorclusters verwendet werden.
Die Symptome sind folgende:
kubectl logs --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system \
cluster-autoscaler
, wobei ADMIN_CLUSTER_KUBECONFIG die kubeconfig-Datei des Administratorclusters ist.
Hier ein Beispiel für Fehlermeldungen, die möglicherweise angezeigt werden:
2023-03-26T10:45:44.866600973Z W0326 10:45:44.866463 1 reflector.go:424] k8s.io/client-go/dynamic/dynamicinformer/informer.go:91: failed to list *unstructured.Unstructured: onpremuserclusters.onprem.cluster.gke.io is forbidden: User "..." cannot list resource "onpremuserclusters" in API group "onprem.cluster.gke.io" at the cluster scope
2023-03-26T10:45:44.866646815Z E0326 10:45:44.866494 1 reflector.go:140] k8s.io/client-go/dynamic/dynamicinformer/informer.go:91: Failed to watch *unstructured.Unstructured: failed to list *unstructured.Unstructured: onpremuserclusters.onprem.cluster.gke.io is forbidden: User "..." cannot list resource "onpremuserclusters" in API group "onprem.cluster.gke.io" at the cluster scope
Workaround:
Umgehungsschritte ansehen
Prüfen, ob „clusterrole“ und „clusterrolebinding“ im Administratorcluster fehlen
-
kubectl get clusterrolebindings --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system | grep cluster-autoscaler
-
kubectl get clusterrole --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system | grep cluster-autoscaler
Wenden Sie die folgende clusterrole und clusterrolebinding auf den Administratorcluster an, falls diese fehlen. Fügen Sie die Dienstkonto-Betreffe der clusterrolebinding für jeden Nutzercluster hinzu.
-
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-autoscaler
rules:
- apiGroups: ["cluster.k8s.io"]
resources: ["clusters"]
verbs: ["get", "list", "watch"]
- apiGroups: ["cluster.k8s.io"]
resources: ["machinesets","machinedeployments", "machinedeployments/scale","machines"]
verbs: ["get", "list", "watch", "update", "patch"]
- apiGroups: ["onprem.cluster.gke.io"]
resources: ["onpremuserclusters"]
verbs: ["get", "list", "watch"]
- apiGroups:
- coordination.k8s.io
resources:
- leases
resourceNames: ["cluster-autoscaler"]
verbs:
- get
- list
- watch
- create
- update
- patch
- apiGroups:
- ""
resources:
- nodes
verbs: ["get", "list", "watch", "update", "patch"]
- apiGroups:
- ""
resources:
- pods
verbs: ["get", "list", "watch"]
- apiGroups:
- ""
resources:
- pods/eviction
verbs: ["create"]
# read-only access to cluster state
- apiGroups: [""]
resources: ["services", "replicationcontrollers", "persistentvolumes", "persistentvolumeclaims"]
verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
resources: ["daemonsets", "replicasets"]
verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
resources: ["statefulsets"]
verbs: ["get", "list", "watch"]
- apiGroups: ["batch"]
resources: ["jobs"]
verbs: ["get", "list", "watch"]
- apiGroups: ["policy"]
resources: ["poddisruptionbudgets"]
verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses", "csinodes"]
verbs: ["get", "list", "watch"]
# misc access
- apiGroups: [""]
resources: ["events"]
verbs: ["create", "update", "patch"]
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["create"]
- apiGroups: [""]
resources: ["configmaps"]
resourceNames: ["cluster-autoscaler-status"]
verbs: ["get", "update", "patch", "delete"]
-
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
k8s-app: cluster-autoscaler
name: cluster-autoscaler
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-autoscaler
subjects:
- kind: ServiceAccount
name: cluster-autoscaler
namespace: NAMESPACE_OF_USER_CLUSTER_1
- kind: ServiceAccount
name: cluster-autoscaler
namespace: NAMESPACE_OF_USER_CLUSTER_2
...
|
Konfiguration |
1,7, 1,8, 1,9, 1,10, 1,11, 1,12, 1,13 |
Administratorcluster cluster-health-controller und vsphere-metrics-exporter funktionieren nach dem Löschen des Nutzerclusters nicht
Beim Löschen eines Nutzerclusters wird auch der entsprechende clusterrole gelöscht. Dies führt dazu, dass die automatische Reparatur und der Export von vSphere-Messwerten nicht funktioniert.
Die Symptome sind folgende:
cluster-health-controller -Logs
kubectl logs --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system \
cluster-health-controller
, wobei ADMIN_CLUSTER_KUBECONFIG die kubeconfig-Datei des Administratorclusters ist.
Hier ein Beispiel für Fehlermeldungen, die möglicherweise angezeigt werden:
error retrieving resource lock default/onprem-cluster-health-leader-election: configmaps "onprem-cluster-health-leader-election" is forbidden: User "system:serviceaccount:kube-system:cluster-health-controller" cannot get resource "configmaps" in API group "" in the namespace "default": RBAC: clusterrole.rbac.authorization.k8s.io "cluster-health-controller-role" not found
vsphere-metrics-exporter -Logs
kubectl logs --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system \
vsphere-metrics-exporter
, wobei ADMIN_CLUSTER_KUBECONFIG die kubeconfig-Datei des Administratorclusters ist.
Hier ein Beispiel für Fehlermeldungen, die möglicherweise angezeigt werden:
vsphere-metrics-exporter/cmd/vsphere-metrics-exporter/main.go:68: Failed to watch *v1alpha1.Cluster: failed to list *v1alpha1.Cluster: clusters.cluster.k8s.io is forbidden: User "system:serviceaccount:kube-system:vsphere-metrics-exporter" cannot list resource "clusters" in API group "cluster.k8s.io" in the namespace "default"
Workaround:
Umgehungsschritte ansehen
Wenden Sie die folgende YAML-Datei auf den Administratorcluster an
- Für vsphere-metrics-exporter
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: vsphere-metrics-exporter
rules:
- apiGroups:
- cluster.k8s.io
resources:
- clusters
verbs: [get, list, watch]
- apiGroups:
- ""
resources:
- nodes
verbs: [get, list, watch]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
k8s-app: vsphere-metrics-exporter
name: vsphere-metrics-exporter
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: vsphere-metrics-exporter
subjects:
- kind: ServiceAccount
name: vsphere-metrics-exporter
namespace: kube-system
Für cluster-health-controller
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-health-controller-role
rules:
- apiGroups:
- "*"
resources:
- "*"
verbs:
- "*"
|
Konfiguration |
1.12.1–1.12.3, 1.13.0–1.13.2 |
gkectl check-config schlägt bei der Betriebssystem-Image-Validierung fehl
Ein bekanntes Problem, bei dem die gkectl check-config fehlschlagen kann, ohne gkectl prepare auszuführen. Das ist verwirrend, da wir empfehlen, den Befehl vor dem gkectl prepare auszuführen.
Das Symptom ist, dass der Befehl gkectl check-config mit der folgenden Fehlermeldung fehlschlägt:
Validator result: {Status:FAILURE Reason:os images [OS_IMAGE_NAME] don't exist, please run `gkectl prepare` to upload os images. UnhealthyResources:[]}
Workaround:
Option 1: Führen Sie gkectl prepare aus, um die fehlenden Betriebssystem-Images hochzuladen.
Option 2: Verwenden Sie gkectl check-config --skip-validation-os-images , um die Validierung der Betriebssystem-Images zu überspringen.
|
Upgrades und Updates |
1,11, 1,12, 1,13 |
gkectl update admin/cluster kann Anti-Affinitätsgruppen nicht aktualisieren
Ein bekanntes Problem, bei dem der gkectl update admin/cluster beim Aktualisieren von anti affinity groups fehlschlägt.
Das Symptom ist, dass der Befehl gkectl update mit der folgenden Fehlermeldung fehlschlägt:
Waiting for machines to be re-deployed... ERROR
Exit with error:
Failed to update the cluster: timed out waiting for the condition
Workaround:
Umgehungsschritte ansehen
Damit das Update wirksam wird, müssen die Maschinen after nach dem fehlgeschlagenen Update neu erstellt werden.
Zum Aktualisieren des Administratorclusters müssen Nutzermaster- und Administrator-Add-on-Knoten neu erstellt werden
Zum Aktualisieren von Nutzerclustern müssen Worker-Knoten neu erstellt werden
So erstellen Sie Nutzer-Worker-Knoten neu
Option 1 Führen Sie die Schritte zum Aktualisieren eines Knotenpools aus und ändern Sie die CPU oder den Arbeitsspeicher, um eine rollierende Neuerstellung der Knoten auszulösen.
Option 2 Sie verwenden „kubectl delete“, um die Maschinen einzeln neu zu erstellen.
kubectl delete machines MACHINE_NAME --kubeconfig USER_KUBECONFIG
Masterknoten des Nutzers neu erstellen
Option 1 Folgen Sie der Anleitung zum Anpassen der Größe der Steuerungsebene und ändern Sie die CPU oder den Arbeitsspeicher, um eine rollierende Neuerstellung der Knoten auszulösen.
Option 2 Sie verwenden „kubectl delete“, um die Maschinen einzeln neu zu erstellen.
kubectl delete machines MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG
Administrator-Add-on-Knoten neu erstellen
Verwenden Sie kubectl delete, um die Maschinen einzeln neu zu erstellen.
kubectl delete machines MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG
|
Installation, Upgrades und Updates |
1.13.0–1.13.8, 1.14.0–1.14.4, 1.15.0 |
Die Knotenregistrierung schlägt während der Clustererstellung, des Upgrades, der Aktualisierung und der automatischen Knotenreparatur fehl, wenn ipMode.type den Wert static hat und der konfigurierte Hostname in der IP-Blockdatei einen oder mehrere Punkte enthält. In diesem Fall werden Zertifikatsignierungsanfragen (Certificate Signing Request, CSR) für einen Knoten nicht automatisch genehmigt.
Führen Sie den folgenden Befehl aus, um die ausstehenden CSRs für einen Knoten anzuzeigen:
kubectl get csr -A -o wide
Prüfen Sie die folgenden Logs auf Fehlermeldungen:
- Sehen Sie sich die Logs im Administratorcluster für den Container
clusterapi-controller-manager im Pod clusterapi-controllers an:
kubectl logs clusterapi-controllers-POD_NAME \
-c clusterapi-controller-manager -n kube-system \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG
- Führen Sie den folgenden Befehl aus, um dieselben Logs im Nutzercluster aufzurufen:
kubectl logs clusterapi-controllers-POD_NAME \
-c clusterapi-controller-manager -n USER_CLUSTER_NAME \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG
Dabei gilt:
- ADMIN_CLUSTER_KUBECONFIG ist die kubeconfig-Datei des Administratorclusters.
- USER_CLUSTER_NAME ist der Name des Nutzerclusters.
Hier ein Beispiel für Fehlermeldungen, die möglicherweise angezeigt werden: "msg"="failed
to validate token id" "error"="failed to find machine for node
node-worker-vm-1" "validate"="csr-5jpx9"
- Sehen Sie sich die
kubelet -Logs auf dem problematischen Knoten an:
journalctl --u kubelet
Hier ein Beispiel für Fehlermeldungen, die möglicherweise angezeigt werden: "Error getting
node" err="node \"node-worker-vm-1\" not found"
Wenn Sie im Feld für den Hostnamen einer IP-Blockdatei einen Domainnamen angeben, werden alle Zeichen nach dem ersten Punkt ignoriert. Wenn Sie den Hostnamen beispielsweise als bob-vm-1.bank.plc angeben, werden der VM-Hostname und der Knotenname auf bob-vm-1 festgelegt.
Wenn die Knoten-ID-Überprüfung aktiviert ist, vergleicht der CSR-Genehmiger den Knotennamen mit dem Hostnamen in der Maschinenspezifikation und kann den Namen nicht abgleichen. Der Genehmiger lehnt die CSR ab und der Knoten kann kein Bootstrapping durchführen.
Workaround:
Nutzercluster
Deaktivieren Sie die Überprüfung der Knoten-ID, indem Sie die folgenden Schritte ausführen:
- Fügen Sie der Konfigurationsdatei des Nutzerclusters die folgenden Felder hinzu:
disableNodeIDVerification: true
disableNodeIDVerificationCSRSigning: true
- Speichern Sie die Datei und aktualisieren Sie den Nutzercluster mit dem folgenden Befehl:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--config USER_CLUSTER_CONFIG_FILE
Ersetzen Sie Folgendes:
ADMIN_CLUSTER_KUBECONFIG : der Pfad der kubeconfig-Datei des Administratorclusters.
USER_CLUSTER_CONFIG_FILE : der Pfad Ihrer Nutzercluster-Konfigurationsdatei.
Administratorcluster
- Öffnen Sie die benutzerdefinierte Ressource
OnPremAdminCluster zum Bearbeiten:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
edit onpremadmincluster -n kube-system
- Fügen Sie der benutzerdefinierten Ressource die folgende Annotation hinzu:
features.onprem.cluster.gke.io/disable-node-id-verification: enabled
- Bearbeiten Sie das Manifest
kube-controller-manager in der Steuerungsebene des Administratorclusters:
- Stellen Sie eine SSH-Verbindung zum Knoten der Steuerungsebene des Administratorclusters her.
- Öffnen Sie das Manifest
kube-controller-manager zum Bearbeiten:
sudo vi /etc/kubernetes/manifests/kube-controller-manager.yaml
- Rufen Sie die Liste der
controllers auf:
--controllers=*,bootstrapsigner,tokencleaner,-csrapproving,-csrsigning
- Aktualisieren Sie diesen Abschnitt wie unten gezeigt:
--controllers=*,bootstrapsigner,tokencleaner
- Öffnen Sie den Deployment Cluster API-Controller zum Bearbeiten:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
edit deployment clusterapi-controllers -n kube-system
- Ändern Sie die Werte von
node-id-verification-enabled und node-id-verification-csr-signing-enabled in false :
--node-id-verification-enabled=false
--node-id-verification-csr-signing-enabled=false
|
Installation, Upgrades und Updates |
1.11.0-1.11.4 |
Startfehler beim Starten der Maschine der Administrator-Steuerungsebene, verursacht durch ein Zertifikatspaket der privaten Registry
Das Erstellen bzw. Upgrade des Administratorclusters hängt dauerhaft im folgenden Log fest und kommt schließlich zu einer Zeitüberschreitung:
Waiting for Machine gke-admin-master-xxxx to become ready...
Das Cluster API-Controller-Log im
externen Cluster-Snapshot enthält das folgende Log:
Invalid value 'XXXX' specified for property startup-data
Hier ist ein Beispieldateipfad für das Cluster API-Controller-Log:
kubectlCommands/kubectl_logs_clusterapi-controllers-c4fbb45f-6q6g6_--container_vsphere-controller-manager_--kubeconfig_.home.ubuntu..kube.kind-config-gkectl_--request-timeout_30s_--namespace_kube-system_--timestamps
VMware has a 64k vApp property size limit. In the identified versions,
the data passed via vApp property is close to the limit. When the private
registry certificate contains a certificate bundle, it may cause the final
data to exceed the 64k limit.
Workaround:
Only include the required certificates in the private registry
certificate file configured in privateRegistry.caCertPath in
the admin cluster config file.
Or upgrade to a version with the fix when available.
|
Networking |
1.10, 1.11.0-1.11.3, 1.12.0-1.12.2, 1.13.0 |
NetworkGatewayNodes marked unhealthy from concurrent
status update conflict
In networkgatewaygroups.status.nodes , some nodes switch
between NotHealthy and Up .
Logs for the ang-daemon Pod running on that node reveal
repeated errors:
2022-09-16T21:50:59.696Z ERROR ANGd Failed to report status {"angNode": "kube-system/my-node", "error": "updating Node CR status: sending Node CR update: Operation cannot be fulfilled on networkgatewaynodes.networking.gke.io \"my-node\": the object has been modified; please apply your changes to the latest version and try again"}
Der Status NotHealthy verhindert, dass der Controller dem Knoten zusätzliche Floating-IP-Adressen zuweist. Dies kann zu einer höheren Belastung anderer Knoten oder zu fehlender Redundanz für Hochverfügbarkeit führen.
Die Dataplane-Aktivität ist ansonsten nicht betroffen.
Ein Konflikt bezüglich des networkgatewaygroup -Objekts führt aufgrund eines Fehlers bei der Wiederholungsverarbeitung dazu, dass einige Statusaktualisierungen fehlschlagen. Wenn zu viele Statusaktualisierungen fehlschlagen, erkennt ang-controller-manager für den Knoten das Zeitlimit für den Heartbeat und markiert den Knoten als NotHealthy .
Der Fehler bei der Wiederholungsbehandlung wurde in späteren Versionen behoben.
Workaround:
Führen Sie ein Upgrade auf eine korrigierte Version aus, falls verfügbar.
|
Upgrades und Updates |
1.12.0–1.12.2, 1.13.0 |
Die Race-Bedingung verhindert das Löschen von Maschinenobjekten während eines Updates oder eines Upgrades
Ein bekanntes Problem, das dazu führen kann, dass das Clusterupgrade oder -update beim Warten auf das Löschen des alten Maschinenobjekts hängen bleibt. Das liegt daran, dass der Finalierer nicht aus dem Maschinenobjekt entfernt werden kann. Dies wirkt sich auf jeden Rolling Update-Vorgang für Knotenpools aus.
Das Problem besteht darin, dass der Befehl gkectl mit der folgenden Fehlermeldung das Zeitlimit überschreitet:
E0821 18:28:02.546121 61942 console.go:87] Exit with error:
E0821 18:28:02.546184 61942 console.go:87] error: timed out waiting for the condition, message: Node pool "pool-1" is not ready: ready condition is not true: CreateOrUpdateNodePool: 1/3 replicas are updated
Check the status of OnPremUserCluster 'cluster-1-gke-onprem-mgmt/cluster-1' and the logs of pod 'kube-system/onprem-user-cluster-controller' for more detailed debugging information.
In den clusterapi-controller -Pod-Logs sehen die Fehler so aus:
$ kubectl logs clusterapi-controllers-[POD_NAME_SUFFIX] -n cluster-1
-c vsphere-controller-manager --kubeconfig [ADMIN_KUBECONFIG]
| grep "Error removing finalizer from machine object"
[...]
E0821 23:19:45.114993 1 machine_controller.go:269] Error removing finalizer from machine object cluster-1-pool-7cbc496597-t5d5p; Operation cannot be fulfilled on machines.cluster.k8s.io "cluster-1-pool-7cbc496597-t5d5p": the object has been modified; please apply your changes to the latest version and try again
Der Fehler wird bei erfolgreichen Ausführungen für dieselbe Maschine mehrere Minuten lang wiederholt, auch ohne dieses Problem. In den meisten Fällen kann er schnell verarbeitet werden, aber in einigen seltenen Fällen kann er mehrere Stunden lang in dieser Race-Bedingung hängen.
Das Problem ist, dass die zugrunde liegende VM bereits in vCenter gelöscht ist, das entsprechende Maschinenobjekt jedoch nicht entfernt werden kann. Es bleibt beim Entfernen des Finalizers aufgrund sehr häufiger Aktualisierungen von anderen Controllern hängen.
Dies kann dazu führen, dass der Befehl gkectl zu einer Zeitüberschreitung führt, der Controller gleicht den Cluster jedoch weiter ab, sodass das Upgrade oder Aktualisierungsvorgang schließlich abgeschlossen wird.
Workaround:
Wir haben verschiedene Möglichkeiten zur Minderung dieses Problems vorbereitet, die von Ihrer Umgebung und Ihren Anforderungen abhängen.
Wenn dieses Problem auftritt und das Upgrade oder Update nach langer Zeit immer noch nicht abgeschlossen werden kann, wenden Sie sich an unser Supportteam, um Unterstützung zu erhalten.
|
Installation, Upgrades und Updates |
1.10.2, 1.11, 1.12, 1.13 |
gkectl : Preflight-Fehler bei der Vorbereitung des Betriebssystem-Image-Validierungs
Befehl gkectl prepare fehlgeschlagen mit:
- Validation Category: OS Images
- [FAILURE] Admin cluster OS images exist: os images [os_image_name] don't exist, please run `gkectl prepare` to upload os images.
Die Preflight-Prüfungen von gkectl prepare enthielten eine falsche Validierung.
Workaround:
Führen Sie denselben Befehl mit dem zusätzlichen Flag --skip-validation-os-images aus.
|
Installation |
1,7, 1,8, 1,9, 1,10, 1,11, 1,12, 1,13 |
Die vCenter-URL mit dem Präfix https:// oder http:// kann zu einem Fehler beim Starten des Clusters führen
Fehler beim Erstellen des Administratorclusters:
Exit with error:
Failed to create root cluster: unable to apply admin base bundle to external cluster: error: timed out waiting for the condition, message:
Failed to apply external bundle components: failed to apply bundle objects from admin-vsphere-credentials-secret 1.x.y-gke.z to cluster external: Secret "vsphere-dynamic-credentials" is invalid:
[data[https://xxx.xxx.xxx.username]: Invalid value: "https://xxx.xxx.xxx.username": a valid config key must consist of alphanumeric characters, '-', '_' or '.'
(e.g. 'key.name', or 'KEY_NAME', or 'key-name', regex used for validation is '[-._a-zA-Z0-9]+'), data[https://xxx.xxx.xxx.password]:
Invalid value: "https://xxx.xxx.xxx.password": a valid config key must consist of alphanumeric characters, '-', '_' or '.'
(e.g. 'key.name', or 'KEY_NAME', or 'key-name', regex used for validation is '[-._a-zA-Z0-9]+')]
Die URL wird als Teil eines geheimen Schlüssels verwendet, der „/“ oder ":" nicht unterstützt.
Workaround:
Entfernen Sie das Präfix https:// oder http:// aus dem Feld vCenter.Address in der YAML-Konfigurationsdatei für Administratorcluster oder Nutzercluster.
|
Installation, Upgrades und Updates |
1,10, 1,11, 1,12, 1,13 |
gkectl prepare Panik auf util.CheckFileExists
Bei gkectl prepare kann bei dem folgenden Stacktrace eine Panik ausgelöst werden:
panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0xde0dfa]
goroutine 1 [running]:
gke-internal.googlesource.com/syllogi/cluster-management/pkg/util.CheckFileExists(0xc001602210, 0x2b, 0xc001602210, 0x2b) pkg/util/util.go:226 +0x9a
gke-internal.googlesource.com/syllogi/cluster-management/gkectl/pkg/config/util.SetCertsForPrivateRegistry(0xc000053d70, 0x10, 0xc000f06f00, 0x4b4, 0x1, 0xc00015b400)gkectl/pkg/config/util/utils.go:75 +0x85
...
Das Problem ist, dass gkectl prepare das private Registry-Zertifikatsverzeichnis mit der falschen Berechtigung erstellt hat.
Workaround:
Führen Sie die folgenden Befehle auf der Administrator-Workstation aus, um dieses Problem zu beheben:
sudo mkdir -p /etc/docker/certs.d/PRIVATE_REGISTRY_ADDRESS
sudo chmod 0755 /etc/docker/certs.d/PRIVATE_REGISTRY_ADDRESS
|
Upgrades und Updates |
1,10, 1,11, 1,12, 1,13 |
gkectl repair admin-master und fortsetzbares Administratorupgrade funktionieren nicht zusammen
Führen Sie nach einem fehlgeschlagenen Upgrade des Administratorclusters nicht gkectl
repair admin-master aus. Dies kann dazu führen, dass nachfolgende Administratorupgrades fehlgeschlagen sind und Probleme wie der Einschaltfehler des Administrator-Masters oder der Zugriff auf die VM auftreten.
Workaround:
Wenn dieses Fehlerszenario bereits aufgetreten ist, wenden Sie sich an den Support.
|
Upgrades und Updates |
1,10; 1,11 |
Ein fortgesetztes Upgrade des Administratorclusters kann dazu führen, dass die VM-Vorlage der Administrator-Steuerungsebene fehlt
Wenn die Maschine der Administrator-Steuerungsebene nach einem fortgesetzten Upgrade-Versuch der Administrator-Steuerungsebene nicht neu erstellt wird, wird die VM-Vorlage der Administrator-Steuerungsebene gelöscht. Die VM-Vorlage der Administrator-Steuerungsebene ist die Vorlage des Administrator-Masters, die zum Wiederherstellen der Maschine der Steuerungsebene mit gkectl
repair admin-master verwendet wird.
Workaround:
Die VM-Vorlage der Administrator-Steuerungsebene wird beim nächsten Upgrade des Administratorclusters neu generiert.
|
Betriebssystem |
1,12, 1,13 |
cgroup v2 kann sich auf Arbeitslasten auswirken
In Version 1.12.0 ist cgroup v2 (unified) standardmäßig für Knoten mit Container-Optimized OS (COS) aktiviert. Dies kann zu Instabilität für Ihre Arbeitslasten in einem COS-Cluster führen.
Workaround:
Wir sind in Version 1.12.1 wieder auf cgroup v1 (hybrid) umgestellt. Wenn Sie COS-Knoten verwenden, empfehlen wir ein Upgrade auf Version 1.12.1, sobald diese veröffentlicht wird.
|
Identität |
1,10, 1,11, 1,12, 1,13 |
Benutzerdefinierte ClientConfig-Ressource
gkectl update macht alle manuellen Änderungen rückgängig, die Sie an der benutzerdefinierten ClientConfig-Ressource vorgenommen haben.
Workaround:
Es wird dringend empfohlen, die ClientConfig-Ressource nach jeder manuellen Änderung zu sichern.
|
Installation |
1,10, 1,11, 1,12, 1,13 |
gkectl check-config -Validierung schlägt fehl: F5 BIG-IP-Partitionen können nicht gefunden werden
Die Validierung schlägt fehl, da F5 BIG-IP-Partitionen nicht gefunden werden können, obwohl sie vorhanden sind.
Ein Problem mit der F5 BIG-IP API kann dazu führen, dass die Validierung fehlschlägt.
Workaround:
Versuchen Sie, gkectl check-config noch einmal auszuführen.
|
Installation |
1.12 |
Die Installation des Nutzerclusters ist aufgrund eines Problems mit der Leader-Auswahl von cert-manager/ca-Injektor fehlgeschlagen
Wenn apiserver/etcd langsam ist, wird möglicherweise ein Installationsfehler aufgrund von cert-manager-cainjector in der Absturzschleife angezeigt:
# These are logs from `cert-manager-cainjector`, from the command
# `kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system
cert-manager-cainjector-xxx`
I0923 16:19:27.911174 1 leaderelection.go:278] failed to renew lease kube-system/cert-manager-cainjector-leader-election: timed out waiting for the condition
E0923 16:19:27.911110 1 leaderelection.go:321] error retrieving resource lock kube-system/cert-manager-cainjector-leader-election-core:
Get "https://10.96.0.1:443/api/v1/namespaces/kube-system/configmaps/cert-manager-cainjector-leader-election-core": context deadline exceeded
I0923 16:19:27.911593 1 leaderelection.go:278] failed to renew lease kube-system/cert-manager-cainjector-leader-election-core: timed out waiting for the condition
E0923 16:19:27.911629 1 start.go:163] cert-manager/ca-injector "msg"="error running core-only manager" "error"="leader election lost"
Workaround:
Umgehungsschritte ansehen
Führen Sie die folgenden Befehle aus, um das Problem zu beheben.
Skalieren Sie zuerst monitoring-operator herunter, damit die Änderungen am Deployment cert-manager nicht rückgängig gemacht werden:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system \
scale deployment monitoring-operator --replicas=0
Bearbeiten Sie das Deployment cert-manager-cainjector , um die Wahl der Leader zu deaktivieren, da nur ein Replikat ausgeführt wird. Für ein einzelnes Replikat ist dies nicht erforderlich:
# Add a command line flag for cainjector: `--leader-elect=false`
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG edit \
-n kube-system deployment cert-manager-cainjector
Das relevante YAML-Snippet für die cert-manager-cainjector -Bereitstellung sollte wie im folgenden Beispiel aussehen:
...
apiVersion: apps/v1
kind: Deployment
metadata:
name: cert-manager-cainjector
namespace: kube-system
...
spec:
...
template:
...
spec:
...
containers:
- name: cert-manager
image: "gcr.io/gke-on-prem-staging/cert-manager-cainjector:v1.0.3-gke.0"
args:
...
- --leader-elect=false
...
Behalten Sie monitoring-operator -Replikate bei 0, um das Problem zu umgehen, bis die Installation abgeschlossen ist. Andernfalls wird die Änderung rückgängig gemacht.
Wenn die Installation abgeschlossen ist und der Cluster einsatzbereit ist, aktivieren Sie monitoring-operator für nachgeordnete Vorgänge:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system \
scale deployment monitoring-operator --replicas=1
Nach jedem Upgrade werden die Änderungen rückgängig gemacht. Führen Sie dieselben Schritte noch einmal aus, um das Problem zu beheben, bis es in einem zukünftigen Release behoben ist.
|
VMware |
1,10, 1,11, 1,12, 1,13 |
vCenter für Versionen unter 7.0U2 neu starten oder aktualisieren
Wenn vCenter bei Versionen vor 7.0U2 nach einem Upgrade oder anderweitig neu gestartet wird, ist der Netzwerkname in den VM-Informationen von vCenter falsch und die Maschine befindet sich im Status Unavailable . Dies führt schließlich dazu, dass die Knoten automatisch repariert werden, um neue zu erstellen.
Ähnlicher govmomi-Fehler.
Workaround:
Diese Problemumgehung wird vom VMware-Support bereitgestellt:
- Das Problem wurde in vCenter-Version 7.0U2 und höher behoben.
- Klicken Sie bei niedrigeren Versionen mit der rechten Maustaste auf den Host und wählen Sie Verbindung > Trennen aus. Stellen Sie als Nächstes die Verbindung wieder her. Dadurch wird eine Aktualisierung der Portgruppe der VM erzwungen.
|
Betriebssystem |
1,10, 1,11, 1,12, 1,13 |
SSH-Verbindung durch Remote-Host geschlossen
Bei GKE on VMware Version 1.7.2 und höher werden die Ubuntu-Betriebssystem-Images mit
CIS L1 Server Benchmark gehärtet.
Damit die CIS-Regel „5.2.16 Sicherstellen, dass das SSH-Leerlaufzeitintervall konfiguriert ist“, hat /etc/ssh/sshd_config die folgenden Einstellungen:
ClientAliveInterval 300
ClientAliveCountMax 0
Diese Einstellungen dienen dazu, eine Clientsitzung nach 5 Minuten Inaktivität zu beenden. Der Wert ClientAliveCountMax 0 führt jedoch zu unerwartetem Verhalten. Wenn Sie die SSH-Sitzung auf der Administratorworkstation oder einem Clusterknoten verwenden, wird die SSH-Verbindung möglicherweise getrennt, auch wenn Ihr SSH-Client nicht inaktiv ist, z. B. beim Ausführen eines zeitaufwendigen Befehls. Der Befehl könnte mit der folgenden Meldung beendet werden:
Connection to [IP] closed by remote host.
Connection to [IP] closed.
Workaround:
Sie haben folgende Möglichkeiten:
Achten Sie darauf, die SSH-Sitzung neu zu verbinden.
|
Installation |
1,10, 1,11, 1,12, 1,13 |
In Konflikt stehende cert-manager -Installation
In Releases von 1.13 installiert monitoring-operator cert-manager im Namespace cert-manager . Wenn Sie aus bestimmten Gründen einen eigenen Cert-Manager installieren müssen, folgen Sie der folgenden Anleitung, um Konflikte zu vermeiden:
Sie müssen diese Problemumgehung nur einmal auf jeden Cluster anwenden. Die Änderungen werden über das Clusterupgrade hinweg beibehalten.
Hinweis: Ein häufiges Symptom bei der Installation eines eigenen cert-managers besteht darin, dass die cert-manager -Version oder das Image (z. B. v1.7.2) möglicherweise auf die ältere Version zurückgesetzt wird. Dies wird verursacht, wenn monitoring-operator versucht, cert-manager abzugleichen, und dabei die Version zurücksetzen.
Workaround:
<pKonflikte während des Upgrades vermeiden
- Deinstallieren Sie Ihre Version von
cert-manager . Wenn Sie Ihre eigenen Ressourcen definiert haben, sollten Sie diese sichern
.
- Führen Sie das Upgrade aus.
- Folgen Sie der Anleitung, um Ihren eigenen
cert-manager wiederherzustellen.
Eigenen cert-manager in Nutzerclustern wiederherstellen
- Skalieren Sie das
monitoring-operator -Deployment auf 0:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
-n USER_CLUSTER_NAME \
scale deployment monitoring-operator --replicas=0
- Skalieren Sie die von
monitoring-operator verwalteten cert-manager -Deployments auf 0:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n cert-manager scale deployment cert-manager --replicas=0
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n cert-manager scale deployment cert-manager-cainjector\
--replicas=0
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n cert-manager scale deployment cert-manager-webhook --replicas=0
- Installiere deine Version von
cert-manager neu.
Stellen Sie Ihre benutzerdefinierten Ressourcen wieder her, falls vorhanden.
- Sie können diesen Schritt überspringen, wenn Sie eine
Upstream-Standardinstallation für cert-manager verwenden oder sich sicher sind, dass Ihr cert-manager im Namespace
cert-manager installiert ist.
Kopieren Sie andernfalls das Zertifikat metrics-ca cert-manager.io/v1 und die Ausstellerressourcen metrics-pki.cluster.local von cert-manager in den Clusterressourcen-Namespace Ihres installierten cert-managers.
relevant_fields='
{
apiVersion: .apiVersion,
kind: .kind,
metadata: {
name: .metadata.name,
namespace: "YOUR_INSTALLED_CERT_MANAGER_NAMESPACE"
},
spec: .spec
}
'
f1=$(mktemp)
f2=$(mktemp)
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
get issuer -n cert-manager metrics-pki.cluster.local -o json \
| jq "${relevant_fields}" > $f1
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
get certificate -n cert-manager metrics-ca -o json \
| jq "${relevant_fields}" > $f2
kubectl apply --kubeconfig USER_CLUSTER_KUBECONFIG -f $f1
kubectl apply --kubeconfig USER_CLUSTER_KUBECONFIG -f $f2
Eigenen cert-manager in Administratorclustern wiederherstellen
Im Allgemeinen sollten Sie cert-manager in Administratorclustern nicht neu installieren müssen, da Administratorcluster nur Arbeitslasten der Steuerungsebene von GKE on VMware ausführen. In den seltenen Fällen, in denen Sie auch Ihren eigenen cert-manager in Administratorclustern installieren müssen, folgen Sie der folgenden Anleitung, um Konflikte zu vermeiden. Hinweis: Wenn Sie Apigee-Kunde sind und nur den cert-manager für Apigee benötigen, müssen Sie die Befehle des Administratorclusters nicht ausführen.
- Skalieren Sie das
monitoring-operator -Deployment auf 0.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
-n kube-system scale deployment monitoring-operator --replicas=0
- Skalieren Sie die von
monitoring-operator verwalteten cert-manager -Deployments auf 0.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
-n cert-manager scale deployment cert-manager \
--replicas=0
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
-n cert-manager scale deployment cert-manager-cainjector \
--replicas=0
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
-n cert-manager scale deployment cert-manager-webhook \
--replicas=0
- Installiere deine Version von
cert-manager neu.
Stellen Sie Ihre benutzerdefinierten Ressourcen wieder her, falls vorhanden.
- Sie können diesen Schritt überspringen, wenn Sie eine
Upstream-Standardinstallation für cert-manager verwenden oder sich sicher sind, dass Ihr cert-manager im Namespace
cert-manager installiert ist.
Kopieren Sie andernfalls das Zertifikat metrics-ca cert-manager.io/v1 und die Ausstellerressourcen metrics-pki.cluster.local von cert-manager in den Clusterressourcen-Namespace Ihres installierten cert-managers.
relevant_fields='
{
apiVersion: .apiVersion,
kind: .kind,
metadata: {
name: .metadata.name,
namespace: "YOUR_INSTALLED_CERT_MANAGER_NAMESPACE"
},
spec: .spec
}
'
f3=$(mktemp)
f4=$(mktemp)
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \n
get issuer -n cert-manager metrics-pki.cluster.local -o json \
| jq "${relevant_fields}" > $f3
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
get certificate -n cert-manager metrics-ca -o json \
| jq "${relevant_fields}" > $f4
kubectl apply --kubeconfig ADMIN_CLUSTER_KUBECONFIG -f $f3
kubectl apply --kubeconfig ADMIN_CLUSTER_KUBECONFIG -f $f4
</p |
Betriebssystem |
1,10, 1,11, 1,12, 1,13 |
Falsch positive Ergebnisse beim Scannen auf Sicherheitslücken in Docker, Containerd und Runc
Die Docker-, containerd- und runc-Images in den mit GKE on VMware enthaltenen Ubuntu-Betriebssystem-Images sind mit Ubuntu PPA an spezielle Versionen angepinnt. Dadurch wird sichergestellt, dass alle Änderungen an der Containerlaufzeit vor jedem Release von GKE on VMware qualifiziert werden.
Die speziellen Versionen sind jedoch dem Ubuntu CVE-Tracker unbekannt, der von verschiedenen CVE-Scantools als Feeds für Sicherheitslücken verwendet wird. Daher werden in Docker-, containerd- und runc-Scans auf Sicherheitslücken falsch positive Meldungen ausgegeben.
In den CVE-Scanergebnissen können beispielsweise die folgenden falsch positiven Ergebnisse angezeigt werden. Diese CVEs wurden bereits in den neuesten Patchversionen von GKE on VMware behoben.
Weitere Informationen zu CVE-Korrekturen finden Sie in den Versionshinweisen.
Workaround:
Canonical ist sich dieses Problem bekannt. Die Fehlerbehebung ist unter
https://github.com/canonical/sec-cvescan/issues/73 einsehbar.
|
Upgrades und Updates |
1,10, 1,11, 1,12, 1,13 |
Die Netzwerkverbindung zwischen Administrator- und Nutzercluster ist während eines Clusterupgrades ohne Hochverfügbarkeit möglicherweise für kurze Zeit nicht verfügbar
Wenn Sie Cluster ohne Hochverfügbarkeit von 1.9 auf 1.10 aktualisieren, stellen Sie möglicherweise fest, dass kubectl exec , kubectl log und der Webhook für Nutzercluster kurzzeitig nicht verfügbar sind. Diese Ausfallzeit kann bis zu einer Minute betragen. Dies liegt daran, dass die eingehende Anfrage (kubectl exec, kubectl log und Webhook) von kube-apiserver für den Nutzercluster verarbeitet wird. Nutzer „kube-apiserver“ ist ein
Statefulset. In einem Cluster ohne Hochverfügbarkeit gibt es nur ein Replikat für das Statefulset. Während des Upgrades kann es also sein, dass der alte kube-apiserver nicht verfügbar ist, während der neue kube-apiserver noch nicht bereit ist.
Workaround:
Diese Ausfallzeit findet nur während des Upgrades statt. Wenn Sie während des Upgrades eine kürzere Ausfallzeit wünschen, empfehlen wir den Wechsel zu Hochverfügbarkeitsclustern.
|
Installation, Upgrades und Updates |
1,10, 1,11, 1,12, 1,13 |
Prüfung der Konnectivity-Bereitschaft in der Hochverfügbarkeitsclusterdiagnose nach der Clustererstellung oder dem Upgrade fehlgeschlagen
Wenn Sie einen Hochverfügbarkeitscluster erstellen oder upgraden und feststellen, dass die Konnectivity Readiness Check in der Clusterdiagnose fehlgeschlagen ist, wirkt sich dies in den meisten Fällen nicht auf die Funktionalität von GKE on VMware aus (kubectl exec, kubectl log und Webhook). Dies liegt daran, dass manchmal ein oder zwei der Konnktivitätsreplikate aufgrund von instabiler Netzwerkverbindung oder anderen Problemen für einen bestimmten Zeitraum unlesbar sind.
Workaround:
Die Konnektivität wird alleine wiederhergestellt. Warten Sie 30 Minuten bis eine Stunde und führen Sie die Clusterdiagnose noch einmal aus.
|
Betriebssystem |
1,7, 1,8, 1,9, 1,10, 1,11 |
/etc/cron.daily/aide -CPU- und Speicherspitzenproblem
Ab Version 1.7.2 von GKE on VMware werden die Ubuntu-Betriebssystem-Images mit CIS L1 Server Benchmark gehärtet.
Daher wurde das Cron-Skript /etc/cron.daily/aide installiert, sodass eine aide -Prüfung geplant wird, um sicherzustellen, dass die CIS L1-Serverregel „1.4.2 Sicherstellen, dass die Dateisystemintegrität regelmäßig überprüft wird“ eingehalten wird.
Der Cronjob wird täglich um 6:25 Uhr (UTC) ausgeführt. Abhängig von der Anzahl der Dateien im Dateisystem können zu dieser Zeit Spitzen bei der CPU- und Arbeitsspeichernutzung auftreten, die durch diesen aide -Prozess verursacht werden.
Workaround:
Wenn die Spitzen Ihre Arbeitslast beeinträchtigen, können Sie den täglichen Cronjob deaktivieren:
sudo chmod -x /etc/cron.daily/aide
|
Netzwerk |
1,10, 1,11, 1,12, 1,13 |
Load-Balancer und zustandsorientierte verteilte NSX-T-Firewallregeln interagieren unvorhersehbar
Beim Bereitstellen von GKE auf VMware Version 1.9 oder höher, wenn das Deployment den gebündelten Seesaw-Load-Balancer in einer Umgebung enthält, die zustandsorientierte verteilte NSX-T-Firewallregeln verwendet, kann stackdriver-operator die ConfigMap gke-metrics-agent-conf möglicherweise nicht erstellen und dazu führen, dass gke-connect-agent -Pods in einer Absturzschleife vorkommen.
Das zugrunde liegende Problem besteht darin, dass die zustandsorientierten verteilten NSX-T-Firewallregeln die Verbindung von einem Client zum Nutzercluster-API-Server über den Seesaw-Load-Balancer beenden, da Seesaw asymmetrische Verbindungsflüsse verwendet. Die Integrationsprobleme mit verteilten NSX-T-Firewallregeln wirken sich auf alle GKE on VMware-Releases aus, die Seesaw verwenden. Bei Ihren eigenen Anwendungen können ähnliche Verbindungsprobleme auftreten, wenn diese große Kubernetes-Objekte mit einer Größe von mehr als 32.000 KB erstellen.
Workaround:
Folgen Sie
dieser Anleitung, um verteilte NSX-T-Firewallregeln zu deaktivieren oder zustandslose verteilte Firewallregeln für Seesaw-VMs zu verwenden.
Wenn Ihre Cluster einen manuellen Load-Balancer verwenden, folgen Sie
dieser Anleitung, um Ihren Load-Balancer so zu konfigurieren, dass Clientverbindungen zurückgesetzt werden, wenn ein Back-End-Knotenfehler erkannt wird. Ohne diese Konfiguration reagieren Clients des Kubernetes API-Servers möglicherweise mehrere Minuten lang, wenn eine Serverinstanz ausfällt.
|
Logging und Monitoring |
1,10, 1,11, 1,12, 1,13, 1,14, 1,15 |
Unerwartetes Monitoring der Abrechnung
Bei den Versionen 1.10 bis 1.15 von GKE on VMware stellten einige Kunden auf der Seite Abrechnung eine unerwartet hohe Abrechnung für Metrics volume fest. Dieses Problem betrifft Sie nur, wenn alle der folgenden Umstände zutreffen:
- Logging und Monitoring von Anwendungen sind aktiviert (
enableStackdriverForApplications=true )
- Anwendungs-Pods haben die Annotation
prometheus.io/scrap=true . (Bei der Installation von Anthos Service Mesh kann diese Annotation auch hinzugefügt werden.)
Wenn Sie prüfen möchten, ob Sie von diesem Problem betroffen sind, Listen Sie Ihre benutzerdefinierten Messwerte auf. Wenn Sie die Abrechnung unerwünschter Messwerte mit dem Namenspräfix external.googleapis.com/prometheus sehen und außerdem enableStackdriverForApplications in der Antwort von kubectl -n kube-system get stackdriver stackdriver -o yaml auf „true“ gesetzt ist, betrifft Sie dieses Problem.
Problemumgehung
Wenn Sie von diesem Problem betroffen sind, empfehlen wir Ihnen, Ihre Cluster auf Version 1.12 oder höher zu aktualisieren, das Flag enableStackdriverForApplications nicht mehr zu verwenden und zur neuen Anwendungsmonitoringlösung managed-service-for-prometheus zu wechseln, die nicht mehr von der Annotation prometheus.io/scrap=true abhängig ist. Mit der neuen Lösung können Sie die Erfassung von Logs und Messwerten für Ihre Anwendungen auch separat über das Flag enableCloudLoggingForApplications bzw. enableGMPForApplications steuern.
Wenn Sie das Flag enableStackdriverForApplications nicht mehr verwenden möchten, öffnen Sie das Stackdriver-Objekt zur Bearbeitung:
kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
Entfernen Sie die Zeile enableStackdriverForApplications: true , speichern und schließen Sie den Editor.
Wenn Sie die anmerkungsbasierte Messwerterfassung nicht verlassen können, gehen Sie so vor:
- Ermitteln Sie die Quell-Pods und -Dienste mit den unerwünschten abgerechneten Messwerten.
kubectl --kubeconfig KUBECONFIG \
get pods -A -o yaml | grep 'prometheus.io/scrape: "true"'
kubectl --kubeconfig KUBECONFIG get \
services -A -o yaml | grep 'prometheus.io/scrape: "true"'
- Entfernen Sie die Annotation
prometheus.io/scrap=true aus dem Pod oder Dienst. Wenn die Annotation von Anthos Service Mesh hinzugefügt wird, sollten Sie Anthos Service Mesh ohne die Prometheus-Option konfigurieren oder das Zusammenführen von Istio-Messwerten deaktivieren.
|
Installation |
1,11, 1,12, 1,13 |
Installation schlägt beim Erstellen des vSphere-Datenlaufwerks fehl
Das Installationsprogramm für GKE on VMware kann fehlschlagen, wenn benutzerdefinierte Rollen an die falsche Berechtigungsebene gebunden sind.
Wenn die Rollenbindung falsch ist, bleibt das Erstellen eines vSphere-Datenlaufwerks mit govc hängen und das Laufwerk wird mit einer Größe von 0 erstellt. Zum Beheben des Problems sollten Sie die benutzerdefinierte Rolle auf der vSphere vCenter-Ebene (Root) binden.
Workaround:
Wenn Sie die benutzerdefinierte Rolle auf der DC-Ebene (oder niedriger als die Root-Ebene) binden möchten, müssen Sie die schreibgeschützte Rolle auch an den Nutzer auf der vCenter-Stammebene binden.
Weitere Informationen zum Erstellen von Rollen finden Sie unter
vCenter-Nutzerkontoberechtigungen.
|
Logging und Monitoring |
1.9.0–1.9.4, 1.10.0–1.10.1 |
Hoher Netzwerktraffic zu „monitoring.googleapis.com“
Unter Umständen wird auch in einem neuen Cluster ohne Nutzerarbeitslasten hoher Netzwerkverkehr zu monitoring.googleapis.com angezeigt.
Dieses Problem betrifft die Versionen 1.10.0-1.10.1 und 1.9.0-1.9.4. Dieses Problem wurde in den Versionen 1.10.2 und 1.9.5 behoben.
Workaround:
Umgehungsschritte ansehen
Führen Sie ein Upgrade auf Version 1.10.2/1.9.5 oder höher aus.
So beheben Sie das Problem bei einer früheren Version:
- „Stackdriver-operator“ herunterskalieren:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system \
scale deployment stackdriver-operator --replicas=0
Ersetzen Sie USER_CLUSTER_KUBECONFIG durch den Pfad der kubeconfig-Datei des Nutzerclusters.
- Öffnen Sie die ConfigMap
gke-metrics-agent-conf zum Bearbeiten:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system \
edit configmap gke-metrics-agent-conf
- Erhöhen Sie das Prüfungsintervall von 0,1 Sekunden auf 13 Sekunden:
processors:
disk_buffer/metrics:
backend_endpoint: https://monitoring.googleapis.com:443
buffer_dir: /metrics-data/nsq-metrics-metrics
probe_interval: 13s
retention_size_mib: 6144
disk_buffer/self:
backend_endpoint: https://monitoring.googleapis.com:443
buffer_dir: /metrics-data/nsq-metrics-self
probe_interval: 13s
retention_size_mib: 200
disk_buffer/uptime:
backend_endpoint: https://monitoring.googleapis.com:443
buffer_dir: /metrics-data/nsq-metrics-uptime
probe_interval: 13s
retention_size_mib: 200
- Schließen Sie die Bearbeitungssitzung.
- Ändern Sie die DaemonSet-Version
gke-metrics-agent in 1.1.0-anthos.8:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system set image daemonset/gke-metrics-agent \
gke-metrics-agent=gcr.io/gke-on-prem-release/gke-metrics-agent:1.1.0-anthos.8
|
Logging und Monitoring |
1,10; 1,11 |
gke-metrics-agent hat häufige CrashLoopBackOff-Fehler
Bei GKE in VMware Version 1.10 und höher weist das DaemonSet „gke-metrics-agent“ häufig CrashLoopBackOff-Fehler auf, wenn „enableStackdriverForApplications“ im Objekt „Stackdriver“ auf „true“ gesetzt ist.
Workaround:
Um dieses Problem zu beheben, deaktivieren Sie die Erfassung von Anwendungsmesswerten, indem Sie die folgenden Befehle ausführen. Diese Befehle deaktivieren die Erfassung von Anwendungslogs nicht.
- Wenn Sie verhindern möchten, dass die folgenden Änderungen rückgängig gemacht werden, skalieren Sie
stackdriver-operator herunter:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system scale deploy stackdriver-operator \
--replicas=0
Ersetzen Sie USER_CLUSTER_KUBECONFIG durch den Pfad der kubeconfig-Datei des Nutzerclusters.
- Öffnen Sie die ConfigMap
gke-metrics-agent-conf zum Bearbeiten:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system edit configmap gke-metrics-agent-conf
- Kommentieren Sie unter
services.pipelines den gesamten Abschnitt metrics/app-metrics aus:
services:
pipelines:
#metrics/app-metrics:
# exporters:
# - googlecloud/app-metrics
# processors:
# - resource
# - metric_to_resource
# - infer_resource
# - disk_buffer/app-metrics
# receivers:
# - prometheus/app-metrics
metrics/metrics:
exporters:
- googlecloud/metrics
processors:
- resource
- metric_to_resource
- infer_resource
- disk_buffer/metrics
receivers:
- prometheus/metrics
- Schließen Sie die Bearbeitungssitzung.
- Starten Sie das DaemonSet
gke-metrics-agent neu:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system rollout restart daemonset gke-metrics-agent
|
Logging und Monitoring |
1,11, 1,12, 1,13 |
Verworfene Messwerte im Dashboard ersetzen
Wenn in Ihren OOTB-Dashboards verworfene Messwerte verwendet werden, werden einige leere Diagramme angezeigt. Führen Sie die folgenden Befehle aus, um verworfene Messwerte in den Monitoring-Dashboards zu finden:
gcloud monitoring dashboards list > all-dashboard.json
# find deprecated metrics
cat all-dashboard.json | grep -E \
'kube_daemonset_updated_number_scheduled\
|kube_node_status_allocatable_cpu_cores\
|kube_node_status_allocatable_pods\
|kube_node_status_capacity_cpu_cores'
Die folgenden eingestellten Messwerte sollten ersetzt werden.
Eingestellte Funktionen | Ersetzen |
kube_daemonset_updated_number_scheduled |
kube_daemonset_status_updated_number_scheduled |
kube_node_status_allocatable_cpu_cores
kube_node_status_allocatable_memory_bytes
kube_node_status_allocatable_pods |
kube_node_status_allocatable |
kube_node_status_capacity_cpu_cores
kube_node_status_capacity_memory_bytes
kube_node_status_capacity_pods |
kube_node_status_capacity |
kube_hpa_status_current_replicas |
kube_horizontalpodautoscaler_status_current_replicas |
Workaround:
Um die eingestellten Messwerte zu ersetzen
- Löschen Sie den „GKE On-Prem-Knotenstatus“ im Google Cloud Monitoring-Dashboard. Installieren Sie den „GKE On-Prem-Knotenstatus“ anhand
dieser Anleitung neu.
- Löschen Sie „GKE On-Prem-Knotenauslastung“ im Google Cloud Monitoring-Dashboard. Installieren Sie die „GKE On-Prem-Knotenauslastung“ anhand
dieser Anleitung neu.
- Löschen Sie den Zustand der GKE On-Prem-vSphere-VM im Google Cloud Monitoring-Dashboard. Installieren Sie den Zustand der GKE On-Prem-vSphere-VM anhand
dieser Anleitung neu.
Diese Einstellung ist auf das Upgrade des Agents
kube-state-metrics von Version 1.9 auf Version 2.4 zurückzuführen, die für Kubernetes 1.22 erforderlich ist. Sie können alle verworfenen Messwerte vom Typ kube-state-metrics , die das Präfix kube_ haben, in Ihren benutzerdefinierten Dashboards oder Benachrichtigungsrichtlinien ersetzen.
|
Logging und Monitoring |
1,10, 1,11, 1,12, 1,13 |
Unbekannte Messwertdaten in Cloud Monitoring
Ab Version 1.10 von GKE on VMware enthalten die Daten für Cluster in Cloud Monitoring möglicherweise irrelevante zusammenfassende Messwerteinträge wie die folgenden:
Unknown metric: kubernetes.io/anthos/go_gc_duration_seconds_summary_percentile
Andere Messwerttypen, die irrelevante zusammenfassende Messwerte enthalten können, sind beispielsweise :
apiserver_admission_step_admission_duration_seconds_summary
go_gc_duration_seconds
scheduler_scheduling_duration_seconds
gkeconnect_http_request_duration_seconds_summary
alertmanager_nflog_snapshot_duration_seconds_summary
Diese zusammenfassenden Messwerte befinden sich zwar in der Messwertliste, werden von gke-metrics-agent derzeit aber nicht unterstützt.
|
Logging und Monitoring |
1,10, 1,11, 1,12, 1,13 |
Fehlende Messwerte auf einigen Knoten
Möglicherweise fehlen die folgenden Messwerte auf einigen, aber nicht auf allen Knoten:
kubernetes.io/anthos/container_memory_working_set_bytes
kubernetes.io/anthos/container_cpu_usage_seconds_total
kubernetes.io/anthos/container_network_receive_bytes_total
Workaround:
Um das Problem zu beheben, führen Sie die folgenden Schritte aus. Für [Version 1.9.5+, 1.10.2+, 1.11.0]: Erhöhen Sie die CPU für den gke-metrics-agent. Führen Sie dazu die Schritte 1–4 aus.
- Öffnen Sie Ihre
stackdriver -Ressource zum Bearbeiten:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system edit stackdriver stackdriver
- Wenn Sie die CPU-Anfrage für
gke-metrics-agent von 10m auf 50m erhöhen und das CPU-Limit von 100m auf 200m erhöhen möchten, fügen Sie dem stackdriver -Manifest den folgenden resourceAttrOverride -Abschnitt hinzu:
spec:
resourceAttrOverride:
gke-metrics-agent/gke-metrics-agent:
limits:
cpu: 100m
memory: 4608Mi
requests:
cpu: 10m
memory: 200Mi
Ihre bearbeitete Ressource sollte in etwa so aussehen:
spec:
anthosDistribution: on-prem
clusterLocation: us-west1-a
clusterName: my-cluster
enableStackdriverForApplications: true
gcpServiceAccountSecretName: ...
optimizedMetrics: true
portable: true
projectID: my-project-191923
proxyConfigSecretName: ...
resourceAttrOverride:
gke-metrics-agent/gke-metrics-agent:
limits:
cpu: 200m
memory: 4608Mi
requests:
cpu: 50m
memory: 200Mi
- Speichern Sie die Änderungen und schließen Sie den Texteditor.
- Prüfen Sie mit dem folgenden Befehl, ob Ihre Änderungen übernommen wurden:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system get daemonset gke-metrics-agent -o yaml \
| grep "cpu: 50m"
Der Befehl findet cpu: 50m , wenn Ihre Änderungen übernommen wurden.
|
Logging und Monitoring |
1.11.0–1.11.2, 1.12.0 |
Fehlende Messwerte für Planer und Controller-Manager im Administratorcluster
Wenn Ihr Administratorcluster von diesem Problem betroffen ist, fehlen die Messwerte zum Planer und Controller-Manager. Diese beiden Messwerte fehlen beispielsweise
# scheduler metric example
scheduler_pending_pods
# controller-manager metric example
replicaset_controller_rate_limiter_use
Workaround:
Führen Sie ein Upgrade auf v1.11.3 oder höher, v1.12.1 oder höher bzw. v1.13 oder höher durch.
|
|
1.11.0–1.11.2, 1.12.0 |
Messwerte für Planer und Controller-Manager im Nutzercluster fehlen
Wenn Ihr Nutzercluster von diesem Problem betroffen ist, fehlen die Messwerte für Planer und Controller-Manager. Zum Beispiel fehlen die folgenden beiden Messwerte:
# scheduler metric example
scheduler_pending_pods
# controller-manager metric example
replicaset_controller_rate_limiter_use
Workaround:
Dieses Problem wurde in GKE on VMware Version 1.13.0 und höher behoben.
Aktualisieren Sie Ihren Cluster auf eine Version mit der Lösung.
|
Installation, Upgrades und Updates |
1,10, 1,11, 1,12, 1,13 |
Fehler beim Registrieren des Administratorclusters während der Erstellung
Wenn Sie einen Administratorcluster für Version 1.9.x oder 1.10.0 erstellen und sich der Administratorcluster während seiner Erstellung nicht mit der angegebenen gkeConnect -Spezifikation registrieren kann, wird der folgende Fehler zurückgegeben.
Failed to create root cluster: failed to register admin cluster: failed to register cluster: failed to apply Hub Membership: Membership API request failed: rpc error: ode = PermissionDenied desc = Permission 'gkehub.memberships.get' denied on PROJECT_PATH
Sie können diesen Administratorcluster weiterhin verwenden, erhalten jedoch die folgende Fehlermeldung, wenn Sie später versuchen, den Administratorcluster auf Version 1.10.y zu aktualisieren.
failed to migrate to first admin trust chain: failed to parse current version "": invalid version: "" failed to migrate to first admin trust chain: failed to parse current version "": invalid version: ""
Workaround:
Umgehungsschritte ansehen
Wenn dieser Fehler auftritt, führen Sie die folgenden Schritte aus, um das Problem mit der Clusterregistrierung zu beheben. Nachdem Sie diese Korrektur vorgenommen haben, können Sie den Administratorcluster upgraden.
- Führen Sie
gkectl update admin aus, um den Administratorcluster mit dem richtigen Dienstkontoschlüssel zu registrieren.
- Erstellen Sie ein dediziertes Dienstkonto zum Patchen der benutzerdefinierten Ressource
OnPremAdminCluster .
export KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG
# Create Service Account modify-admin
kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: modify-admin
namespace: kube-system
EOF
# Create ClusterRole
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
creationTimestamp: null
name: modify-admin-role
rules:
- apiGroups:
- "onprem.cluster.gke.io"
resources:
- "onpremadminclusters/status"
verbs:
- "patch"
EOF
# Create ClusterRoleBinding for binding the permissions to the modify-admin SA
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
creationTimestamp: null
name: modify-admin-rolebinding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: modify-admin-role
subjects:
- kind: ServiceAccount
name: modify-admin
namespace: kube-system
EOF
Ersetzen Sie ADMIN_CLUSTER_KUBECONFIG durch den Pfad der kubeconfig-Datei Ihres Administratorclusters.
- Führen Sie die folgenden Befehle aus, um die benutzerdefinierte Ressource
OnPremAdminCluster zu aktualisieren.
export KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG
SERVICE_ACCOUNT=modify-admin
SECRET=$(kubectl get serviceaccount ${SERVICE_ACCOUNT} \
-n kube-system -o json \
| jq -Mr '.secrets[].name | select(contains("token"))')
TOKEN=$(kubectl get secret ${SECRET} -n kube-system -o json \
| jq -Mr '.data.token' | base64 -d)
kubectl get secret ${SECRET} -n kube-system -o json \
| jq -Mr '.data["ca.crt"]' \
| base64 -d > /tmp/ca.crt
APISERVER=https://$(kubectl -n default get endpoints kubernetes \
--no-headers | awk '{ print $2 }')
# Find out the admin cluster name and gkeOnPremVersion from the OnPremAdminCluster CR
ADMIN_CLUSTER_NAME=$(kubectl get onpremadmincluster -n kube-system \
--no-headers | awk '{ print $1 }')
GKE_ON_PREM_VERSION=$(kubectl get onpremadmincluster \
-n kube-system $ADMIN_CLUSTER_NAME \
-o=jsonpath='{.spec.gkeOnPremVersion}')
# Create the Status field and set the gkeOnPremVersion in OnPremAdminCluster CR
curl -H "Accept: application/json" \
--header "Authorization: Bearer $TOKEN" -XPATCH \
-H "Content-Type: application/merge-patch+json" \
--cacert /tmp/ca.crt \
--data '{"status": {"gkeOnPremVersion": "'$GKE_ON_PREM_VERSION'"}}' \
$APISERVER/apis/onprem.cluster.gke.io/v1alpha1/namespaces/kube-system/onpremadminclusters/$ADMIN_CLUSTER_NAME/status
- Versuchen Sie, mit dem Flag
--disable-upgrade-from-checkpoint noch einmal ein Upgrade des Administratorclusters durchzuführen.
gkectl upgrade admin --config ADMIN_CLUSTER_CONFIG \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--disable-upgrade-from-checkpoint
Ersetzen Sie ADMIN_CLUSTER_CONFIG durch den Pfad Ihrer Administratorcluster-Konfigurationsdatei.
|
Identität |
1,10, 1,11, 1,12, 1,13 |
Die Verwendung von GKE Identity Service kann dazu führen, dass der Connect Agent unerwartet neu gestartet wird.
Wenn Sie das Feature GKE Identity Service zum Verwalten von
GKE Identity Service ClientConfig verwenden, wird der
Connect-Agent möglicherweise unerwartet neu gestartet.
Workaround:
Wenn dieses Problem bei einem vorhandenen Cluster auftritt, können Sie einen der folgenden Schritte ausführen:
|
Netzwerk |
1,10, 1,11, 1,12, 1,13 |
Cisco ACI funktioniert nicht mit Direct Server Return (DSR)
Seesaw wird im DSR-Modus ausgeführt und funktioniert aufgrund des IP-Lernens auf der Datenebene nicht in Cisco ACI.
Workaround:
Sie können das Problem umgehen, indem Sie das IP-Lernen deaktivieren. Fügen Sie dazu die Seesaw-IP-Adresse als virtuelle L4-L7-IP-Adresse im Cisco Application Policy Infrastructure Controller (APIC) hinzu.
Sie können die Option für virtuelle L4-L7-IP-Adressen konfigurieren. Rufen Sie dazu Mandant > Anwendungsprofile > Anwendungs-EPGs oder uSeg-EPGs auf. Wenn die IP-Lernung nicht deaktiviert wird, flappt der IP-Endpunkt zwischen verschiedenen Standorten in der Cisco API-Struktur.
|
VMware |
1,10, 1,11, 1,12, 1,13 |
Probleme mit dem vSphere 7.0 Update 3
VMware hat vor Kurzem kritische Probleme mit den folgenden Releases von vSphere 7.0 Update 3 identifiziert:
- vSphere ESXi 7.0 Update 3 (Build 18644231)
- vSphere ESXi 7.0 Update 3a (Build 18825058)
- vSphere ESXi 7.0 Update 3b (Build 18905247)
- vSphere vCenter 7.0 Update 3b (Build 18901211)
Workaround:
VMWare hat diese Releases seitdem entfernt. Sie sollten die ESXi- und vCenter-Server auf eine neuere Version aktualisieren.
|
Betriebssystem |
1,10, 1,11, 1,12, 1,13 |
Fehler beim Bereitstellen des emptyDir-Volumes als exec in einem auf COS-Knoten ausgeführten Pod
Für Pods, die auf Knoten ausgeführt werden, die Container-Optimized OS-Images (COS) verwenden, können Sie das Volume emptyDir nicht als exec bereitstellen. Sie wird als noexec bereitgestellt und Sie erhalten den folgenden Fehler: exec user
process caused: permission denied . Diese Fehlermeldung wird beispielsweise angezeigt, wenn Sie den folgenden Test-Pod bereitstellen:
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: test
name: test
spec:
containers:
- args:
- sleep
- "5000"
image: gcr.io/google-containers/busybox:latest
name: test
volumeMounts:
- name: test-volume
mountPath: /test-volume
resources:
limits:
cpu: 200m
memory: 512Mi
dnsPolicy: ClusterFirst
restartPolicy: Always
volumes:
- emptyDir: {}
name: test-volume
Wenn Sie im Test-Pod mount | grep test-volume ausführen, wird die Option noexec angezeigt:
/dev/sda1 on /test-volume type ext4 (rw,nosuid,nodev,noexec,relatime,commit=30)
Workaround:
Umgehungsschritte ansehen
Wenden Sie eine DaemonSet-Ressource an. Beispiel:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fix-cos-noexec
namespace: kube-system
spec:
selector:
matchLabels:
app: fix-cos-noexec
template:
metadata:
labels:
app: fix-cos-noexec
spec:
hostIPC: true
hostPID: true
containers:
- name: fix-cos-noexec
image: ubuntu
command: ["chroot", "/host", "bash", "-c"]
args:
- |
set -ex
while true; do
if ! $(nsenter -a -t 1 findmnt -l | grep -qe "^/var/lib/kubelet\s"); then
echo "remounting /var/lib/kubelet with exec"
nsenter -a -t 1 mount --bind /var/lib/kubelet /var/lib/kubelet
nsenter -a -t 1 mount -o remount,exec /var/lib/kubelet
fi
sleep 3600
done
volumeMounts:
- name: host
mountPath: /host
securityContext:
privileged: true
volumes:
- name: host
hostPath:
path: /
|
Upgrades und Updates |
1,10, 1,11, 1,12, 1,13 |
Die Aktualisierung des Clusterknotenpools funktioniert nicht, nachdem Autoscaling für den Knotenpool deaktiviert wurde
Knotenpoolreplikate werden nicht aktualisiert, nachdem Autoscaling für einen Knotenpool aktiviert und deaktiviert wurde.
Workaround:
Die Annotationen cluster.x-k8s.io/cluster-api-autoscaler-node-group-max-size und cluster.x-k8s.io/cluster-api-autoscaler-node-group-min-size werden aus der Maschinenbereitstellung des entsprechenden Knotenpools entfernt.
|
Logging und Monitoring |
1,11, 1,12, 1,13 |
Windows-Monitoring-Dashboards zeigen Daten aus Linux-Clustern
Ab Version 1.11 zeigen das Windows Pod-Statusdashboard und das Windows-Knotenstatus-Dashboard in den vorkonfigurierten Monitoring-Dashboards auch Daten von Linux-Clustern an. Das liegt daran, dass die Windows-Knoten- und Pod-Messwerte auch auf Linux-Clustern verfügbar gemacht werden.
|
Logging und Monitoring |
1.10, 1.11, 1.12 |
stackdriver-log-forwarder in konstantem CrashLoopBackOff
Bei GKE on VMware Version 1.10, 1.11 und 1.12 kann das stackdriver-log-forwarder -DaemonSet CrashLoopBackOff -Fehler haben, wenn sich auf dem Laufwerk fehlerhafte zwischengespeicherte Logs befinden.
Workaround:
Um dieses Problem zu beheben, müssen wir die zwischengespeicherten Logs auf dem Knoten bereinigen.
- Reduzieren Sie
stackdriver-log-forwarder , um das unerwartete Verhalten zu vermeiden:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n kube-system patch daemonset stackdriver-log-forwarder -p '{"spec": {"template": {"spec": {"nodeSelector": {"non-existing": "true"}}}}}'
Ersetzen Sie USER_CLUSTER_KUBECONFIG durch den Pfad der kubeconfig-Datei des Nutzerclusters.
- Stellen Sie das Bereinigungs-DaemonSet bereit, um fehlerhafte Blöcke zu bereinigen:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n kube-system -f - << EOF
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluent-bit-cleanup
namespace: kube-system
spec:
selector:
matchLabels:
app: fluent-bit-cleanup
template:
metadata:
labels:
app: fluent-bit-cleanup
spec:
containers:
- name: fluent-bit-cleanup
image: debian:10-slim
command: ["bash", "-c"]
args:
- |
rm -rf /var/log/fluent-bit-buffers/
echo "Fluent Bit local buffer is cleaned up."
sleep 3600
volumeMounts:
- name: varlog
mountPath: /var/log
securityContext:
privileged: true
tolerations:
- key: "CriticalAddonsOnly"
operator: "Exists"
- key: node-role.kubernetes.io/master
effect: NoSchedule
- key: node-role.gke.io/observability
effect: NoSchedule
volumes:
- name: varlog
hostPath:
path: /var/log
EOF
- Sie können die folgenden Befehle ausführen, damit das Bereinigungs-DaemonSet alle Blöcke bereinigt hat. Die Ausgabe der beiden Befehle sollte Ihrer Knotenzahl im Cluster entsprechen:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
logs -n kube-system -l app=fluent-bit-cleanup | grep "cleaned up" | wc -l
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n kube-system get pods -l app=fluent-bit-cleanup --no-headers | wc -l
- Löschen Sie das Bereinigungs-DaemonSet:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n kube-system delete ds fluent-bit-cleanup
stackdriver-log-forwarder fortsetzen:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n kube-system patch daemonset stackdriver-log-forwarder --type json -p='[{"op": "remove", "path": "/spec/template/spec/nodeSelector/non-existing"}]'
|
Logging und Monitoring |
1,10, 1,11, 1,12, 1,13, 1,14, 1,15, 1,16 |
stackdriver-log-forwarder sendet keine Logs an Cloud Logging
Wenn in Cloud Logging keine Logs Ihrer Cluster angezeigt werden und Sie den folgenden Fehler in Ihren Logs feststellen:
2023-06-02T10:53:40.444017427Z [2023/06/02 10:53:40] [error] [input chunk] chunk 1-1685703077.747168499.flb would exceed total limit size in plugin stackdriver.0
2023-06-02T10:53:40.444028047Z [2023/06/02 10:53:40] [error] [input chunk] no available chunk
. Wahrscheinlich überschreitet die Eingaberate des Logs das Limit des Logging-Agents, sodass stackdriver-log-forwarder keine Logs sendet.
Dieses Problem tritt bei allen Versionen von GKE on VMware auf.
Behelfslösung:
Sie müssen das Ressourcenlimit für den Logging-Agent erhöhen, um dieses Problem zu beheben.
- Öffnen Sie Ihre
stackdriver -Ressource zum Bearbeiten:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system edit stackdriver stackdriver
- Um die CPU-Anfrage für
stackdriver-log-forwarder zu erhöhen, fügen Sie dem Manifest stackdriver den folgenden Abschnitt resourceAttrOverride hinzu:
spec:
resourceAttrOverride:
stackdriver-log-forwarder/stackdriver-log-forwarder:
limits:
cpu: 1200m
memory: 600Mi
requests:
cpu: 600m
memory: 600Mi
Die bearbeitete Ressource sollte in etwa so aussehen:
spec:
anthosDistribution: on-prem
clusterLocation: us-west1-a
clusterName: my-cluster
enableStackdriverForApplications: true
gcpServiceAccountSecretName: ...
optimizedMetrics: true
portable: true
projectID: my-project-191923
proxyConfigSecretName: ...
resourceAttrOverride:
stackdriver-log-forwarder/stackdriver-log-forwarder:
limits:
cpu: 1200m
memory: 600Mi
requests:
cpu: 600m
memory: 600Mi
- Speichern Sie die Änderungen und schließen Sie den Texteditor.
- Prüfen Sie mit dem folgenden Befehl, ob Ihre Änderungen übernommen wurden:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system get daemonset stackdriver-log-forwarder -o yaml \
| grep "cpu: 1200m"
Der Befehl findet cpu: 1200m , wenn Ihre Änderungen übernommen wurden.
|
Sicherheit |
1.13 |
Der Kubelet-Dienst ist nach NodeReady vorübergehend nicht verfügbar
Es gibt einen kurzen Zeitraum, in dem der Knoten bereit ist, aber das kubelet-Serverzertifikat nicht bereit ist. kubectl exec und kubectl logs sind in diesem Zeitraum nicht verfügbar.
Das liegt daran, dass es einige Zeit dauert, bis der neue Genehmiger des Serverzertifikats die aktualisierten gültigen IP-Adressen des Knotens sieht.
Dieses Problem betrifft nur das kubelet-Serverzertifikat und nicht die Pod-Planung.
|
Upgrades und Updates |
1.12 |
Teilweises Upgrade des Administratorclusters blockiert kein späteres Upgrade des Nutzerclusters
Fehler beim Upgrade des Nutzerclusters:
.LBKind in body is required (Check the status of OnPremUserCluster 'cl-stg-gdl-gke-onprem-mgmt/cl-stg-gdl' and the logs of pod 'kube-system/onprem-user-cluster-controller' for more detailed debugging information.
Das Upgrade des Administratorclusters wurde nicht vollständig durchgeführt und die Statusversion ist immer noch 1.10. Das Upgrade des Nutzerclusters auf 1.12 wird von keiner Preflight-Prüfung blockiert und schlägt aufgrund eines Versionsverzerrungsproblems fehl.
Workaround:
Führen Sie ein Upgrade des Administratorclusters auf 1.11 und dann ein Upgrade des Nutzerclusters auf 1.12 durch.
|
Speicher |
1.10.0–1.10.5, 1.11.0–1.11.2, 1.12.0 |
Datastore meldet fälschlicherweise unzureichenden freien Speicherplatz
Der Befehl gkectl diagnose cluster ist fehlgeschlagen mit:
Checking VSphere Datastore FreeSpace...FAILURE
Reason: vCenter datastore: [DATASTORE_NAME] insufficient FreeSpace, requires at least [NUMBER] GB
Die Validierung des freien Datenspeichers sollte nicht für vorhandene Clusterknotenpools verwendet werden und wurde versehentlich in gkectl diagnose cluster hinzugefügt.
Workaround:
Sie können die Fehlermeldung ignorieren oder die Validierung mit --skip-validation-infra überspringen.
|
Betrieb, Netzwerk |
1.11, 1.12.0–1.12.1 |
Sie können möglicherweise keinen neuen Nutzercluster hinzufügen, wenn Ihr Administratorcluster mit einer MetalLB-Load-Balancer-Konfiguration eingerichtet ist.
Das Löschen des Nutzerclusters kann aus irgendeinem Grund hängen bleiben, was zu einer Entwertung der MatalLB-ConfigMap führt. Mit diesem Status kann kein neuer Nutzercluster hinzugefügt werden.
Workaround:
Sie können das
Löschen des Nutzerclusters erzwingen.
|
Installation, Betriebssystem |
1,10, 1,11, 1,12, 1,13 |
Fehler bei Verwendung von Container-Optimized OS (COS) für Nutzercluster
Wenn osImageType cos für den Administratorcluster verwendet und gkectl check-config nach dem Erstellen des Administratorclusters und vor dem Erstellen des Nutzerclusters ausgeführt wird, schlägt die Ausführung bei:
Failed to create the test VMs: VM failed to get IP addresses on the network.
Die für den Nutzercluster check-config erstellte Test-VM verwendet standardmäßig dieselbe osImageType des Administratorclusters. Derzeit ist die Test-VM noch nicht mit COS kompatibel.
Workaround:
Verwenden Sie gkectl check-config --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config
USER_CLUSTER_CONFIG --fast , um die langsame Preflight-Prüfung zu vermeiden, die die Test-VM erstellt.
|
Logging und Monitoring |
1.12.0-1.12.1 |
Grafana im Administratorcluster kann Nutzercluster nicht erreichen
Dieses Problem betrifft Kunden, die mit Grafana im Administratorcluster Nutzercluster in GKE on VMware in den Versionen 1.12.0 und 1.12.1 überwachen. Er beruht auf einer Diskrepanz zwischen Pushprox-Clientzertifikaten in Nutzerclustern und der Zulassungsliste auf dem pushprox-Server im Administratorcluster.
Das Symptom ist pushprox-client in Nutzerclustern, die Fehlerlogs wie die folgenden ausgeben:
level=error ts=2022-08-02T13:34:49.41999813Z caller=client.go:166 msg="Error reading request:" err="invalid method \"RBAC:\""
Workaround:
Umgehungsschritte ansehen
führen Sie die folgenden Schritte aus:
- Skalieren Sie die Bereitstellung von Monitoring-Operatoren im kube-system-Namespace des Administratorclusters herunter.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--namespace kube-system scale deploy monitoring-operator \
--replicas=0
- Bearbeiten Sie die ConfigMap
pushprox-server-rbac-proxy-config im Namespace „kube-system“ des Administratorclusters.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--namespace kube-system edit cm pushprox-server-rbac-proxy-config
Suchen Sie die Zeile principals für den Listener external-pushprox-server-auth-proxy und korrigieren Sie principal_name für alle Nutzercluster. Entfernen Sie dazu den Teilstring kube-system aus pushprox-client.metrics-consumers.kube-system.cluster. .
Die neue Konfiguration sollte so aussehen:
permissions:
- or_rules:
rules:
- header: { name: ":path", exact_match: "/poll" }
- header: { name: ":path", exact_match: "/push" }
principals: [{"authenticated":{"principal_name":{"exact":"pushprox-client.metrics-consumers.kube-system.cluster.local"}}},{"authenticated":{"principal_name":{"exact":"pushprox-client.metrics-consumers.kube-system.cluster."}}},{"authenticated":{"principal_name":{"exact":"pushprox-client.metrics-consumers.cluster."}}}]
- Starten Sie das
pushprox-server -Deployment im Administratorcluster und das pushprox-client -Deployment in den betroffenen Nutzerclustern neu:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace kube-system rollout restart deploy pushprox-server
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG --namespace kube-system rollout restart deploy pushprox-client
- Mit den vorherigen Schritten sollte sich das Problem beheben lassen. Sobald der Cluster auf 1.12.2 aktualisiert wurde und das Problem behoben ist, können Sie den Monitoring-Operator kube-system des Administratorclusters hochskalieren, damit die Pipeline wieder verwaltet werden kann.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace kube-system scale deploy monitoring-operator --replicas=1
|
Sonstiges |
1.11.3 |
gkectl repair admin-master stellt nicht die VM-Vorlage bereit, die für die Wiederherstellung verwendet werden soll
Der Befehl gkectl repair admin-master ist fehlgeschlagen mit:
Failed to repair: failed to select the template: no VM templates is available for repairing the admin master (check if the admin cluster version >= 1.4.0 or contact support
gkectl repair admin-master kann die VM-Vorlage, die zum Reparieren der VM der Administrator-Steuerungsebene verwendet werden soll, nicht abrufen, wenn der Name der VM der Administrator-Steuerungsebene mit den Zeichen t , m , p oder l endet.
Workaround:
Führen Sie den Befehl mit --skip-validation noch einmal aus.
|
Logging und Monitoring |
1,11, 1,12, 1,13, 1,14, 1,15, 1,16 |
Cloud-Audit-Logging aufgrund abgelehnter Berechtigung fehlgeschlagen
Cloud-Audit-Logs erfordern eine spezielle Berechtigungseinrichtung, die derzeit nur über GKE Hub automatisch für Nutzercluster ausgeführt wird.
Es wird empfohlen, mindestens einen Nutzercluster zu haben, der dieselbe Projekt-ID und dasselbe Dienstkonto wie der Administratorcluster für Cloud-Audit-Logs verwendet, damit der Administratorcluster die erforderliche Berechtigung hat.
In Fällen, in denen der Administratorcluster eine andere Projekt-ID oder ein anderes Dienstkonto als ein Nutzercluster verwendet, können Audit-Logs des Administratorclusters jedoch nicht in Google Cloud eingeschleust werden. Das Symptom ist eine Reihe von Permission Denied -Fehlern im Pod audit-proxy im Administratorcluster.
Workaround:
Umgehungsschritte ansehen
Zum Beheben dieses Problems kann die Berechtigung durch Interaktion mit dem Hub-Feature cloudauditlogging eingerichtet werden:
- Prüfen Sie zuerst die vorhandenen Dienstkonten, die in Ihrem Projekt auf die Zulassungsliste für Cloud-Audit-Logs gesetzt sind:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://gkehub.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/features/cloudauditlogging
- Führen Sie je nach Antwort einen der folgenden Schritte aus:
- Wenn Sie den Fehler
404 Not_found erhalten haben, bedeutet dies, dass kein Dienstkonto für diese Projekt-ID auf der Zulassungsliste steht. Sie können ein Dienstkonto auf die Zulassungsliste setzen. Aktivieren Sie dazu das Hub-Feature cloudauditlogging :
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://gkehub.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/features?feature_id=cloudauditlogging -d \
'{"spec":{"cloudauditlogging":{"allowlistedServiceAccounts":["SERVICE_ACCOUNT_EMAIL"]}}}'
- Wenn Sie eine Featurespezifikation erhalten haben, die
"lifecycleState": "ENABLED" mit "code":
"OK" und eine Liste von Dienstkonten in allowlistedServiceAccounts enthält, bedeutet dies, dass für dieses Projekt bereits Dienstkonten zulässig sind. Sie können entweder ein Dienstkonto aus dieser Liste in Ihrem Cluster verwenden oder ein neues Dienstkonto auf die Zulassungsliste setzen:
curl -X PATCH -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://gkehub.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/features/cloudauditlogging?update_mask=spec.cloudauditlogging.allowlistedServiceAccounts -d \
'{"spec":{"cloudauditlogging":{"allowlistedServiceAccounts":["SERVICE_ACCOUNT_EMAIL"]}}}'
- Wenn Sie eine Featurespezifikation erhalten haben, die
"lifecycleState": "ENABLED" mit "code":
"FAILED" enthält, war die Einrichtung der Berechtigung nicht erfolgreich.
Versuchen Sie, die Probleme im Feld description der Antwort zu beheben oder die aktuelle Zulassungsliste zu sichern, das Cloudauditlogging-Hub-Feature zu löschen und es nach Schritt 1 dieses Abschnitts wieder zu aktivieren. So löschen Sie die cloudauditlogging -Hub-Funktion:
curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://gkehub.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/features/cloudauditlogging
Für obige Befehle gilt:
|
Betrieb, Sicherheit |
1.11 |
Fehler beim Prüfen von Zertifikaten von gkectl diagnose
Wenn Ihre Workstation keinen Zugriff auf Worker-Knoten des Nutzerclusters hat, werden beim Ausführen von gkectl diagnose die folgenden Fehler ausgegeben:
Checking user cluster certificates...FAILURE
Reason: 3 user cluster certificates error(s).
Unhealthy Resources:
Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
Wenn Ihre Workstation keinen Zugriff auf Worker-Knoten des Administratorclusters oder Worker-Knoten des Administratorclusters hat, treten beim Ausführen von gkectl diagnose die folgenden Fehler auf:
Checking admin cluster certificates...FAILURE
Reason: 3 admin cluster certificates error(s).
Unhealthy Resources:
Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
Workaround:
Wenn keine Gefahr besteht, diese Nachrichten zu ignorieren.
|
Betriebssystem |
1,8, 1,9, 1,10, 1,11, 1,12, 1,13 |
/var/log/audit/ füllt Speicherplatz auf VMs aus
/var/log/audit/ enthält Audit-Logs. Sie können die Laufwerksnutzung mit sudo du -h -d 1 /var/log/audit prüfen.
Bestimmte gkectl -Befehle auf der Administratorworkstation, z. B. gkectl diagnose snapshot , tragen zur Speicherplatznutzung bei.
Seit Version 1.8 von GKE on VMware ist das Ubuntu-Image mit CIS Level 2-Benchmark gehärtet. Und durch eine der Complianceregeln (4.1.2.2 Sicherstellen, dass Audit-Logs nicht automatisch gelöscht werden) die Auditd-Einstellung max_log_file_action = keep_logs . Dies führt dazu, dass alle Audit-Regeln auf dem Laufwerk beibehalten werden.
Workaround:
Umgehungsschritte ansehen
Administratorworkstation
Für die Administratorworkstation können Sie die Auditd-Einstellungen manuell ändern, um die Logs automatisch zu rotieren, und dann den Auditd-Dienst neu starten:
sed -i 's/max_log_file_action = keep_logs/max_log_file_action = rotate/g' /etc/audit/auditd.conf
sed -i 's/num_logs = .*/num_logs = 250/g' /etc/audit/auditd.conf
systemctl restart auditd
Die obige Einstellung würde dazu führen, dass Auditd die Logs automatisch rotiert, sobald mehr als 250 Dateien mit jeweils 8 MB generiert wurden.
Clusterknoten
Führen Sie für Clusterknoten ein Upgrade auf 1.11.5+, 1.12.4+, 1.13.2+ oder 1.14+ durch. Wenn Sie noch kein Upgrade auf diese Versionen durchführen können, wenden Sie das folgende DaemonSet auf Ihren Cluster an:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: change-auditd-log-action
namespace: kube-system
spec:
selector:
matchLabels:
app: change-auditd-log-action
template:
metadata:
labels:
app: change-auditd-log-action
spec:
hostIPC: true
hostPID: true
containers:
- name: update-audit-rule
image: ubuntu
command: ["chroot", "/host", "bash", "-c"]
args:
- |
while true; do
if $(grep -q "max_log_file_action = keep_logs" /etc/audit/auditd.conf); then
echo "updating auditd max_log_file_action to rotate with a max of 250 files"
sed -i 's/max_log_file_action = keep_logs/max_log_file_action = rotate/g' /etc/audit/auditd.conf
sed -i 's/num_logs = .*/num_logs = 250/g' /etc/audit/auditd.conf
echo "restarting auditd"
systemctl restart auditd
else
echo "auditd setting is expected, skip update"
fi
sleep 600
done
volumeMounts:
- name: host
mountPath: /host
securityContext:
privileged: true
volumes:
- name: host
hostPath:
path: /
Beachten Sie, dass diese Auditd-Konfigurationsänderung gegen die CIS-Level-2-Regel „4.1.2.2 Achten Sie darauf, dass Audit-Logs nicht automatisch gelöscht werden“ verstößt.
|
Netzwerk |
1.10, 1.11.0–1.11.3, 1.12.0–1.12.2, 1.13.0 |
NetworkGatewayGroup Floating-IP steht in Konflikt mit Knotenadresse
Nutzer können aufgrund des folgenden Fehlers bei der Validierung des Webhooks keine NetworkGatewayGroup -Objekte erstellen oder aktualisieren:
[1] admission webhook "vnetworkgatewaygroup.kb.io" denied the request: NetworkGatewayGroup.networking.gke.io "default" is invalid: [Spec.FloatingIPs: Invalid value: "10.0.0.100": IP address conflicts with node address with name: "my-node-name"
In betroffenen Versionen kann das Kubelet fälschlicherweise an eine Floating-IP-Adresse gebunden werden, die dem Knoten zugewiesen ist, und es als Knotenadresse in node.status.addresses melden. Der überprüfende Webhook prüft NetworkGatewayGroup Floating-IP-Adressen mit allen node.status.addresses im Cluster und betrachtet dies als Konflikt.
Workaround:
Deaktivieren Sie im selben Cluster, in dem das Erstellen oder Aktualisieren von NetworkGatewayGroup -Objekten fehlschlägt, den ANG-Validierungs-Webhook vorübergehend und senden Sie Ihre Änderung:
- Speichern Sie die Webhook-Konfiguration, damit sie am Ende wiederhergestellt werden kann:
kubectl -n kube-system get validatingwebhookconfiguration \
ang-validating-webhook-configuration -o yaml > webhook-config.yaml
- Bearbeiten Sie die Webhook-Konfiguration:
kubectl -n kube-system edit validatingwebhookconfiguration \
ang-validating-webhook-configuration
- Entfernen Sie das
vnetworkgatewaygroup.kb.io -Element aus der Webhook-Konfigurationsliste und schließen Sie es, um die Änderungen zu übernehmen.
- Erstellen oder bearbeiten Sie das
NetworkGatewayGroup -Objekt.
- Wenden Sie die ursprüngliche Webhook-Konfiguration noch einmal an:
kubectl -n kube-system apply -f webhook-config.yaml
|
Installation, Upgrades und Updates |
1.10.0-1.10.2 |
Zeitlimit für Administratorcluster erstellen oder upgraden
Während eines Upgradeversuchs des Administratorclusters kann die VM der Administrator-Steuerungsebene während der Erstellung hängen bleiben. Die VM der Administrator-Steuerungsebene geht während des Startvorgangs in eine endlose Warteschleife und in der Datei /var/log/cloud-init-output.log wird der folgende Endlosschleifenfehler angezeigt:
+ echo 'waiting network configuration is applied'
waiting network configuration is applied
++ get-public-ip
+++ ip addr show dev ens192 scope global
+++ head -n 1
+++ grep -v 192.168.231.1
+++ grep -Eo 'inet ([0-9]{1,3}\.){3}[0-9]{1,3}'
+++ awk '{print $2}'
++ echo
+ '[' -n '' ']'
+ sleep 1
+ echo 'waiting network configuration is applied'
waiting network configuration is applied
++ get-public-ip
+++ ip addr show dev ens192 scope global
+++ grep -Eo 'inet ([0-9]{1,3}\.){3}[0-9]{1,3}'
+++ awk '{print $2}'
+++ grep -v 192.168.231.1
+++ head -n 1
++ echo
+ '[' -n '' ']'
+ sleep 1
Das liegt daran, dass GKE on VMware versucht, die IP-Adresse des Knotens im Startskript abzurufen, verwendet grep -v
ADMIN_CONTROL_PLANE_VIP , um die virtuelle IP-Adresse der Steuerungsebene des Administratorclusters zu überspringen, die auch der NIC zugewiesen werden kann. Beim Befehl werden jedoch auch alle IP-Adressen übersprungen, die das Präfix der virtuellen IP-Adresse der Steuerungsebene haben. Dies führt dazu, dass sich das Startskript aufhängt.
Angenommen, die virtuelle IP-Adresse der Steuerungsebene des Administratorclusters lautet 192.168.1.25. Wenn die IP-Adresse der VM der Steuerungsebene des Administratorclusters das gleiche Präfix hat, z. B. 192.168.1.254, bleibt die VM der Steuerungsebene während der Erstellung hängen. Dieses Problem kann auch ausgelöst werden, wenn die Broadcastadresse dasselbe Präfix wie die virtuelle IP-Adresse der Steuerungsebene hat, z. B. 192.168.1.255 .
Workaround:
|
Betriebssystem, Upgrades und Updates |
1.10.0-1.10.2 |
Der Status des Administratorclusters, der das COS-Image verwendet, geht beim Upgrade des Administratorclusters oder der Reparatur des Administratormasters verloren
DataDisk kann auf dem Masterknoten des Administratorclusters nicht korrekt bereitgestellt werden, wenn das COS-Image verwendet wird. Außerdem geht der Status des Administratorclusters, der das COS-Image verwendet, beim Upgrade des Administratorclusters oder der Reparatur des Administratorclusters verloren. (Administratorcluster mit COS-Image ist eine Vorabversion)
Workaround:
Administratorcluster mit osImageType auf ubuntu_containerd neu erstellen
Nachdem Sie den Administratorcluster erstellt haben und osImageType auf „cos“ gesetzt ist, rufen Sie den SSH-Schlüssel des Administratorclusters und SSH im Administrator-Master-Knoten ab.
Das Ergebnis df -h enthält /dev/sdb1 98G 209M 93G
1% /opt/data . Und lsblk Ergebnis enthält „-sdb1
8:17 0 100G 0 part /opt/data “
|
Betriebssystem |
1.10 |
systemd-resolved schlug beim DNS-Lookup auf .local -Domains fehl
In GKE on VMware Version 1.10.0 werden Namensauflösungen unter Ubuntu standardmäßig an das lokale systemd aufgelöste Monitoring auf 127.0.0.53 weitergeleitet. Der Grund dafür ist, dass auf dem in Version 1.10.0 verwendeten Ubuntu 20.04-Image /etc/resolv.conf mit /run/systemd/resolve/stub-resolv.conf sym verknüpft ist, das auf den localhost-DNS-Stub 127.0.0.53 verweist.
Daher verweigert die Auflösung der lokalen DNS-Namen die Prüfung der in /run/systemd/resolve/resolv.conf angegebenen vorgelagerten DNS-Server auf Namen mit dem Suffix .local , es sei denn, die Namen werden als Suchdomains angegeben.
Dies führt dazu, dass alle Lookups nach .local -Namen fehlschlagen. Beispielsweise schlägt kubelet beim Hochfahren des Knotens fehl, wenn Images mit dem Suffix .local aus einer privaten Registry abgerufen werden. Das Angeben einer vCenter-Adresse mit dem Suffix .local funktioniert nicht auf einer Administratorworkstation.
Workaround:
Sie können dieses Problem für Clusterknoten vermeiden, wenn Sie das Feld searchDomainsForDNS in der Konfigurationsdatei des Administratorclusters und die Konfigurationsdatei des Nutzerclusters angeben, um die Domains einzuschließen.
Derzeit unterstützt gkectl update das Aktualisieren des Felds searchDomainsForDNS noch nicht.
Wenn Sie dieses Feld nicht vor der Clustererstellung eingerichtet haben, müssen Sie eine SSH-Verbindung zu den Knoten herstellen und den lokalen, vom System aufgelösten Stub umgehen. Dazu ändern Sie den Symlink von /etc/resolv.conf von /run/systemd/resolve/stub-resolv.conf (enthält den lokalen Stub 127.0.0.53 ) in /run/systemd/resolve/resolv.conf (der auf das tatsächliche Upstream-DNS verweist):
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Bei der Administratorworkstation unterstützt gkeadm keine Angabe von Suchdomains. Daher muss dieses Problem mit diesem manuellen Schritt umgangen werden.
Diese Lösung für bleibt bei der Neuerstellung von VMs nicht bestehen. Sie müssen diese Problemumgehung immer dann anwenden, wenn VMs neu erstellt werden.
|
Installation, Betriebssystem |
1.10 |
IP-Adresse der Docker-Brücke verwendet 172.17.0.1/16 anstelle von 169.254.123.1/24
GKE on VMware gibt ein dediziertes Subnetz für die IP-Adresse der Docker-Bridge an, das --bip=169.254.123.1/24 verwendet, sodass das Standardsubnetz 172.17.0.1/16 nicht reserviert wird. In Version 1.10.0 gab es jedoch einen Fehler im Ubuntu-Betriebssystem-Image, der dazu führte, dass die benutzerdefinierte Docker-Konfiguration ignoriert wurde.
Daher wählt Docker die Standardeinstellung 172.17.0.1/16 als Subnetz der Bridge-IP-Adresse aus. Dies kann zu einem IP-Adresskonflikt führen, wenn bereits eine Arbeitslast in diesem IP-Adressbereich ausgeführt wird.
Workaround:
Zur Umgehung dieses Problems müssen Sie die folgende systemd-Konfigurationsdatei für dockerd umbenennen und dann den Dienst neu starten:
sudo mv /etc/systemd/system/docker.service.d/50-cloudimg-settings.cfg \
/etc/systemd/system/docker.service.d/50-cloudimg-settings.conf
sudo systemctl daemon-reload
sudo systemctl restart docker
Prüfen Sie, ob Docker die richtige Brücken-IP-Adresse nutzt:
ip a | grep docker0
Diese Lösung bleibt bei der Neuerstellung von VMs nicht erhalten. Sie müssen diese Problemumgehung immer dann anwenden, wenn VMs neu erstellt werden.
|
Upgrades und Updates |
1.11 |
Upgrade auf 1.11 durch Stackdriver-Bereitschaft blockiert
In GKE on VMware Version 1.11.0 gibt es Änderungen an der Definition von benutzerdefinierten Ressourcen im Zusammenhang mit Logging und Monitoring:
- Gruppenname der benutzerdefinierten Ressource
stackdriver von addons.sigs.k8s.io zu addons.gke.io geändert;
- Der Gruppenname der benutzerdefinierten Ressourcen
monitoring und metricsserver wurde von addons.k8s.io zu addons.gke.io geändert.
- Die Spezifikationen der oben genannten Ressourcen werden nun gegen das Schema abgewägt. Insbesondere für die Spezifikation „resourceAttrOverride“ und „storageSizeOverride“ in der benutzerdefinierten Ressource
stackdriver muss ein Stringtyp in den Werten für CPU-, Arbeitsspeicher- und Speichergrößenanforderungen und ‐limits festgelegt werden.
Die Änderungen des Gruppennamens werden gemäß den CustomResourceDefinition-Updates in Kubernetes 1.22 vorgenommen.
Wenn Sie keine zusätzliche Logik haben, die die betroffenen benutzerdefinierten Ressourcen anwendet oder bearbeitet, müssen Sie nichts weiter tun. Der Upgradeprozess für GKE on VMware übernimmt die Migration der betroffenen Ressourcen und behält ihre vorhandenen Spezifikationen nach der Änderung des Gruppennamens bei.
Wenn Sie jedoch eine Logik ausführen, die die betroffenen Ressourcen anwendet oder bearbeitet, ist besondere Aufmerksamkeit erforderlich. Zuerst muss mit dem neuen Gruppennamen in der Manifestdatei auf sie verwiesen werden. Beispiel:
apiVersion: addons.gke.io/v1alpha1 ## instead of `addons.sigs.k8s.io/v1alpha1`
kind: Stackdriver
Außerdem müssen die Spezifikationswerte resourceAttrOverride und storageSizeOverride vom Typ „String“ sein. Beispiel:
spec:
resourceAttrOverride:
stackdriver-log-forwarder/stackdriver-log-forwarder
limits:
cpu: 1000m # or "1"
# cpu: 1 # integer value like this would not work
memory: 3000Mi
Andernfalls werden die Änderungen nicht übernommen und können zu einem unerwarteten Status in Logging- und Monitoring-Komponenten führen. Mögliche Symptome sind:
- Abgleichsfehlerlogs in
onprem-user-cluster-controller , z. B.: potential reconciliation error: Apply bundle components failed, requeue after 10s, error: failed to apply addon components: failed to apply bundle objects from stackdriver-operator-addon 1.11.2-gke.53 to cluster my-cluster: failed to create typed live object: .spec.resourceAttrOverride.stackdriver-log-forwarder/stackdriver-log-forwarder.limits.cpu: expected string, got &value.valueUnstructured{Value:1}
- Fehler in
kubectl edit stackdriver stackdriver , z. B. Error from server (NotFound): stackdrivers.addons.gke.io "stackdriver" not found
Wenn die oben genannten Fehler auftreten, bedeutet dies, dass ein nicht unterstützter Typ in der Stackdriver-CR-Spezifikation bereits vor dem Upgrade vorhanden war. Als Behelfslösung können Sie die Stackdriver-CR unter dem alten Gruppennamen kubectl edit stackdrivers.addons.sigs.k8s.io stackdriver manuell bearbeiten und so vorgehen:
- Ändern Sie die Ressourcenanforderungen und -limits in den Stringtyp.
- Entfernen Sie alle
addons.gke.io/migrated-and-deprecated: true -Annotationen, sofern vorhanden.
Setzen Sie dann den Upgradeprozess fort oder starten Sie ihn neu.
|
Betriebssystem |
1,7, 1,8, 1,9, 1,10, 1,11, 1,12, 1,13, 1,14, 1,15, 1,16 |
COS-VMs zeigen keine IP-Adressen an, wenn VMs durch nicht ordnungsgemäßes Herunterfahren des Hosts verschoben werden
Wenn auf einem ESXi-Server ein Fehler auftritt und die vCenter-Funktion für Hochverfügbarkeit für den Server aktiviert wurde, lösen alle VMs auf dem fehlerhaften ESXi-Server den vMotion-Mechanismus aus und werden auf einen anderen normalen ESXi-Server verschoben. Migrierte COS-VMs würden ihre IP-Adressen verlieren.
Workaround:
VM neu starten
|
Netzwerk |
alle Versionen vor 1.14.7, 1.15.0 bis 1.15.3, 1.16.0 |
Für GARP-Antwort von Seesaw wird keine Ziel-IP festgelegt
Der regelmäßig alle 20 Sekunden von Seesaw gesendete GARP (Gratuitous ARP) legt die Ziel-IP-Adresse nicht im ARP-Header fest. Einige Netzwerke (wie Cisco ACI) akzeptieren solche Pakete möglicherweise nicht. Dies kann zu längeren Ausfallzeiten des Dienstes führen, nachdem ein Split Brain (aufgrund von VRRP-Paketverlusten) wiederhergestellt wurde.
Workaround:
Lösen Sie ein Seeaw-Failover aus, indem Sie sudo seesaw -c failover auf einer der Seesaw-VMs ausführen. Dadurch sollte der Traffic wiederhergestellt werden.
|
Betriebssystem |
1.16, 1.28.0-1.28.200 |
Kubelet wird mit Logs überschwemmt, die besagen, dass „/etc/kubernetes/manifests“ auf den Worker-Knoten nicht vorhanden ist
"staticPodPath" wurde fälschlicherweise für Worker-Knoten festgelegt
Workaround:
Ordner „/etc/kubernetes/manifests“ manuell erstellen
|