En esta página, se muestra cómo resolver problemas con un espacio de nombres bloqueado en el estado Terminating
.
Los espacios de nombres usan finalizadores de Kubernetes para evitar la eliminación cuando aún existen uno o más recursos dentro de un espacio de nombres.
Cuando borras un espacio de nombres con el comando kubectl delete
, este ingresa al estado Terminating
.
El espacio de nombres permanece en el estado Terminating
hasta que Kubernetes borre sus recursos dependientes y borre todos los finalizadores. El controlador del ciclo de vida del espacio de nombres primero enumera todos los recursos en el espacio de nombres que GKE debe borrar.
Si GKE no puede borrar 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 resuelvas el problema.
Para resolver un espacio de nombres atascado en el estado Terminating
, identifica y quita los componentes en mal estado que bloquean la eliminación. Prueba estas soluciones en orden:
- Busca y quita servicios de API no disponibles.
- Busca y quita los recursos restantes.
- Fuerza la eliminación del espacio de nombres.
Busca y quita servicios de API no disponibles
Enumera 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
Reemplaza
API_SERVICE
por el nombre del servicio que no responde.Verifica si el estado del espacio de nombres sigue siendo
Terminating
:kubectl get ns | grep Terminating
Busca y quita los recursos restantes
Enumera todos los recursos restantes en el espacio de nombres de finalización:
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n NAMESPACE
Reemplaza
NAMESPACE
por el nombre del espacio de nombres que deseas borrar.Quita cualquier recurso que se muestre en el resultado.
Verifica si el estado del espacio de nombres sigue siendo
Terminating
:kubectl get ns | grep Terminating
Fuerza la eliminación del espacio de nombres
Quita los finalizadores que bloquean la eliminación del espacio de nombres para forzar la finalización del espacio de nombres:
Guarda el manifiesto de espacio de nombre como un archivo YAML.
kubectl get ns NAMESPACE -o yaml > ns-terminating.yml
Abre el manifiesto en un editor de texto y quita todos los valores del campo
spec.finalizers
:vi ns-terminating.yml
Verifica que el campo de los finalizadores esté vacío:
cat ns-terminating.yml
El resultado debería ser similar al 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
Reemplaza el manifiesto del espacio de nombres mediante
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
Verifica si el estado del espacio de nombres sigue siendo
Terminating
:kubectl get ns | grep Terminating
¿Qué sigue?
Si necesitas asistencia adicional, comunícate con Atención al cliente de Cloud.