Contenu

Introduction

Conditions préalables

Conditions requises

Components Used

Qu'est-ce que le kube-apiserver ?

Problème

Analyse des causes premières

Étapes de récupération

Valider les chèques

Introduction

Ce document décrit une solution pour récupérer le redémarrage continu du pod kube-apiserver.

Conditions préalables

Conditions requises

Cisco vous recommande de connaître ces sujets :

- Dockers et Kubernetes

- Environnement d'exécution commun (CEE) Ultra Cloud Core de Cisco Subscriber Microservices Infrastructure (SMI)

Components Used

Les informations de ce document sont basées sur la version 1.21.0 de Kubernetes.

The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. Si votre réseau est en ligne, assurez-vous de bien comprendre l’incidence possible des commandes.

Qu'est-ce que le kube-apiserver ?

- Le serveur d'interface de programmation d'application de Kubernetes valide et configure les données des objets API qui incluent les pods, les services, les contrôleurs de réplication et d'autres. Le serveur d'API fournit les opérations REST (REpresentational State Transfer) et fournit le frontal à l'état partagé du cluster via lequel tous les autres composants interagissent.

- Le serveur API de Kubernetes est responsable de l'authentification et de la validation des demandes, de la récupération et de la mise à jour des données dans le magasin de données etcd. En fait, le serveur kube-API est le seul composant qui interagit directement avec le data store etcd.

- Voici les étapes que le serveur kube-API effectue lorsqu'un pod est créé dans le cluster :

a. Authentifier l'utilisateur

b. Valider la demande

c. Récupérer les données

d. Mettre à jour ETCD

e. Planificateur

f. Kubelet

- Les autres composants, tels que le planificateur, kube-controller-manager & kubelet, utilisent le serveur API pour effectuer des mises à jour dans le cluster dans leurs zones respectives.

Problème

Le redémarrage de kube-apiserver-smf-data-master-3 est observé en continu. Dans ce cas, exécutez kubectl CLI kubectl get pods -A -o wide | grep apiserver pour identifier le problème :

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:~$

Ces erreurs ont été observées dans les journaux kubectl <nom_pod_kube-apiserver_name> -n kube-system :

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

Pour récupérer, vous devez essayer de redémarrer le pod kube-apiserver avec CLI kubectl delete pod <kube-apiserver_pod_name> -n kube-system, mais cela n'aide pas.

Analyse des causes premières

Une analyse plus approfondie a permis de constater que la différence de la valeur secrète entre master-3, où le kube-apiserver redémarrait continuellement, et d'autres noeuds maîtres, était à l'origine de ce problème.

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:~$

Étapes de récupération

1. Dans le cadre de la restauration, copiez le secret actif de master-3 dans un fichier de sauvegarde :

cloud-user@smf-data-master-3:~$ sudo cp /data/kubernetes/secrets.conf /data/kubernetes/secrets.conf-bkp

2. Modifiez les secrets, configurez-les dans Master-3 et modifiez la valeur de secret en la même valeur que celle des autres noeuds maîtres.

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. Redémarrez le conteneur kube-apiserver sur Master-3 :

cloud-user@smf-data-master-3:~$ sudo docker ps -f "name=k8s_kube-apiserver" -q | xargs sudo docker restart

Valider les chèques

Vérifiez les paramètres de Kubernetes à partir du maître :

cloud-user@pod-name-smf-master-1:~$ kubectl get pods -A -o wide | grep kube-apiserver

Maintenant, tous les pods doivent être actifs et fonctionner sans redémarrage.