Contenido

Introducción

Prerequisites

Requirements

Componentes Utilizados

¿Qué es kube-apiserver?

Problema

Análisis de la causa raíz

Pasos para la recuperación

Comprobaciones posteriores

Introducción

Este documento describe una solución para recuperar el reinicio continuo del grupo de dispositivos kube-apiserver.

Prerequisites

Requirements

Cisco recomienda que tenga conocimiento de estos temas:

- Dockers y Kubernetes

- Entorno de ejecución común (CEE) Ultra Cloud Core de Cisco Subscriber Microservices Infrastructure (SMI)

Componentes Utilizados

La información de este documento se basa en la versión de Kubernetes v1.21.0.

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 tiene una red en vivo, asegúrese de entender el posible impacto de cualquier comando.

¿Qué es kube-apiserver?

- El servidor de la interfaz de programación de aplicaciones (API) de Kubernetes valida y configura los datos de los objetos API, que incluyen grupos de dispositivos, servicios, controladores de replicación y otros. El servidor API presta servicios a las operaciones de REpresentational State Transfer (REST) y proporciona el extremo frontal al estado compartido del clúster a través del cual interactúan todos los demás componentes.

- El servidor de la API de Kubernetes es responsable de autenticar y validar las solicitudes, de recuperar y actualizar los datos en el almacén de datos etcd. De hecho, el servidor kube-API es el único componente que interactúa directamente con el almacén de datos etcd.

- Estos son los pasos que realiza el servidor kube-API cuando se crea un grupo de dispositivos en el clúster:

a. Autenticar usuario

b. Validar solicitud

c. Recuperar datos

d. Actualizar ETCD

e. Planificador

f. Kubelet

- Los otros componentes como el planificador, kube-controller-manager y kubelet, utilizan el servidor API para realizar actualizaciones en el clúster en sus áreas respectivas.

Problema

El reinicio kube-apiserver-smf-data-master-3 se observa continuamente. En este caso, ejecute kubectl CLI kubectl get pods -A -o wide | grep apiserver para identificar el problema:

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

Estos errores se observaron en los registros kubectl <kube-apiserver_pod_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...

Para recuperarse, debe intentar reiniciar el grupo de dispositivos kube-apiserver con CLI kubectl delete pod <kube-apiserver_pod_name> -n kube-system, pero no ayuda.

Análisis de la causa raíz

En un análisis más detallado, se encontró que la diferencia en el valor secreto entre el master-3, donde el kube-apiserver se reinició continuamente, y otros nodos maestros, causó este problema.

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

Pasos para la recuperación

1. Como parte de la recuperación, copie el secreto actual de master-3 en un archivo de respaldo:

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

2. Edite los secretos, configúrelos en Master-3 y cambie el valor de secret al mismo valor que se ve en otros nodos maestros.

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. Reinicie el contenedor kube-apiserver en Master-3:

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

Comprobaciones posteriores

Verifique a Kubernetes desde el maestro:

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

Ahora, todos los grupos de dispositivos deben estar activos y deben ejecutarse sin reinicios.