Published on

Removendo um Namespace em estado terminanting

Authors

Removendo um Namespace em Estado Terminanting

O erro de namespace em estado “Terminating” ocorre quando um namespace (ou espaço de nomes) no Kubernetes está sendo desligado ou excluído. Vamos explorar os detalhes desse erro:

Contexto: Um namespace é uma unidade lógica de isolamento que agrupa recursos no Kubernetes. Quando você exclui um namespace, o Kubernetes inicia um processo de término para limpar todos os recursos associados a ele.

Fase de Término: Durante a fase de término, o namespace entra no estado “Terminating”. Nesse estado, o Kubernetes começa a desalocar os recursos dentro do namespace. Isso inclui a exclusão de pods, services, deployments, configmaps, secrets e outros objetos relacionados.

Recursos em Término: Os recursos dentro do namespace em término são marcados para exclusão. O Kubernetes aguarda até que todos esses recursos sejam removidos com sucesso. Se algum recurso estiver preso ou não puder ser excluído, o namespace permanecerá no estado “Terminating”.

Possíveis Causas:

  • Pods Pendentes: Se houver pods pendentes (que não podem ser encerrados), o namespace não poderá ser completamente excluído.
  • Volumes Persistentes: Volumes persistentes associados a pods podem impedir o término do namespace.
  • Controladores de Recursos: Controladores como Deployments, StatefulSets ou DaemonSets também podem afetar o término.

Soluções:

  • Verifique os pods pendentes e tente corrigir quaisquer problemas.
  • Garanta que os volumes persistentes sejam liberados.
  • Analise os controladores de recursos e seus recursos associados.

Lembre-se de que o estado “Terminating” é temporário e, uma vez que todos os recursos sejam removidos com sucesso, o namespace será excluído completamente. 🚀

Caso não consiga remover recursos "presos" no namespace, tente a solução abaixo:

  1. Salve um arquivo JSON como no exemplo a seguir:
kubectl get ns zabbix -o json > tempfile.json

O conteúdo do arquivo será algo como:

{
    "apiVersion": "v1",
    "kind": "Namespace",
    "metadata": {
        "annotations": {
            "cattle.io/status": "{\"Conditions\":[{\"Type\":\"ResourceQuotaInit\",\"Status\":\"True\",\"Message\":\"\",\"LastUpdateTime\":\"2024-04-23T13:55:17Z\"},{\"Type\":\"InitialRolesPopulated\",\"Status\":\"True\",\"Message\":\"\",\"LastUpdateTime\":\"2024-04-23T13:55:18Z\"}]}",
            "field.cattle.io/containerDefaultResourceLimit": "{}",
            "field.cattle.io/projectId": "c-m-zrkmsvsf:p-cssw8",
            "lifecycle.cattle.io/create.namespace-auth": "true"
        },
        "creationTimestamp": "2024-04-23T13:55:16Z",
        "finalizers": [
            "controller.cattle.io/namespace-auth"
        ],
        "labels": {
            "field.cattle.io/projectId": "p-cssw8",
            "kubernetes.io/metadata.name": "zabbix"
        },
        "name": "zabbix",
        "resourceVersion": "111297880",
        "uid": "81f426de-3a70-4078-86de-a07e30b408b3"
    },
    "spec": {
        "finalizers": [
            "kubernetes"
        ]
    },
    "status": {
        "phase": "Active"
    }
}
  1. Remova o bloco de finalizadores na seção spec do JSON:
"spec" : {
    }
  1. Aplique as mudanças com o comando a seguir:
kubectl replace --raw "/api/v1/namespaces/TERMINATING_NAMESPACE/finalize" -f ./tempfile.json
  1. Verifique se o namespace em questão foi removido:
kubectl get namespaces