Cómo arreglar el espacio de nombres de Kubernetes atascado en el estado de terminación

Cómo arreglar el espacio de nombres de Kubernetes atascado en el estado de terminación

Varios informes últimamente han sido sobre los espacios de nombres de Kubernetes atascados en un estado de terminación. Este artículo proporciona una explicación de alto nivel de lo que puede causar esto y cómo resolverlo. Encontrará toda la información necesaria sobre cómo puede solucionar el problema. Explicaremos por qué esto ocurre en primer lugar. Comencemos con lo que el espacio de nombres de Kubernetes atascado es.

¿Cuál es el problema del espacio de nombres de Kubernetes??

Para comprender cuál es el problema de finalización de Kubernetes atascado, es importante familiarizarse con lo que es un espacio de nombres. El espacio de nombres de Kubernetes es un conjunto de recursos que utilizan el Daemon Kubernetes para administrar y controlar las aplicaciones implementadas. Por lo general, se crea un espacio de nombres cuando se inicia la primera implementación de una nueva aplicación en Kubernetes. El espacio de nombres permanece en el estado de "creación" durante los primeros segundos después del despliegue. Después de esto, se convierte en el estado de "terminación", y el demonio comienza a asignar los recursos a la aplicación. Se cree que el espacio de nombres está preparado para su uso por el programa cuando se cancela. Sin embargo, en algunos casos, el espacio de nombres podría quedarse atascado en este estado indefinidamente y negarse a ponerse activo incluso después de que se hagan múltiples intentos para recrearlo. Hay algunas acciones que puede hacer para solucionarlo cuando esto ocurra. Examinaremos algunas de las razones más típicas de este problema y posiblemente lo solucionaremos.

¿Por qué el espacio de nombres se atasca en el estado de terminación??

Hay algunas razones comunes por las cuales un espacio de nombres podría estar atrapado en un estado de terminación:

Razón 1: Error del operador común

El error más común es el error del operador en el que un operador elimina o detiene accidentalmente el servicio que mantiene vivo el espacio de nombres.

Razón 2: Configuración inadecuada

Otra razón común es que el clúster subyacente debe configurarse correctamente. Si el clúster está configurado con múltiples maestros y un maestro se elimina repentinamente del clúster, puede conducir al estado de terminación de todos los demás clústeres en la red de clúster, ya que carecen de una conexión maestra viable.

Razón 3: Problemas de conectividad de red

A veces, un problema subyacente, como los problemas de conectividad de la red, puede hacer que las cápsulas que se ejecutan dentro del espacio de nombres terminen abruptamente, lo que hace que el espacio de nombres se vaya a un estado terminado. Es crucial rastrear las métricas de un clúster e inspeccionarlas con frecuencia para asegurarse de que no haya problemas subyacentes que causen el tiempo de inactividad de sus aplicaciones.

Razón 4: finalizadores

Finalmente, los espacios de nombres tienen un finalizador que se define debajo de la especificación. Un finalizador es una clave de metadatos que le indica a Kubernetes que esperen al destruir un recurso a menos que se cumpla una condición particular. Entonces, cuando se ejecuta un comando para eliminar un espacio de nombres, Kubernetes verifica la sección de metadatos para un finalizador. Si el recurso definido por el finalizador no puede ser destruido, el espacio de nombres también no se puede terminar, lo que resulta en que el espacio de nombres esté en un estado de terminación durante días, meses o incluso años.

¿Cómo podemos solucionar este problema??

Aquí hay algunas formas simples que puede seguir para solucionar el problema fácilmente:

Estar actualizado

Primero, asegúrese de que su sistema esté actualizado actualizando sus nodos K8s con la última versión de versión. Algunas versiones más antiguas tienen una falla que podría interferir con el funcionamiento del servicio Kubelet y causar esta falla.

Reinicie el proceso maestro de Kubernetes

Si el problema persiste a pesar de hacer el paso que mencionamos anteriormente, puede intentar reiniciar el proceso maestro de Kubernetes. Este proceso termina cualquier proceso de trabajadores que podrían estar atascados. Esto hace que salgan con gracia sin causar problemas a otros pods.

