Global outage event
If you're experiencing issues with your AWS services, then please refer to the AWS Health Dashboard. You can find the overall status of ongoing outages, the health of AWS services, and the latest updates from AWS engineers.
Como soluciono problemas de pods e namespaces bloqueados em clusters do Amazon EKS?
Não consigo excluir meus pods ou namespaces no meu cluster do Amazon Elastic Kubernetes Service (Amazon EKS). Os pods ou namespaces estão presos no status Encerrando.
Breve descrição
Depois de excluir um pod ou namespace no Amazon EKS, o recurso entra no status Encerrando. Se esse processo não for concluído, você deverá resolver o problema manualmente.
Os pods podem apresentar problemas de encerramento por qualquer um dos seguintes motivos:
- Os finalizadores evitam a exclusão
- O pod não responde aos sinais de encerramento
- Os hooks PreStop falham ou o serviço terminationGracePeriodSeconds se estende por muito tempo
- Interrupções na rede bloqueiam os nós de processamento e a comunicação do ambiente de gerenciamento
- O alto uso de recursos afeta os nós de processamento
Os namespaces podem apresentar problemas de encerramento por qualquer um dos seguintes motivos:
- O Kubernetes não pode excluir recursos específicos
- Os servidores de API registram um status Falso
- Os finalizadores evitam a exclusão
Resolução
Use as seções a seguir para solucionar problemas de pod ou namespace bloqueados.
Solucionar problemas com os pods bloqueados
Conclua as tarefas a seguir para solucionar problemas de pods bloqueados.
Verificar o status do pod
Conclua as etapas a seguir:
-
Para verificar os logs do kubelet no nó afetado, execute o seguinte comando:
kubectl get pods -A --field-selector=status.phase==Terminating -o wide -
Consulte a coluna NODE na saída para identificar os nós afetados. Se todos os pods bloqueados estiverem no mesmo nó, execute o seguinte comando journalctl para verificar os logs do kubelet no nó afetado:
journalctl -u kubelet -
Reinicie o kubelet.
Verificar os finalizadores do Pod
Para verificar os finalizadores, execute o seguinte comando:
kubectl get pod POD_NAME -n NAMESPACE -o yaml
Observação: substitua POD_NAME pelo nome do seu pod. Substitua NAMESPACE pelo nome do namespace em que seu pod está localizado.
Se os finalizadores estiverem presentes, execute um dos seguintes comandos:
Para uma remoção simples, use o seguinte comando:
kubectl patch pod POD_NAME -n NAMESPACE -p '{"metadata":{"finalizers":null}}'
Ou, se seu ambiente exigir operações de patch JSON ou você preferir uma sintaxe mais detalhada, use o seguinte comando:
kubectl patch pod POD_NAME -n NAMESPACE --type=json -p '[{"op": "remove", "path": "/metadata/finalizers" }]'
Observação: substitua POD_NAME pelo nome do seu pod. Substitua NAMESPACE pelo nome do namespace em que seu pod está localizado.
Forçar a exclusão do pod
Importante: é uma prática recomendada usar essa opção somente se outros métodos não conseguirem evitar a perda ou violação de dados.
Para forçar a exclusão do pod, execute o seguinte comando:
kubectl delete pod POD_NAME -n NAMESPACE --grace-period=0 --force
Observação: substitua POD_NAME pelo nome do seu pod e NAMESPACE pelo nome do seu namespace onde seu pod está localizado.
Solucionar problemas de namespaces bloqueados
Conclua as tarefas a seguir para solucionar problemas de namespaces bloqueados.
Verificar o status do namespace
Quando um namespace fica preso no status Encerrando, ele pode conter recursos que o Kubernetes não pode excluir. Ou um serviço de API pode ter um status Falso.
Execute o comando a seguir para verificar o status do seu namespace:
kubectl describe namespace NAMESPACE
Observação: substitua NAMESPACE pelo nome do seu namespace bloqueado.
Encontrar e remover os recursos restantes
Se os recursos permanecerem no namespace, você receberá a seguinte mensagem de erro:
"NamespaceContentRemaining: Some resources are remaining: serviceaccounts has 2 resource instances"
Para listar os recursos restantes, execute o seguinte comando:
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n NAMESPACE
Observação: substitua NAMESPACE pelo nome do seu namespace.
Em seguida, execute o seguinte comando para remover os recursos identificados:
kubectl delete RESOURCE_TYPE RESOURCE_NAME -n NAMESPACE
Observação: substitua RESOURCE_TYPE pelo tipo de recurso, RESOURCE_NAME pelo nome do recurso e NAMESPACE pelo seu namespace.
Remover finalizadores de namespace
Se os finalizadores ainda estiverem anexados, você receberá a seguinte mensagem de erro:
"NamespaceFinalizersRemaining: Some content in the namespace has finalizers remaining: kubernetes.io/persistent-volume-provisioner in 1 resource instance"
Para remover finalizadores de namespace, é possível executar um comando patch, usar um arquivo JSON ou forçar a exclusão do namespace.
Para remover finalizadores com uma operação patch, execute o seguinte comando:
kubectl patch namespace NAMESPACE --type=json -p '[{"op": "remove", "path": "/metadata/finalizers" }]'
Observação: substitua NAMESPACE pelo nome do seu namespace bloqueado.
Para usar um arquivo JSON, conclua as seguintes etapas:
- Execute o comando a seguir para criar o arquivo de configuração do namespace:
Observação: substitua TERMINATING_NAMESPACE pelo nome do seu namespace bloqueado.kubectl get namespace TERMINATING_NAMESPACE -o json > tempfile.json - Remova a matriz de finalizadores da seção spec do arquivo JSON.
- Para aplicar as alterações, execute o seguinte comando:
Observação: substitua TTERMINATING_NAMESPACE pelo nome do seu namespace bloqueado.kubectl replace --raw "/api/v1/namespaces/TERMINATING_NAMESPACE/finalize" -f ./tempfile.json - Verifique se o namespace foi removido. Execute o seguinte comando:
kubectl get namespaces
Para forçar a exclusão do namespace, execute o seguinte comando:
kubectl delete namespace NAMESPACE --grace-period=0 --force
Observação: substitua NAMESPACE pelo nome do seu namespace bloqueado. É uma prática recomendada usar essa opção somente se outros métodos não conseguirem evitar a perda ou violação de dados.
Limpar recursos personalizados
Se os recursos permanecerem no namespace, execute o seguinte comando:
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n NAMESPACE
Observação: substitua NAMESPACE pelo nome do seu namespace.
Se você identificar recursos personalizados, execute o seguinte comando para removê-los:
kubectl delete RESOURCE_TYPE RESOURCE_NAME -n NAMESPACE
Observação: substitua RESOURCE_TYPE pelo tipo de recurso, RESOURCE_NAME pelo nome do recurso e NAMESPACE pelo seu namespace.
Execute o comando a seguir para remover os finalizadores de recursos personalizados:
kubectl patch RESOURCE_TYPE RESOURCE_NAME -n NAMESPACE -p '{"metadata":{"finalizers":null}}' --type=merge
Observação: substitua RESOURCE_TYPE pelo tipo de recurso. Substitua RESOURCE_NAME pelo nome do recurso. Substitua NAMESPACE pelo seu namespace.
Em seguida, execute o seguinte comando para remover CustomResourceDefinitions:
kubectl delete crd CRD_NAME
Observação: substitua CRD_NAME pelo nome de CustomResourceDefinition. Remova somente CustomResourceDefinitions que você não precisa mais.
- Tópicos
- Containers
- Idioma
- Português

Conteúdo relevante
- feita há 8 meses
- feita há 7 meses
- feita há 8 meses