Inhalt

Einleitung

Voraussetzungen

Anforderungen

Verwendete Komponenten

Was ist kube-apiserver?

Problem

Ursachenanalyse

Schritte zur Wiederherstellung

Nachprüfungen

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

1. 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.