Soluciona problemas relacionados con el espacio de nombres atrapado en el estado de finalización


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:

  1. Busca y quita servicios de API no disponibles.
  2. Busca y quita los recursos restantes.
  3. Fuerza la eliminación del espacio de nombres.

Busca y quita servicios de API no disponibles

  1. Enumera los servicios de API no disponibles:

    kubectl get apiservice | grep False
    
  2. 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.

  3. Verifica si el estado del espacio de nombres sigue siendo Terminating:

    kubectl get ns | grep Terminating
    

Busca y quita los recursos restantes

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

  2. Quita cualquier recurso que se muestre en el resultado.

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

  1. Guarda el manifiesto de espacio de nombre como un archivo YAML.

    kubectl get ns NAMESPACE -o yaml > ns-terminating.yml
    
  2. Abre el manifiesto en un editor de texto y quita todos los valores del campo spec.finalizers:

    vi ns-terminating.yml
    
  3. 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
    
  4. Inicia un proxy HTTP para acceder a la API de Kubernetes:

    kubectl proxy
    
  5. 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
    
  6. 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.