In diesem Dokument werden bekannte Probleme für Version 1.8 von Anthos-Clustern auf VMware (GKE On-Prem) beschrieben.
/var/log/audit/ Speicherplatz belegen
Kategorie
Betriebssystem
Erkannte Versionen
1.8.0+, 1.9.0+, 1.10.0+, 1.11.0+, 1.12.0+, 1.13.0+
Symptome
/var/log/audit/
ist mit Audit-Logs gefüllt. Sie können die Laufwerksnutzung mit sudo du -h -d 1 /var/log/audit
prüfen.
Ursache
Seit Anthos Version 1.8 wird das Ubuntu-Image mit CIS Level2 Benchmark gehärtet. Eine der Complianceregeln 4.1.2.2 Ensure audit logs are not automatically deleted
sorgt für die geprüfte Einstellung max_log_file_action = keep_logs
. Dadurch werden alle Audit-Regeln auf dem Laufwerk gespeichert.
Problemumgehung
Administratorworkstation
Für die Administrator-Workstation können Sie die geprüften Einstellungen manuell so ändern, dass die Logs automatisch rotiert werden. Anschließend können Sie den geprüften 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 veranlassen, dass geprüfte Logs automatisch rotieren, sobald mehr als 250 Dateien mit jeweils 8 Mio. Größe generiert wurden.
Clusterknoten
Wenden Sie für Clusterknoten das folgende DaemonSet auf Ihren Cluster an, um potenzielle Probleme zu vermeiden:
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: /
Diese Änderung der geprüften Konfiguration würde gegen die CIS-Level-2-Regel 4.1.2.2 Ensure audit logs are not automatically deleted
verstoßen.
Upgrade/Aktualisierung des Nutzerclusters schlägt aufgrund von „Fehler beim Registrieren des Nutzerclusters“ fehl
Kategorie
Upgrade, Aktualisierung
Erkannte Versionen
1.7.0+, 1.8.0+
Symptome
Führen Sie gkectl diagnose cluster
aus, wenn bei einem vorherigen gkectl
-Befehl in den folgenden Fällen eine Zeitüberschreitung aufgetreten ist.
- Upgrade von Nutzerclustern mit GKE Connect auf aktivierte 1.8-Versionen.
gkectl update cluster
wird auf 1.8-Nutzerclustern mit aktivierter GKE-Verbindung ausgeführt.gkectl update cluster
ausführen, um GKE Connect auf Nutzerclustern der Version 1.8 zu aktivieren.
$ gkectl diagnose cluster --kubeconfig kubeconfig --cluster-name foo-cluster
…
Unhealthy Resources:
OnPremUserCluster foo-cluster: not ready: ready condition is not true: ClusterCreateOrUpdate: failed to register user cluster "foo-cluster": failed to register cluster: ...
...
Beachten Sie, dass die Funktionalität von GKE Connect nicht beeinträchtigt werden sollte. Mit anderen Worten: Wenn GKE Connect vor dem Befehl funktioniert hat, sollte es weiterhin funktionieren.
Ursache
Die in 1.8-Versionen verwendete Connect-Agent-Version 20210514-00-00
wird nicht mehr unterstützt.
Problemumgehung
Bitte wenden Sie sich an den Google-Support, um das Problem zu beheben.
systemd-timesyncd wird nach Neustart auf Ubuntu-Knoten nicht ausgeführt
Kategorie
Betriebssystem
Erkannte Versionen
1.7.1–1.7.5, 1.8.0–1.8.4, 1.9.0+
Symptome
systemctl status systemd-timesyncd
sollte anzeigen, dass der Dienst inaktiv ist:
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Das kann zu Zeitüberschreitungen führen.
Ursache
chrony
wurde fälschlicherweise auf dem Ubuntu-Betriebssystem-Image installiert. Es gibt einen Konflikt zwischen chrony
und systemd-timesyncd
, wobei systemd-timesyncd
inaktiv wird und chrony
bei jedem Neustart der Ubuntu-VM aktiv wird. systemd-timesyncd
sollte jedoch der Standard-NTP-Client für die VM sein.
Problemumgehung
Option 1: restart systemd-timesyncd
jedes Mal manuell neu starten, wenn die VM neu gestartet wurde.
Option 2: Stellen Sie das folgende Daemonset bereit, damit systemd-timesyncd
immer neu gestartet wird, wenn es inaktiv ist.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: ensure-systemd-timesyncd
spec:
selector:
matchLabels:
name: ensure-systemd-timesyncd
template:
metadata:
labels:
name: ensure-systemd-timesyncd
spec:
hostIPC: true
hostPID: true
containers:
- name: ensure-systemd-timesyncd
# Use your preferred image.
image: ubuntu
command:
- /bin/bash
- -c
- |
while true; do
echo $(date -u)
echo "Checking systemd-timesyncd status..."
chroot /host systemctl status systemd-timesyncd
if (( $? != 0 )) ; then
echo "Restarting systemd-timesyncd..."
chroot /host systemctl start systemd-timesyncd
else
echo "systemd-timesyncd is running."
fi;
sleep 60
done
volumeMounts:
- name: host
mountPath: /host
resources:
requests:
memory: "10Mi"
cpu: "10m"
securityContext:
privileged: true
volumes:
- name: host
hostPath:
path: /
````
## ClientConfig custom resource
`gkectl update` reverts any manual changes that you have made to the ClientConfig
custom resource. We strongly recommend that you back up the ClientConfig
resource after every manual change.
## gkectl check-config</code> validation fails: can't find F5 BIG-IP partitions
<dl>
<dt>Symptoms</dt>
<dd><p>Validation fails because F5 BIG-IP partitions can't be found, even though they exist.</p></dd>
<dt>Potential causes</dt>
<dd><p>An issue with the F5 BIG-IP API can cause validation to fail.</p></dd>
<dt>Resolution</dt>
<dd><p>Try running <code>gkectl check-config</code> again.</p></dd>
</dl>
## Disruption for workloads with PodDisruptionBudgets {:#workloads_pdbs_disruption}
Upgrading clusters can cause disruption or downtime for workloads that use
[PodDisruptionBudgets](https://kubernetes.io/docs/concepts/workloads/pods/disruptions/){:.external}
(PDBs).
## Nodes fail to complete their upgrade process
If you have `PodDisruptionBudget` objects configured that are unable to
allow any additional disruptions, node upgrades might fail to upgrade to the
control plane version after repeated attempts. To prevent this failure, we
recommend that you scale up the `Deployment` or `HorizontalPodAutoscaler` to
allow the node to drain while still respecting the `PodDisruptionBudget`
configuration.
To see all `PodDisruptionBudget` objects that do not allow any disruptions:
kubectl get poddisruptionbudget --all-namespaces -o jsonpath='{range .items[?(@.status.disruptionsAllowed==0)]}{.metadata.name}/{.metadata.namespace}{"\n"}{end}' ```
Die Installation von Nutzerclustern ist fehlgeschlagen, weil in cert-manager/ca-injector ein Problem mit der Leader-Auswahl in Anthos 1.8.2 und 1.8.3 aufgetreten ist
Möglicherweise wird ein Installationsfehler aufgrund von cert-manager-cainjector
in der Absturzschleife angezeigt, wenn der API-Server/etcd langsam ist. Mit dem folgenden Befehl
kubectl logs --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system deployments/cert-manager-cainjector
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"
Führen Sie die folgenden Befehle aus, um das Problem zu beheben.
Skalieren Sie zuerst monitoring-operator
herunter, damit die Änderungen am cert-manager-cainjector
-Deployment nicht rückgängig gemacht werden.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME scale deployment monitoring-operator --replicas=0
Patchen Sie dann das cert-manager-cainjector
-Deployment, um die Leader-Auswahl zu deaktivieren. Das ist sicher, weil nur ein Replikat ausgeführt wird. Er ist für ein einzelnes Replikat nicht erforderlich.
# Ensure that we run only 1 cainjector replica, even during rolling updates. kubectl patch --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system deployment cert-manager-cainjector --type=strategic --patch ' spec: strategy: rollingUpdate: maxSurge: 0 ' # Add a command line flag for cainjector: `--leader-elect=false` kubectl patch --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system deployment cert-manager-cainjector --type=json --patch '[ { "op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--leader-elect=false" } ]'
Behalten Sie monitoring-operator
-Replikate bei 0 als Minderung bei, bis die Installation abgeschlossen ist. Andernfalls wird die Änderung rückgängig gemacht.
Nachdem die Installation abgeschlossen ist und der Cluster ausgeführt wird, aktivieren Sie monitoring-operator
für Tag-2-Vorgänge:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME scale deployment monitoring-operator --replicas=1
Nach dem Upgrade auf 1.8.4 und höher (oder 1.9.1 und höher, wenn ein Upgrade auf 1.9 erfolgt), sind diese Schritte nicht mehr erforderlich, da Anthos die Leader-Auswahl für Kainjector deaktiviert. Wenn dieses Problem bei jedem Upgrade auftritt, müssen Sie dieselben Schritte zur Risikominderung noch einmal ausführen.
Möglicherweise müssen die Zertifikate vor einem Upgrade des Administratorclusters verlängert werden
Bevor Sie mit dem Upgrade des Administratorclusters beginnen, sollten Sie prüfen, ob die Zertifikate des Administratorclusters derzeit gültig sind, und sie verlängern, falls nicht.
Verlängerungsprozess des Administratorclusterzertifikats
Prüfen Sie zuerst, ob OpenSSL auf der Administrator-Workstation installiert ist, bevor Sie beginnen.
Legen Sie die Variable
KUBECONFIG
fest.KUBECONFIG=ABSOLUTE_PATH_ADMIN_CLUSTER_KUBECONFIG
Ersetzen Sie ABSOLUTE_PATH_ADMIN_CLUSTER_KUBECONFIG durch den absoluten Pfad zur kubeconfig-Datei des Administratorclusters.
Rufen Sie die IP-Adresse und die SSH-Schlüssel für den Administrator-Masterknoten ab:
kubectl --kubeconfig "${KUBECONFIG}" get secrets -n kube-system sshkeys \ -o jsonpath='{.data.vsphere_tmp}' | base64 -d > \ ~/.ssh/admin-cluster.key && chmod 600 ~/.ssh/admin-cluster.key export MASTER_NODE_IP=$(kubectl --kubeconfig "${KUBECONFIG}" get nodes -o \ jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}' \ --selector='node-role.kubernetes.io/master')
Prüfen Sie, ob die Zertifikate abgelaufen sind:
ssh -i ~/.ssh/admin-cluster.key ubuntu@"${MASTER_NODE_IP}" \ "sudo kubeadm alpha certs check-expiration"
Wenn die Zertifikate abgelaufen sind, müssen Sie sie vor dem Upgrade des Administratorclusters verlängern.
Da die kubeconfig-Datei des Administratorclusters auch abläuft, wenn die Administratorzertifikate ablaufen, sollten Sie diese Datei vor Ablauf sichern.
Sichern Sie die kubeconfig-Datei des Administratorclusters:
ssh -i ~/.ssh/admin-cluster.key ubuntu@"${MASTER_NODE_IP}"
"sudo cat /etc/kubernetes/admin.conf" > new_admin.conf vi "${KUBECONFIG}"Ersetzen Sie
client-certificate-data
undclient-key-data
in kubeconfig durchclient-certificate-data
undclient-key-data
in der von Ihnen erstellten Dateinew_admin.conf
.
Sichern Sie alte Zertifikate:
Dieser Schritt ist optional, wird jedoch empfohlen.
# ssh into admin master if you didn't in the previous step ssh -i ~/.ssh/admin-cluster.key ubuntu@"${MASTER_NODE_IP}" # on admin master sudo tar -czvf backup.tar.gz /etc/kubernetes logout # on worker node sudo scp -i ~/.ssh/admin-cluster.key \ ubuntu@"${MASTER_NODE_IP}":/home/ubuntu/backup.tar.gz .
Verlängern Sie die Zertifikate mit kubeadm:
# ssh into admin master ssh -i ~/.ssh/admin-cluster.key ubuntu@"${MASTER_NODE_IP}" # on admin master sudo kubeadm alpha certs renew all
Starten Sie statische Pods, die auf dem Administratormasterknoten ausgeführt werden, neu:
# on admin master cd /etc/kubernetes sudo mkdir tempdir sudo mv manifests/*.yaml tempdir/ sleep 5 echo "remove pods" # ensure kubelet detect those change remove those pods # wait until the result of this command is empty sudo docker ps | grep kube-apiserver # ensure kubelet start those pods again echo "start pods again" sudo mv tempdir/*.yaml manifests/ sleep 30 # ensure kubelet start those pods again # should show some results sudo docker ps | grep -e kube-apiserver -e kube-controller-manager -e kube-scheduler -e etcd # clean up sudo rm -rf tempdir logout
Zertifikate von Administratorcluster-Worker-Knoten verlängern
Ablaufdatum des Knotenzertifikats prüfen
kubectl get nodes -o wide # find the oldest node, fill NODE_IP with the internal ip of that node ssh -i ~/.ssh/admin-cluster.key ubuntu@"${NODE_IP}" openssl x509 -enddate -noout -in /var/lib/kubelet/pki/kubelet-client-current.pem logout
Erneuern Sie die Knotenzertifikate durch manuelle Knotenreparatur, wenn das Zertifikat bald abläuft.
Sie müssen die erneuerten Zertifikate und das Zertifikat von kube-apiserver validieren.
Prüfen Sie den Ablauf der Zertifikate:
ssh -i ~/.ssh/admin-cluster.key ubuntu@"${MASTER_NODE_IP}"
"sudo kubeadm alpha certs check-expiration"Prüfen Sie das Zertifikat von kube-apiserver:
# Get the IP address of kube-apiserver cat $KUBECONFIG | grep server # Get the current kube-apiserver certificate openssl s_client -showcerts -connect
:
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
> current-kube-apiserver.crt # check expiration date of this cert openssl x509 -in current-kube-apiserver.crt -noout -enddate
Das Skript /etc/cron.Daily/aide belegt den gesamten Speicherplatz in /run, was zu einer Absturzschleife in Pods führt
Ab Anthos-Clustern auf VMware 1.7.2 werden die Ubuntu-Betriebssystem-Images mit CIS L1 Server Benchmark gehärtet.
Daher wurde das Cron-Skript /etc/cron.daily/aide
installiert, damit eine Unterstützungsprüfung geplant wird, um sicherzustellen, dass die CIS L1 Server-Regel „1.4.2 Dateiintegrität regelmäßig überprüft wird“.
Das Skript verwendet /run/aide
als temporäres Verzeichnis, um seine Cron-Logs zu speichern. Im Laufe der Zeit könnte es den gesamten Speicherplatz in /run
belegen. Informationen für eine Problemumgehung finden Sie unter Das Skript /etc/cron.daily/aide verbraucht den gesamten Speicherplatz in /run.
Wenn ein oder mehrere Pods auf einem Knoten abstürzen, führen Sie auf diesem Knoten df -h /run
aus. Dieses Problem tritt wahrscheinlich auf, wenn die Befehlsausgabe 100 % Speicherplatznutzung anzeigt.
Dieses Problem wurde in Version 1.8.1 behoben. Bei den Versionen 1.7.2 und 1.8.0 können Sie dieses Problem mit einer der beiden folgenden Problemumgehungen manuell beheben:
- Entfernen Sie die Logdateien regelmäßig unter
/run/aide/cron.daily.old*
(empfohlen). - Folgen Sie den Schritten im Skript /etc/cron.Daily/aide, um den gesamten Speicherplatz in /run zu verwenden. (Hinweis: Diese Problemumgehung kann sich möglicherweise auf den Compliancestatus des Knotens auswirken).
Seesaw-Load-Balancer mit Version 1.8.0 aktualisieren
Wenn Sie mit gkectl upgrade loadbalancer
versuchen, einige Parameter des Seesaw-Load-Balancers in Version 1.8.0 zu aktualisieren, funktioniert dies weder im DHCP- noch im IPAM-Modus. Wenn Ihre Einrichtung diese Konfiguration enthält, führen Sie kein Upgrade auf Version 1.8.0 durch, sondern auf Version 1.8.1 oder höher.
Anmeldung aufgrund der Ablaufzeit des Passworts nicht in der Administrator-Workstation möglich
Dieses Problem kann auftreten, wenn Sie eine der folgenden Versionen von Anthos-Clustern in VMware verwenden.
- 1.7.2-gke.2
- 1.7.3-gke.2
- 1.8.0-gke.21
- 1.8.0-gke.24
- 1.8.0-gke.25
- 1.8.1-gke.7
- 1.8.2-gke.8
Wenn Sie eine SSH-Verbindung zu Ihren Anthos-VMs herstellen, einschließlich der Administrator-Workstation, der Clusterknoten und der Seesaw-Knoten, erhalten Sie möglicherweise den folgenden Fehler:
WARNING: Your password has expired.
Dieser Fehler tritt auf, weil das Nutzerpasswort für ubuntu auf den VMs abgelaufen ist. Sie müssen die Ablaufzeit des Nutzerpassworts manuell auf einen hohen Wert zurücksetzen, bevor Sie sich bei den VMs anmelden.
Fehler bei der Ablaufzeit verhindern
Wenn Sie die oben aufgeführten betroffenen Versionen ausführen und das Nutzerpasswort noch nicht abgelaufen ist, sollten Sie die Ablaufzeit verlängern, bevor der SSH-Fehler angezeigt wird.
Führen Sie auf jeder Anthos-VM den folgenden Befehl aus:
sudo chage -M 99999 ubuntu
Minderung des Ablaufs für Passwörter
Wenn das Nutzerpasswort bereits abgelaufen ist und Sie sich nicht bei den VMs anmelden können, um die Ablaufzeit zu verlängern, führen Sie für jede Komponente die folgenden Schritte zur Risikominderung aus.
Administratorworkstation
Führen Sie die folgenden Schritte mit einer temporären VM aus. Sie können eine Administrator-Workstation mit der Version 1.7.1-gke.4 erstellen, die als temporäre VM verwendet werden soll.
Prüfen Sie, ob die temporäre VM und die Administrator-Workstation deaktiviert sind.
Hängen Sie das Bootlaufwerk der Administrator-Workstation an die temporäre VM an. Das Bootlaufwerk ist das Label "Festplatte 1".
Stellen Sie das Bootlaufwerk innerhalb der VM bereit, indem Sie diese Befehle ausführen. Ersetzen Sie
dev/sdc1
durch Ihre eigene Bootlaufwerk-ID.sudo mkdir -p /mnt/boot-disk sudo mount /dev/sdc1 /mnt/boot-disk
Legen Sie das Ablaufdatum des ubuntu-Nutzers auf einen großen Wert fest, z. B.
99999
Tage.sudo chroot /mnt/boot-disk chage -M 99999 ubuntu
Fahren Sie die temporäre VM herunter.
Schalten Sie die Administrator-Workstation ein. Sie sollten nun wie gewohnt eine SSH-Verbindung herstellen können.
Löschen Sie zur Bereinigung die temporäre VM.
VM der Administratorcluster-Steuerungsebene
Folgen Sie der Anleitung, um die VM des Administratorcluster-Steuerungsebenen neu zu erstellen.
Administratorcluster-Add-on-VMs
Führen Sie den folgenden Befehl auf der Administrator-Workstation aus, um die VM neu zu erstellen:
kubectl --kubeconfig=ADMIN_CLUSTER_KUBECONFIG patch machinedeployment gke-admin-node --type=json -p="[{'op': 'add', 'path': '/spec/template/spec/metadata/annotations', 'value': {"kubectl.kubernetes.io/restartedAt": "version1"}}]"
Nachdem Sie diesen Befehl ausgeführt haben, warten Sie, bis die Neuerstellung der Administratorcluster-Add-on-VMs abgeschlossen und bereit ist, bevor Sie mit den nächsten Schritten fortfahren.
Nutzercluster-VMs auf Steuerungsebene
Führen Sie den folgenden Befehl über die Administrator-Workstation aus, um die VMs neu zu erstellen:
usermaster=`kubectl --kubeconfig=ADMIN_CLUSTER_KUBECONFIG get machinedeployments -l set=user-master -o name` && kubectl --kubeconfig=ADMIN_CLUSTER_KUBECONFIG patch $usermaster --type=json -p="[{'op': 'add', 'path': '/spec/template/spec/metadata/annotations', 'value': {"kubectl.kubernetes.io/restartedAt": "version1"}}]"
Warten Sie nach dem Ausführen dieses Befehls, bis die VMs der Nutzercluster-Steuerungsebene ihre Neuerstellung abgeschlossen haben und bereit sind, bevor Sie mit den nächsten Schritten fortfahren.
Nutzercluster-Worker-VMs
Führen Sie den folgenden Befehl auf der Administrator-Workstation aus, um die VMs neu zu erstellen.
for md in `kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG get machinedeployments -l set=node -o name`; do kubectl patch --kubeconfig=USER_CLUSTER_KUBECONFIG $md --type=json -p="[{'op': 'add', 'path': '/spec/template/spec/metadata/annotations', 'value': {"kubectl.kubernetes.io/restartedAt": "version1"}}]"; done
Seesaw-VMs
Führen Sie die folgenden Befehle über die Administrator-Workstation aus, um die Seesaw-VMs neu zu erstellen. Es kommt zu einer Ausfallzeit. Wenn für den Load-Balancer Hochverfügbarkeit aktiviert ist, beträgt die maximale Ausfallzeit zwei Sekunden.
gkectl upgrade loadbalancer --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG --admin-cluster --no-diff gkectl upgrade loadbalancer --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG --no-diff
vCenter für Versionen unter 7.0U2 neu starten oder aktualisieren
Wenn das vCenter für Versionen unter 7.0U2 nach einem Upgrade oder anderweitig neu gestartet wird, ist der Netzwerkname in vm-Informationen von vCenter falsch und führt dazu, dass sich der Computer im Status Unavailable
befindet. Dies führt dazu, dass die Knoten automatisch repariert werden, um neue Knoten zu erstellen.
Zugehöriger govmomi-Fehler: https://github.com/vmware/govmomi/issues/2552
Diese Problemumgehung wird vom VMware-Support bereitgestellt:
1. The issue is fixed in vCenter versions 7.0U2 and above. 2. For lower versions: Right-click the host, and then select Connection > Disconnect. Next, reconnect, which forces an update of the VM's portgroup.
Panik gkectl create-config admin
und gkectl create-config cluster
In Version 1.8.0-1.8.3 wird der Befehl gkectl create-config admin/cluster
in die Meldung panic: invalid version: "latest"
umgewandelt.
Verwenden Sie als Behelfslösung gkectl create-config admin/cluster --gke-on-prem-version=DESIRED_CLUSTER_VERSION
. Ersetzen Sie DESIRED_CLUSTER_VERSION
durch die gewünschte Version. Beispiel: 1.8.2-gke.8.
Zeitüberschreitung bei Administratorclustern erstellen/aktualisieren
Dieses Problem betrifft 1.8.0-1.8.3.
Die Erstellung eines Administratorclusters oder das Upgrade eines Administratorclusters wird möglicherweise mit dem folgenden Fehler abgebrochen:
Error getting kubeconfig: error running remote command 'sudo cat /etc/kubernetes/admin.conf': error: Process exited with status 1, stderr: 'cat: /etc/kubernetes/admin.conf: No such file or directory
Darüber hinaus endet das Protokoll unter nodes/ADMIN_MASTER_NODE/files/var/log/startup.log
im externen Cluster-Snapshot mit dieser Meldung:
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
Dieser Fehler tritt auf, wenn das Netzwerk zwischen der VM der Administratorsteuerungsebene und der Container Registry langsam ist. Prüfen Sie Ihre Netzwerk- oder Proxyeinrichtung, um die Latenz zu verringern und die Bandbreite zu erhöhen.
SSH-Verbindung durch Remote-Host geschlossen
Bei Anthos-Cluster auf VMware-Version 1.7.2 und höher werden die Ubuntu-Betriebssystem-Images mit CIS L1 Server Benchmark gehärtet.
Um die CIS-Regel "5.2.16 Sicherstellen, dass das SSH-Zeitlimit für Inaktivität konfiguriert ist" zu erfüllen, hat /etc/ssh/sshd_config
die folgenden Einstellungen:
ClientAliveInterval 300 ClientAliveCountMax 0
Bei diesen Einstellungen wird eine Clientsitzung nach 5 Minuten Inaktivität beendet. Der Wert ClientAliveCountMax 0
führt jedoch zu unerwartetem Verhalten. Wenn Sie die SSH-Sitzung auf der Administrator-Workstation oder einem Clusterknoten verwenden, wird die SSH-Verbindung möglicherweise getrennt, auch wenn Ihr SSH-Client nicht inaktiv ist, z. B. wenn ein zeitaufwendiger Befehl ausgeführt wird. Ihr Befehl wird dann möglicherweise mit der folgenden Nachricht beendet:
Connection to [IP] closed by remote host. Connection to [IP] closed.
Zur Umgehung dieses Problems führen Sie eine der folgenden Aktionen aus:
Verwenden Sie
nohup
, um zu verhindern, dass Ihr Befehl beim Trennen einer SSH-Verbindung beendet wird.nohup gkectl upgrade admin --config admin-cluster.yaml --kubeconfig kubeconfig
Aktualisieren Sie
sshd_config
so, dass einClientAliveCountMax
-Wert ungleich null verwendet wird. Die CIS-Regel empfiehlt die Verwendung eines Werts unter 3.sudo sed -i 's/ClientAliveCountMax 0/ClientAliveCountMax 1/g' /etc/ssh/sshd_config sudo systemctl restart sshd
Stellen Sie sicher, dass Sie Ihre SSH-Sitzung neu verbinden.
Konflikt mit cert-manager
beim Ausführen von Upgrades auf Version 1.8.2 oder höher
Wenn Sie eine eigene cert-manager
-Installation mit Anthos-Clustern auf VMware haben, kann ein Fehler auftreten, wenn Sie versuchen, ein Upgrade auf Version 1.8.2 oder höher durchzuführen. Dies ist auf einen Konflikt zwischen Ihrer Version von cert-manager
, die wahrscheinlich im Namespace cert-manager
installiert ist, und der Version monitoring-operator
zurückzuführen.
Wenn Sie versuchen, eine weitere Kopie von cert-manager
zu installieren, nachdem Sie ein Upgrade auf Anthos-Cluster auf VMware Version 1.8.2 oder höher ausgeführt haben, kann die Installation aufgrund eines Konflikts mit dem vorhandenen Cluster, der von monitoring-operator
verwaltet wird, fehlschlagen.
Der Clusteraussteller metrics-ca
, von dem Komponenten der Steuerungsebene und Beobachtbarkeitskomponenten zum Erstellen und Rotieren von Zertifikat-Secrets abhängen, erfordert ein metrics-ca
-Zertifikat-Secret im Namespace der Clusterressource. Dieser Namespace ist kube-system
für die Installation des Monitoring-Operators und wahrscheinlich cert-manager
für Ihre Installation.
Wenn ein Installationsfehler aufgetreten ist, führen Sie die folgenden Schritte aus, um ein Upgrade auf Version 1.8.2 oder höher auszuführen:
Konflikte während des Upgrades vermeiden
Deinstallieren Sie Ihre Version von
cert-manager
. Wenn Sie Ihre eigenen Ressourcen definiert haben, können 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
verwaltetencert-manager
-Bereitstellungen auf 0.kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system scale deployment cert-manager --replicas=0 kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system scale deployment cert-manager-cainjector --replicas=0 kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system scale deployment cert-manager-webhook --replicas=0
Installieren Sie
cert-manager
noch einmal. Stellen Sie Ihre benutzerdefinierten Ressourcen wieder her, sofern vorhanden.Kopieren Sie das cert-manager.io/v1-Zertifikat
metrics-ca
und die Ausstellerressourcenmetrics-pki.cluster.local
vonkube-system
in den Clusterressourcen-Namespace des installierten cert-managers. Ihr installierter cert-manager-Namespace istcert-manager
, wenn Sie die vorgelagerte Standard-cert-manager-Installation verwenden. Dies hängt aber von Ihrer Installation ab.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 kube-system metrics-pki.cluster.local -o json | jq "${relevant_fields}" > $f1 kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get certificate -n kube-system 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 müssen Sie cert-manager in Administratorclustern nicht neu installieren, da Administratorcluster nur Anthos-Cluster auf VMware-Steuerungsebenen-Arbeitslasten 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. Wenn Sie Apigee-Kunde sind und Cert-Manager nur 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
verwaltetencert-manager
-Bereitstellungen auf 0.kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system scale deployment cert-manager --replicas=0 kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system scale deployment cert-manager-cainjector --replicas=0 kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system scale deployment cert-manager-webhook --replicas=0
Installieren Sie
cert-manager
noch einmal. Stellen Sie Ihre benutzerdefinierten Ressourcen wieder her, sofern vorhanden.Kopieren Sie das cert-manager.io/v1-Zertifikat
metrics-ca
und die Ausstellerressourcenmetrics-pki.cluster.local
vonkube-system
in den Clusterressourcen-Namespace des installierten cert-managers. Ihr installierter cert-manager-Namespace istcert-manager
, wenn Sie die vorgelagerte Standard-cert-manager-Installation verwenden. Dies hängt aber von Ihrer Installation ab.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 get issuer -n kube-system metrics-pki.cluster.local -o json | jq "${relevant_fields}" > $f3 kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get certificate -n kube-system metrics-ca -o json | jq "${relevant_fields}" > $f4 kubectl apply --kubeconfig ADMIN_CLUSTER_KUBECONFIG -f $f3 kubectl apply --kubeconfig ADMIN_CLUSTER_KUBECONFIG -f $f4
Falsch positive Ergebnisse beim Scannen auf Sicherheitslücken in Docker, Containerd und Runc
Die Docker-, Containerd- und Runc-Objekte in den Ubuntu-Betriebssystem-Images, die mit Anthos-Clustern in VMware geliefert werden, werden mithilfe von Ubuntu PPA an spezielle Versionen angepinnt. Dadurch wird gewährleistet, dass Änderungen der Containerlaufzeit von Anthos-Clustern auf VMware vor jedem Release qualifiziert werden.
Die speziellen Versionen sind jedoch im Ubuntu CVE-Tracker unbekannt. Er wird von den CVE-Scantools als Feeds für Sicherheitslücken verwendet. Daher werden falsch positive Ergebnisse beim Scannen auf Sicherheitslücken in Docker, Containerd und Runc angezeigt.
Zum Beispiel können die folgenden falsch positiven Ergebnisse aus den CVE-Scanergebnissen angezeigt werden. Diese CVEs wurden bereits in den neuesten Patchversionen von Anthos-Clustern auf VMware behoben.
Informationen zu CVE-Korrekturen finden Sie in den Versionshinweisen.
Das Problem ist Canonical bekannt und der Fehler wird unter https://github.com/canonical/sec-cvescan/issues/73 verfolgt.
/etc/cron.daily/aide
-CPU- und Speicherspitzenproblem
Ab Anthos-Clustern auf VMware 1.7.2 werden die Ubuntu-Betriebssystem-Images mit CIS L1 Server Benchmark gehärtet.
Daher wurde das Cron-Skript /etc/cron.daily/aide
installiert, damit eine aide
-Prüfung geplant wird. Auf diese Weise wird die Einhaltung der CIS-L1-Serverregel „1.4.2 Dateisystemintegrität muss regelmäßig geprüft werden” sichergestellt.
Der Cronjob wird täglich um 6:25 Uhr (UTC) ausgeführt. Abhängig von der Anzahl der Dateien im Dateisystem kann es zu dieser Zeit zu CPU- und Speicherauslastungsspitzen kommen, die durch den aide
-Prozess verursacht werden.
Wenn die Spitzen Ihre Arbeitslast beeinträchtigen, können Sie den täglichen Cronjob deaktivieren:
`sudo chmod -x /etc/cron.daily/aide`.
Cisco ACI funktioniert nicht mit Direct Server Return (DSR)
Seesaw wird im DSR-Modus ausgeführt und funktioniert aufgrund des IP-Lernens auf Datenebene standardmäßig nicht in Cisco ACI. Eine mögliche Problemumgehung besteht in der Deaktivierung des IP-Lernens. Fügen Sie dazu die Seesaw-IP-Adresse als virtuelle L4-L7-IP-Adresse zum Cisco Application Policy Infrastructure Controller (APIC) hinzu.
Sie können die virtuelle IP-Adresse für L4-L7 unter Mandant > Anwendungsprofile > Anwendungs-EPGs oder uSeg-EPGs konfigurieren. Wird das IP-Lernen nicht deaktiviert, führt dies zu Flapping von IP-Endpunkten zwischen verschiedenen Standorten in der Cisco API-Fabric.
Ein zu langes Dienstkontoinhabertoken kann die Logs von Seesaw-Load-Balancer beeinträchtigen.
Wenn das Inhabertoken des Logging-Monitoring-Dienstkontos größer als 512 KB ist, können die Seesaw-Load-Balancer-Logs beeinträchtigt werden. Führen Sie zur Problembehebung ein Upgrade auf Version 1.9 oder höher durch.
Verbindungsprobleme zwischen Pods aufgrund von anetd
-Daemons im Software-Deadlock
Bei Clustern, für die enableDataplaneV2
auf true
festgelegt ist, können Verbindungsprobleme zwischen Pods auftreten, da anetd
-Daemons (die als Daemonset ausgeführt werden) eine Software-Deadlock eingeben. In diesem Zustand sehen anetd
-Daemons veraltete Knoten (zuvor gelöschte Knoten) als Peers und verpassen neu hinzugefügte Knoten als neue Peers.
Wenn dieses Problem aufgetreten ist, führen Sie die folgenden Schritte aus, um die anetd
-Daemons neu zu starten und die Peer-Knoten zu aktualisieren. Die Verbindung sollte dann wiederhergestellt werden.
Alle
anetd
-Daemons im Cluster suchen:kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG -n kube-system get pods -o wide | grep anetd
Prüfen Sie, ob die
anetd
-Daemons derzeit veraltete Peers sehen:kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG -n kube-system exec -it ANETD_XYZ -- cilium-health status
Ersetzen Sie ANETD_XYZ durch den Namen eines
anetd
-Pods.Starten Sie alle betroffenen Pods neu:
kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG -n kube-system delete pod ANETD_XYZ
„Gkectl diagnose“-Prüfung von Zertifikatfehlern
Wenn Ihre Workstation keinen Zugriff auf Worker-Knoten von Nutzerclustern hat, wird beim Ausführen von gkectl diagnose
die folgende Fehlermeldung angezeigt, die Sie ignorieren können.
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