En esta página se explica cómo resolver problemas con un espacio de nombres que se ha quedado en el estado Terminating
.
Los espacios de nombres usan finalizadores de Kubernetes para evitar que se eliminen si aún existen uno o varios recursos en un espacio de nombres.
Cuando eliminas un espacio de nombres con el comando kubectl delete
, el espacio de nombres pasa al estado Terminating
.
El espacio de nombres permanece en el estado Terminating
hasta que Kubernetes elimina sus recursos dependientes y borra todos los finalizadores. El controlador del ciclo de vida del espacio de nombres primero enumera todos los recursos del espacio de nombres que GKE debe eliminar.
Si GKE no puede eliminar un recurso dependiente o si el controlador del ciclo de vida del espacio de nombres no puede verificar que el espacio de nombres está vacío, el espacio de nombres permanece en el estado Terminating
hasta que resuelva el problema.
Para resolver un espacio de nombres que se ha quedado en el estado Terminating
, identifique y elimine los componentes que no funcionen correctamente y que impidan la eliminación. Prueba estas soluciones en orden:
- Busca y elimina servicios de API no disponibles.
- Busca y elimina los recursos restantes.
- Elimina el espacio de nombres por la fuerza.
Buscar y quitar servicios de API no disponibles
Mostrar los servicios de API no disponibles:
kubectl get apiservice | grep False
Soluciona los problemas de los servicios que no responden:
kubectl describe apiservice API_SERVICE
Sustituye
API_SERVICE
por el nombre del servicio que no responde.Comprueba si el estado del espacio de nombres sigue siendo
Terminating
:kubectl get ns | grep Terminating
Buscar y eliminar los recursos restantes
Lista todos los recursos que quedan en el espacio de nombres que se va a terminar:
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n NAMESPACE
Sustituye
NAMESPACE
por el nombre del espacio de nombres que quieras eliminar.Elimina los recursos que se muestren en el resultado.
Comprueba si el estado del espacio de nombres sigue siendo
Terminating
:kubectl get ns | grep Terminating
Eliminar el espacio de nombres por la fuerza
Elimina los finalizadores que impiden la eliminación del espacio de nombres para forzar la finalización del espacio de nombres:
Guarda el manifiesto del espacio de nombres como un archivo YAML:
kubectl get ns NAMESPACE -o yaml > ns-terminating.yml
Abre el archivo de manifiesto en un editor de texto y elimina todos los valores del campo
spec.finalizers
:vi ns-terminating.yml
Verifica que el campo finalizers esté vacío:
cat ns-terminating.yml
La salida debería ser similar a la siguiente:
apiVersion: v1 kind: Namespace metadata: annotations: name: NAMESPACE spec: finalizers: status: phase: Terminating
Inicia un proxy HTTP para acceder a la API de Kubernetes:
kubectl proxy
Sustituye el manifiesto del espacio de nombres con
curl
:curl -H "Content-Type: application/yaml" -X PUT --data-binary @ns-terminating.yml http://127.0.0.1:8001/api/v1/namespaces/NAMESPACE/finalize
Comprueba si el estado del espacio de nombres sigue siendo
Terminating
:kubectl get ns | grep Terminating
Siguientes pasos
Si no encuentras una solución a tu problema en la documentación, consulta la sección Obtener asistencia para obtener más ayuda, incluidos consejos sobre los siguientes temas:
- Abrir un caso de asistencia poniéndose en contacto con el equipo de Atención al Cliente de Cloud.
- Obtener asistencia de la comunidad haciendo preguntas en Stack Overflow
y usando la etiqueta
google-kubernetes-engine
para buscar problemas similares. También puedes unirte al#kubernetes-engine
canal de Slack para obtener más ayuda de la comunidad. - Abrir errores o solicitudes de funciones mediante el seguimiento de problemas público.