- Published on
Removendo um Namespace em estado terminanting
- Authors
- Name
- Natália Granato
- @granatowp
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:
- 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"
}
}
- Remova o bloco de finalizadores na seção spec do JSON:
"spec" : {
}
- Aplique as mudanças com o comando a seguir:
kubectl replace --raw "/api/v1/namespaces/TERMINATING_NAMESPACE/finalize" -f ./tempfile.json
- Verifique se o namespace em questão foi removido:
kubectl get namespaces