Einleitung
Dieses Dokument beschreibt eine Lösung, um den kontinuierlichen Neustart von kube-apiserver POD wiederherzustellen.
Voraussetzungen
Anforderungen
Cisco empfiehlt, über die folgenden Themen zu verfügen:
- Dockers und Kubertricks
- Cisco Subscriber Microservices Infrastructure (SMI) Ultra Cloud Core Common Execution Environment (CEE)
Verwendete Komponenten
Die Informationen in diesem Dokument basieren auf der Kubernetes Version 1.21.0.
Die Informationen in diesem Dokument beziehen sich auf Geräte in einer speziell eingerichteten Testumgebung. Alle Geräte, die in diesem Dokument benutzt wurden, begannen mit einer gelöschten (Nichterfüllungs) Konfiguration. Wenn Ihr Netzwerk in Betrieb ist, stellen Sie sicher, dass Sie die potenziellen Auswirkungen eines Befehls verstehen.
Was ist kube-apiserver?
- Der API-Server (Kubernetes Application Programming Interface) validiert und konfiguriert Daten für die API-Objekte, darunter PODs, Services, Replikations-Controller und andere. Die API-Server-Services REpräsentational State Transfer (REST)-Vorgänge und stellen das Front-End für den gemeinsam genutzten Zustand des Clusters bereit, über den alle anderen Komponenten interagieren.
-
Der Kubernete API-Server ist für die Authentifizierung und Validierung von Anfragen, das Abrufen und Aktualisieren von Daten im elektronischen Datenspeicher zuständig. Tatsächlich ist kube-API-Server die einzige Komponente, die direkt mit dem elektronischen Datenspeicher interagiert.
- Dies sind die Schritte, die der kube-API-Server unternimmt, wenn ein POD im Cluster erstellt wird:
antwort: Benutzer authentifizieren
b) Anfrage validieren
c) Abrufen von Daten
d) ETCD aktualisieren
e Scheduler
f. Kubelet
- Die anderen Komponenten wie Scheduler, kube-controller-manager & kubelet nutzen den API-Server, um Updates im Cluster in ihren jeweiligen Bereichen durchzuführen.
Problem
Der kube-apiserver-smf-data-master-3 Neustart wird kontinuierlich beobachtet. In diesem Fall führen Sie kubectl CLI kubectl get pods -A -o wide aus | grep apiserver zur Identifizierung des Problems:
cloud-user@smf-data-master-1:~$ kubectl get pods -A -o wide | grep apiserver
kube-system kube-apiserver-smf-data-master-1 1/1 Running 4 68d 10.192.1.22 smf-data-master-1 <none> <none>
kube-system kube-apiserver-smf-data-master-2 1/1 Running 4 68d 10.192.1.23 smf-data-master-2 <none> <none>
kube-system kube-apiserver-smf-data-master-3 0/1 Running 2 68d 10.192.1.24 smf-data-master-3 <none> <none>
cloud-user@smf-data-master-1:~$
Diese Fehler wurden in den kubectl-Protokollen <kube-apiserver_pod_name> -n kube-system beobachtet:
cloud-user@smf-data-master-1:~$ kubectl logs kube-apiserver-smf-data-master-3 -n kube-system
E1116 20:09:52.635602 1 cacher.go:419] cacher (*core.Secret): unexpected ListAndWatch error: failed to list *core.Secret: unable to transform key "/registry/secrets/cee-dnceed21/alert-logger-sa-token-dzhkb": invalid padding on input; reinitializing...
E1116 20:09:53.691253 1 cacher.go:419] cacher (*core.Secret): unexpected ListAndWatch error: failed to list *core.Secret: unable to transform key "/registry/secrets/cee-dnceed21/alert-logger-sa-token-dzhkb": invalid padding on input; reinitializing...
E1116 20:09:54.751145 1 cacher.go:419] cacher (*core.Secret): unexpected ListAndWatch error: failed to list *core.Secret: unable to transform key "/registry/secrets/cee-dnceed21/alert-logger-sa-token-dzhkb": invalid padding on input; reinitializing...
E1116 20:09:55.808782 1 cacher.go:419] cacher (*core.Secret): unexpected ListAndWatch error: failed to list *core.Secret: unable to transform key "/registry/secrets/cee-dnceed21/alert-logger-sa-token-dzhkb": invalid padding on input; reinitializing...
E1116 20:09:56.865492 1 cacher.go:419] cacher (*core.Secret): unexpected ListAndWatch error: failed to list *core.Secret: unable to transform key "/registry/secrets/cee-dnceed21/alert-logger-sa-token-dzhkb": invalid padding on input; reinitializing...
E1116 20:09:57.906426 1 cacher.go:419] cacher (*core.Secret): unexpected ListAndWatch error: failed to list *core.Secret: unable to transform key "/registry/secrets/cee-dnceed21/alert-logger-sa-token-dzhkb": invalid padding on input; reinitializing...
E1116 20:09:58.963801 1 cacher.go:419] cacher (*core.Secret): unexpected ListAndWatch error: failed to list *core.Secret: unable to transform key "/registry/secrets/cee-dnceed21/alert-logger-sa-token-dzhkb": invalid padding on input; reinitializing...
E1116 20:10:00.027583 1 cacher.go:419] cacher (*core.Secret): unexpected ListAndWatch error: failed to list *core.Secret: unable to transform key "/registry/secrets/cee-dnceed21/alert-logger-sa-token-dzhkb": invalid padding on input; reinitializing...
E1116 20:10:01.084615 1 cacher.go:419] cacher (*core.Secret): unexpected ListAndWatch error: failed to list *core.Secret: unable to transform key "/registry/secrets/cee-dnceed21/alert-logger-sa-token-dzhkb": invalid padding on input; reinitializing...
E1116 20:10:02.206947 1 cacher.go:419] cacher (*core.Secret): unexpected ListAndWatch error: failed to list *core.Secret: unable to transform key "/registry/secrets/cee-dnceed21/alert-logger-sa-token-dzhkb": invalid padding on input; reinitializing...
E1116 20:10:03.256261 1 cacher.go:419] cacher (*core.Secret): unexpected ListAndWatch error: failed to list *core.Secret: unable to transform key "/registry/secrets/cee-dnceed21/alert-logger-sa-token-dzhkb": invalid padding on input; reinitializing...
E1116 20:10:04.313860 1 cacher.go:419] cacher (*core.Secret): unexpected ListAndWatch error: failed to list *core.Secret: unable to transform key "/registry/secrets/cee-dnceed21/alert-logger-sa-token-dzhkb": invalid padding on input; reinitializing...
E1116 20:10:05.363353 1 cacher.go:419] cacher (*core.Secret): unexpected ListAndWatch error: failed to list *core.Secret: unable to transform key "/registry/secrets/cee-dnceed21/alert-logger-sa-token-dzhkb": invalid padding on input; reinitializing...
Um die Wiederherstellung durchzuführen, müssen Sie versuchen, den kube-apiserver-POD mit CLI kubectl delete pod <kube-apiserver_pod_name> -n kube-system neu zu starten, aber es hilft nicht.
Ursachenanalyse
Bei weiteren Analysen wurde festgestellt, dass der Unterschied im geheimen Wert zwischen Master-3, bei dem der kube-apiserver kontinuierlich neu gestartet wurde, und anderen Master-Knoten dieses Problem verursacht hat.
From Master-1:
cloud-user@smf-data-master-1:~$ cat /data/kubernetes/secrets.conf
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: BG5hleucjlD5ZDkFYUxoGLHHhBA/AeoNruHM0i70/ZI= <<<<<<<<<<
- identity: {}
cloud-user@smf-data-master-1:~$
From Master-3:
cloud-user@smf-data-master-3:~$ cat /data/kubernetes/secrets.conf
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: XK+7mbh3YEnMdqswtySQ1d6QRehg+K6/J1d2e3EnMvI= <<<<<<<<
- identity: {}
cloud-user@smf-data-master-3:~$
Schritte zur Wiederherstellung
- Kopieren Sie als Teil der Datenwiederherstellung das aktuelle Geheimnis von Master-3 in eine Sicherungsdatei:
cloud-user@smf-data-master-3:~$ sudo cp /data/kubernetes/secrets.conf /data/kubernetes/secrets.conf-bkp
2. Bearbeiten Sie die Geheimnisse, konfigurieren Sie sie in Master-3, und ändern Sie den Wert geheim in den gleichen Wert wie in anderen Master-Knoten.
cloud-user@smf-data-master-3:~$ sudo vim /data/kubernetes/secrets.conf
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: XK+7mbh3YEnMdqswtySQ1d6QRehg+K6/J1d2e3EnMvI= <---- Change this value to “BG5hleucjlD5ZDkFYUxoGLHHhBA/AeoNruHM0i70/ZI=“ as in other Master nodes
- identity: {}
3. Starten Sie den kube-apiserver-Container auf Master-3 neu:
cloud-user@smf-data-master-3:~$ sudo docker ps -f "name=k8s_kube-apiserver" -q | xargs sudo docker restart
Nachprüfungen
Kuberettes vom Master überprüfen:
cloud-user@pod-name-smf-master-1:~$ kubectl get pods -A -o wide | grep kube-apiserver
Jetzt müssen alle PODs aktiv sein und ohne Neustarts ausgeführt werden.