Recreando las vainas atascadas

Si el espacio de nombres permanece atascado en este estado después de reiniciar el proceso maestro, el siguiente paso es recrear las vainas atascadas. Esto requiere copiarlos a un espacio de nombres diferente y eliminar las cápsulas rotas en el espacio de nombres original. Una vez que haya hecho esto, debe asegurarse de que todas las vainas eliminadas todavía se funcionen correctamente en el espacio de nombres de destino. Si alguno de ellos no funciona correctamente, debe restaurarlos. Esto ayuda a resolver el problema con el espacio de nombres en Kubernetes. Una vez que haya hecho esto, puede verificar que todos sus contenedores funcionen correctamente y que las vainas rotas ya no se ejecutan en ningún lugar del clúster.

Tener suficiente espacio en disco disponible para el almacenamiento en el clúster

Si eso no funciona tan bien, verifique si hay un espacio de disco adecuado que está abierto para el almacenamiento en el clúster ejecutando el siguiente comando en uno de los nodos que alojan el clúster:

kalsoom@virtualbox> sudo df-kh | grep/var/lib/kubelet

Como el nombre indica, este comando le brinda una lista de discos que están montados en su sistema, junto con la cantidad de espacio que utiliza cada dispositivo. Esto se puede utilizar para identificar los dispositivos que están experimentando problemas con la asignación de espacio y liberar espacio adicional en esos dispositivos según sea necesario.

Ejecutar una actualización de apt-get y un reinicio completo del sistema

Si esto no ayuda a resolver el problema, intente ejecutar una actualización de apt-get seguida de un reinicio completo del sistema. Esto obliga al Administrador de paquetes a verificar automáticamente las nuevas actualizaciones e instalarlas. Una vez reiniciado su sistema, realice el mismo comando que ejecutó para identificar cualquier dispositivo que se quede sin espacio de almacenamiento. Una vez que identificó el problema, gratuito tanto espacio como sea posible en el dispositivo para liberar algo de espacio para que el servicio Kubelet se asigne al espacio de nombres. También puede intentar usar las diferentes soluciones de almacenamiento para su clúster si el hardware subyacente tiene poca potencia.

Fuerza eliminando el espacio de nombres

También puede forzar eliminar el espacio de nombres haciendo lo siguiente:

kalsoom@virtualbox> namespace = your_namespace_to_delete
Kubectl proxy y
Kubectl Get Namespace $ Namespace -O JSON | JQ '.spec = "finalizadores": [] '> temperatura.json
CURL -K -H "Content -Type: Application/JSON" -X PUT --DATA -BINARY @Temp.JSON 127.0.0.1: 8001/API/V1/Namespaces/$ Namespace/Finalize

Los componentes de la sección de finalizadores en este caso se eliminan programáticamente utilizando la función JQ. También puede completar eso manualmente. Por defecto, el proxy Kubectl crea el oyente en 127.0.0.1: 8001. Es posible que pueda utilizar eso si es consciente del nombre de host y la dirección IP de su clúster maestro.

Eliminar el finalizador

También puede eliminar la especificación de finalizador para eliminar por completo el espacio de nombres. Para hacer eso, debe eliminar el finalizador para eliminar completamente el espacio de nombres haciendo lo siguiente:


1. Primero, voltea la especificación del espacio de nombres en formato JSON. El código se da de la siguiente manera:

kalsoom@virtualbox> kubectl get ns -o json> .json

2. A continuación, edite el espacio de nombres.JSON eliminando los "finalizadores" en la especificación:

"Spec": "finalizadores":,
a:
" Especificaciones": ,

3. Después de eso, parche el espacio de nombres haciendo lo siguiente:

kalsoom@virtualbox> kubectl reemplazar - -raw "/api/v1/namespaces // finalize" -f .json

Conclusión

Explicamos brevemente la cuestión de que el espacio de nombres se atasque en un estado de terminación. También señalamos muchas razones por las cuales esto puede suceder y los pasos necesarios que podemos tomar para solucionar este problema. Proporcionamos toda la información crítica sobre dicho tema en detalle.