Installation
Inkompatibilität der Kontrollgruppe v2
Kontrollgruppe v2 (cgroup v2) ist mit Bare-Metal-1.6-Ressourcen nicht mit Anthos-Clustern kompatibel.
Kubernetes 1.18 unterstützt cgroup v2 nicht. Außerdem bietet Docker experimentelle Unterstützung ab 20.10. systemd wurde in der Version 247.2-2 standardmäßig auf cgroup v2 umgestellt.
Das Vorhandensein von /sys/fs/cgroup/cgroup.controllers
gibt an, dass Ihr System cgroup v2 verwendet.
Ab Anthos-Cluster on Bare Metal 1.6.2 prüft Preflight, ob cgroup v2 auf dem Clustercomputer verwendet wird.
Fehlermeldungen während der Installation
Bei der Hochverfügbarkeit (HA) des Clusters werden möglicherweise Fehler zu etcdserver leader change
angezeigt. Diese Fehlermeldungen sind harmlos und können ignoriert werden.
Wenn Sie bmctl
für die Cluster-Installation verwenden, wird möglicherweise am Ende von create-cluster.log
die Lognachricht Log streamer failed to get BareMetalMachine
angezeigt. Diese Fehlermeldung ist harmlos und kann ignoriert werden.
Bei der Untersuchung von Logs zur Clustererstellung können Sie unter Umständen vorübergehende Fehler beim Registrieren von Clustern oder Aufrufen von Webhooks feststellen. Diese Fehler können ignoriert werden, da die Installation diese Vorgänge so lange wiederholt, bis sie erfolgreich sind.
Preflight-Prüfungen und Anmeldedaten für Dienstkonten
Bei Installationen, die durch Administrator- oder Hybridcluster ausgelöst werden, also Cluster, die nicht mit bmctl
erstellt wurden, wie etwa Nutzercluster, werden bei der Preflight-Prüfung die Anmeldedaten des Google Cloud Platform-Dienstkontos oder deren zugehörigen Berechtigungen nicht geprüft..
Standardanmeldedaten für Anwendungen und bmctl
bmctl
verwendet Standardanmeldedaten für Anwendungen für die Validierung des Standortwerts des Clustervorgangs in cluster spec
, wenn dieser nicht auf global
gesetzt ist.
Damit ADC funktioniert, müssen Sie entweder die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS
auf eine Datei mit den Anmeldedaten des Dienstkontos verweisen oder gcloud auth application-default login
ausführen.
Docker-Dienst
Wenn auf Computern von Clusterknoten die ausführbare Docker-Datei in der Umgebungsvariable PATH
vorhanden ist, der Docker-Dienst jedoch nicht aktiv ist, schlägt die Preflight-Prüfung fehl und meldet die Docker service is not active
. Sie können den Fehler beheben, indem Sie Docker entfernen oder den Docker-Dienst aktivieren.
Upgrades und Updates
Ein Upgrade ist in den Anthos-Clustern auf Bare-Metal 1.6.x-Releases nicht verfügbar.
bmctl update cluster
schlägt fehl, wenn das Verzeichnis .manifests
fehlt
Wenn das Verzeichnis .manifests
vor der Ausführung von bmctl update cluster
entfernt wird, schlägt der Befehl mit einem Fehler wie diesem fehl:
Error updating cluster resources.: failed to get CRD file .manifests/1.9.0/cluster-operator/base/crd/bases/baremetal.cluster.gke.io_clusters.yaml: open .manifests/1.9.0/cluster-operator/base/crd/bases/baremetal.cluster.gke.io_clusters.yaml: no such file or directory
Sie können dieses Problem beheben, indem Sie zuerst bmctl check cluster
ausführen. Dadurch wird das Verzeichnis .manifests
neu erstellt.
Dieses Problem betrifft Anthos-Cluster auf Bare-Metal-Versionen ab 1.10 und wurde in Version 1.11 und höher behoben.
bmctl update
entfernt keine Wartungsblöcke
Mit dem Befehl bmctl update
kann der Abschnitt maintenanceBlocks
nicht aus der Konfiguration der Clusterressource entfernt oder geändert werden. Weitere Informationen, einschließlich Anweisungen zum Entfernen von Knoten aus dem Wartungsmodus, finden Sie unter Knoten in den Wartungsmodus versetzen.
Aktion
kubeconfig-Secret überschrieben
Der Befehl bmctl check cluster
überschreibt bei Ausführung in Nutzerclustern das kubeconfig-Secret des Nutzerclusters mit der Administratorcluster-kubeconfig. Das Überschreiben der Datei führt dazu, dass Standard-Clustervorgänge wie das Aktualisieren und Upgraden für betroffene Nutzercluster fehlschlagen. Dieses Problem betrifft die Anthos-Cluster auf Bare-Metal-Version 1.11.1 und frühere Versionen.
Führen Sie den folgenden Befehl aus, um festzustellen, ob ein Nutzercluster von diesem Problem betroffen ist:
kubectl --kubeconfig ADMIN_KUBECONFIG get secret -n cluster-USER_CLUSTER_NAME \
USER_CLUSTER_NAME -kubeconfig -o json | jq -r '.data.value' | base64 -d
Dabei gilt:
ADMIN_KUBECONFIG
: der Pfad zur kubeconfig-Datei des Administratorclusters.USER_CLUSTER_NAME
: der Name des zu prüfenden Nutzerclusters.
Wenn der Clustername in der Ausgabe (siehe contexts.context.cluster
in der folgenden Beispielausgabe) der Name des Administratorclusters ist, ist der angegebene Nutzercluster betroffen.
user-cluster-kubeconfig -o json | jq -r '.data.value' | base64 -d
apiVersion: v1
clusters:
- cluster:
certificate-authority-data:LS0tLS1CRU...UtLS0tLQo=
server: https://10.200.0.6:443
name: ci-aed78cdeca81874
contexts:
- context:
cluster: ci-aed78cdeca81874
user: ci-aed78cdeca81874-admin
name: ci-aed78cdeca81874-admin@ci-aed78cdeca81874
current-context: ci-aed78cdeca81874-admin@ci-aed78cdeca81874
kind: Config
preferences: {}
users:
- name: ci-aed78cdeca81874-admin
user:
client-certificate-data: LS0tLS1CRU...UtLS0tLQo=
client-key-data: LS0tLS1CRU...0tLS0tCg==
Mit den folgenden Schritten stellen Sie die Funktion in einem betroffenen Nutzercluster wieder her (USER_CLUSTER_NAME
):
Suchen Sie die kubeconfig-Datei des Nutzerclusters.
Anthos-Cluster auf Bare-Metal generiert die kubeconfig-Datei auf der Administrator-Workstation, wenn Sie einen Cluster erstellen. Die Datei befindet sich standardmäßig im Verzeichnis
bmctl-workspace/USER_CLUSTER_NAME
.Prüfen Sie, ob die kubeconfig-Datei die richtige Nutzercluster-kubeconfig ist:
kubectl get nodes --kubeconfig PATH_TO_GENERATED_FILE
Ersetzen Sie
PATH_TO_GENERATED_FILE
durch den Pfad zur Kubeconfig-Datei des Nutzerclusters. In der Antwort werden Details zu den Knoten für den Nutzercluster zurückgegeben. Prüfen Sie, ob die Maschinennamen für Ihren Cluster korrekt sind.Führen Sie den folgenden Befehl aus, um die beschädigte kubeconfig-Datei im Administratorcluster zu löschen:
kubectl delete secret -n USER_CLUSTER_NAMESPACE USER_CLUSTER_NAME-kubeconfig
Führen Sie den folgenden Befehl aus, um das richtige kubeconfig-Secret wieder im Administratorcluster zu speichern:
kubectl create secret generic -n USER_CLUSTER_NAMESPACE USER_CLUSTER_NAME-kubeconfig \ --from-file=value=PATH_TO_GENERATED_FILE
Zurücksetzen/Löschen
Anmeldedaten für Nutzercluster
Der Befehl bmctl reset
basiert auf der obersten Ebene der Anmeldedaten in der Cluster-Konfigurationsdatei. Bei Nutzerclustern müssen Sie die Datei manuell aktualisieren, um den Abschnitt "Anmeldedaten" hinzuzufügen.
Bereitstellungspunkte und fstab
Durch das Zurücksetzen werden die Bereitstellungspunkte unter /mnt/anthos-system
und /mnt/localpv-share/
nicht getrennt. Außerdem werden die entsprechenden Einträge in /etc/fstab
nicht bereinigt.
Namespace löschen
Das Löschen eines Namespace verhindert, dass neue Ressourcen in diesem Namespace erstellt werden, einschließlich Jobs zum Zurücksetzen von Maschinen. Wenn Sie einen Nutzercluster löschen, müssen Sie zuerst das Clusterobjekt löschen, bevor Sie seinen Namespace löschen. Andernfalls können die Jobs zum Zurücksetzen der Maschinen nicht erstellt werden und beim Löschen wird der Bereinigungsvorgang der Maschine übersprungen.
Sicherheit
Die Cluster-Zertifizierungsstelle wird während des Upgrades rotiert. Eine On-Demand-Rotation wird derzeit nicht unterstützt.
Anthos-Cluster on Bare Metal rotiert kubelet
-Zertifikate automatisch.
Jeder kubelet
-Knoten-Agent kann eine Anfrage zur Signierung des Zertifikats (Certificate Signing Request, CSR) senden, wenn ein Zertifikat die Ablaufzeit überschreitet. Ein Controller in Ihren Administratorclustern validiert und genehmigt die CSR.
Netzwerk
Quell-IP von Clients mit gebündeltem Layer-2-Load-Balancing
Wenn Sie die externe Trafficrichtlinie auf Local
setzen, können Routingfehler wie No route to host
für das gebündelte Layer-2-Load-Balancing auftreten. Die Richtlinie für externen Traffic ist standardmäßig auf Cluster
(externalTrafficPolicy: Cluster
) gesetzt. Mit dieser Einstellung verarbeitet Kubernetes den gesamten Cluster-Traffic. Dienste vom Typ LoadBalancer
oder NodePort
können externalTrafficPolicy: Local
verwenden, um die Quell-IP-Adresse des Clients beizubehalten.
Bei dieser Einstellung verarbeitet Kubernetes jedoch nur den lokalen Knoten-Traffic.
Wenn Sie die Quell-IP-Adresse des Clients beibehalten möchten, ist möglicherweise eine zusätzliche Konfiguration erforderlich, damit die Dienst-IP-Adressen erreichbar sind. Konfigurationsdetails finden Sie unter Gebündeltes Client-IP-Adressen beibehalten.
Pod-Konnektivitätsfehler und Filterung für umgekehrte Pfade
Anthos-Cluster on Bare Metal konfiguriert die Filterung für umgekehrte Pfade auf Knoten, um die Quellvalidierung zu deaktivieren (net.ipv4.conf.all.rp_filter=0
). Wenn die Einstellung rp_filter
in 1
oder 2
geändert wird, schlagen Pods fehl, da außerhalb der Knoten das Kommunikationszeitlimit überschritten wird.
Die Filterung für umgekehrte Pfade wird mit rp_filter
-Dateien im IPv4-Konfigurationsordner (net/ipv4/conf/all
) festgelegt. Dieser Wert kann auch von sysctl
überschrieben werden. Damit werden Einstellungen der Filterung für umgekehrte Pfade in einer Netzwerksicherheitskonfigurationsdatei gespeichert, z. B. /etc/sysctl.d/60-gce-network-security.conf
.
Zur Wiederherstellung der Pod-Verbindung können Sie net.ipv4.conf.all.rp_filter
entweder manuell auf 0
zurücksetzen oder den anetd
-Pod neu starten, um net.ipv4.conf.all.rp_filter
wieder auf 0
zurückzusetzen. Für einen Neustart des anetd
-Pods verwenden Sie die folgenden Befehle, um den anetd
-Pod zu ermitteln und zu löschen und einen neuen anetd
-Pod an seiner Stelle zu starten:
kubectl get pods -n kube-system
kubectl delete pods -n kube-system ANETD_XYZ
Ersetzen Sie ANETD_XYZ durch den Namen des anetd
-Pods.
Cluster-IP-Adressen vom Typ Bootstrap und IP-Adressen von Clusterknoten:
192.168.122.0/24
und 10.96.0.0/27
sind die Standard-Pod- und Dienst-CIDRs, die vom Bootstrap-Cluster (Typ) verwendet werden. Preflight-Prüfungen schlagen fehl, wenn sie sich mit IP-Adressen von Clusterknoten überschneiden. Zur Vermeidung des Konflikts können Sie die Flags --bootstrap-cluster-pod-cidr
und --bootstrap-cluster-service-cidr
an bmctl
übergeben, um andere Werte anzugeben.
Überlappende IP-Adressen in verschiedenen Clustern
Es gibt keine Vorabprüfung, um überlappende IP-Adressen in verschiedenen Clustern zu prüfen.
Funktion hostport
in Anthos-Cluster on Bare Metal
Die Funktion hostport
in ContainerPort
wird derzeit nicht unterstützt.
Betriebssystem
Fehler beim Erstellen oder Upgraden von Clustern unter CentOS
Im Dezember 2020 gab die CentOS-Community und Red Hat die Einstellung von CentOS bekannt.
Am 31. Januar 2022 erreicht CentOS 8 das Ende des Produktzyklus (End of Life, EOL). Aufgrund der EOL-Dauer funktionieren yum
-Repositories nicht mehr für CentOS, was dazu führt, dass Clustererstellung und Cluster-Upgrade-Vorgänge fehlschlagen. Dies gilt für alle unterstützten Versionen von CentOS und betrifft alle Versionen von Anthos-Clustern auf Bare-Metal.
Um das Problem zu umgehen, führen Sie die folgenden Befehle aus, damit Ihr CentOS einen Archiv-Feed verwendet:
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Linux-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' \ /etc/yum.repos.d/CentOS-Linux-*
Langfristige Lösung finden Sie in der Migration zu einem anderen unterstützten Betriebssystem wie Ubuntu oder RHEL.
Einschränkungen des Betriebssystem-Endpunkts
Bei RHEL und CentOS gibt es eine Beschränkung auf Clusterebene von 100.000 Endpunkten.
Kubernetes-Dienst. Wenn zwei Dienste auf dieselbe Gruppe von Pods verweisen, wird dies als zwei separate Gruppen von Endpunkten gezählt. Die zugrunde liegende nftable
-Implementierung unter RHEL und CentOS führt diese Einschränkung aus. Es ist keine Systeminstabilität von Anthos-Cluster on Bare Metal.
Konfiguration
Spezifikationen der Steuerungsebene und des Load-Balancers
Die Knotenpoolspezifikationen der Steuerungsebene und des Load-Balancers sind spezifisch. Diese Spezifikationen deklarieren und steuern wichtige Clusterressourcen. Die kanonische Quelle für diese Ressourcen sind die entsprechenden Abschnitte in der Cluster-Konfigurationsdatei:
spec.controlPlane.nodePoolSpec
spec.LoadBalancer.nodePoolSpec
Daher sollten Sie die Knotenpoolressourcen der obersten Ebene und die Load-Balancer-Knotenressourcen nicht direkt ändern. Ändern Sie stattdessen die zugehörigen Abschnitte in der Cluster-Konfigurationsdatei.
Änderbare Felder in der Cluster- und Knotenpoolspezifikation
Derzeit können nur die folgenden Cluster- und Knotenpool-Spezifikationsfelder in der Cluster-Konfigurationsdatei aktualisiert werden, nachdem der Cluster erstellt wurde (änderbare Felder):
Für das Objekt
Cluster
(kind: Cluster
) können die folgenden Felder geändert werden:spec.anthosBareMetalVersion
spec.bypassPreflightCheck
spec.controlPlane.nodePoolSpec.nodes
spec.loadBalancer.nodePoolSpec.nodes
spec.maintenanceBlocks
spec.nodeAccess.loginUser
Für das Objekt
NodePool
(kind: NodePool
) können die folgenden Felder geändert werden:spec.nodes
Knoten zeigt den Status NotReady
an
Unter bestimmten Lastbedingungen können Anthos-Cluster auf Bare-Metal 1.6.x-Knoten den Status NotReady
zeigen, da Pod Lifecycle Event Generator (PLEG) fehlerhaft ist.
Der Knotenstatus enthält den folgenden Eintrag:
PLEG is not healthy: pleg was last seen active XXXmXXXs ago; threshold is 3m0s
Woher weiß ich, ob ich betroffen bin?
Eine mögliche Ursache für dieses Problem ist die Binärversion von runc. Sie können prüfen, ob die problematische Version installiert ist, indem Sie eine SSH-Verbindung zu einem der Clustermaschinen herstellen und Folgendes ausführen:
/usr/bin/runc -v
Wenn die Ausgabe 1.0.0-rc93
lautet, ist die problematische Version installiert.
Mögliche Problemumgehungen
Um dieses Problem zu beheben, empfehlen wir die Aktualisierung auf Anthos-Cluster auf Bare-Metal 1.7.0 oder eine höhere Version.
Wenn das Upgrade nicht möglich ist, können Sie das Paket containerd.io
auf eine frühere Version der problematischen Knotenmaschinen zurücksetzen. Stellen Sie dazu eine SSH-Verbindung zur Knotenmaschine her und führen Sie Folgendes aus:
Ubuntu
apt install containerd.io=1.4.3-1
CentOS/RHEL
dnf install containerd.io-1.3.9-3.1.el8.