Tentei excluir um ReplicationController
com 12 pods e pude ver que alguns deles estão presos no Terminating
status.
Meu cluster Kubernetes consiste em um nó do plano de controle e três nós de trabalho instalados nas máquinas virtuais do Ubuntu.
Qual poderia ser o motivo desse problema?
NAME READY STATUS RESTARTS AGE
pod-186o2 1/1 Terminating 0 2h
pod-4b6qc 1/1 Terminating 0 2h
pod-8xl86 1/1 Terminating 0 1h
pod-d6htc 1/1 Terminating 0 1h
pod-vlzov 1/1 Terminating 0 1h
kubernetes
Dimuthu
fonte
fonte
Respostas:
Você pode usar o seguinte comando para excluir o POD com força.
fonte
--force
para que os pods sejam temperados.Forçar a exclusão do pod:
A
--force
bandeira é obrigatória.fonte
kube-system
espaço para nome.ktl get pods -o custom-columns=:metadata.name | xargs kubectl delete pod --force --grace-period=0
Exclua o bloco finalizadores do recurso (pod, implantação, ds etc ...) yaml:
fonte
delete -grace-period=0 --force
não o fez. Eu também apreciaria alguma elaboração sobre o que isso faz exatamente, no entanto.Resposta prática - você sempre pode excluir um pod de término executando:
Resposta histórica - Ocorreu um problema na versão 1.1 em que, às vezes, os pods ficam ociosos no estado Terminando se seus nós são removidos de maneira não limpa do cluster.
fonte
kubectl delete pod NAME --grace-period=0
kubectl delete ...
umaSIG_TERM
solicitação, será enviado para o contêiner. Mas e se, após o período de carência, o contêiner ainda estiver em execução? Eu tenho um monte de pods presosTerminating
, alguns escritos em go, outros em nodejs. O replicationController foi removido e o contêiner ainda está em execuçãokubectl delete pod PODNAME --grace-period=0
trabalhou para mim como sugerido por Clayton.Eu encontrei este comando mais direto:
Ele excluirá todos os pods no status Terminando no namespace padrão.
fonte
kube-system
use:for p in $(kubectl get pods -n kube-system| grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force -n kube-system;done
No meu caso, a
--force
opção não funcionou. Eu ainda podia ver o casulo! Ele ficou preso no modo Terminação / Desconhecido. Então, depois de correrEu corri
fonte
Se
--grace-period=0
não estiver funcionando, você poderá:fonte
Eu me deparei com isso recentemente ao remover o espaço de nome rook ceph - ele ficou preso no estado Terminating.
A única coisa que ajudou foi remover o finalizador do kubernetes chamando diretamente a API do k8s com curl, conforme sugerido aqui .
kubectl get namespace rook-ceph -o json > tmp.json
tmp.json
(deixe a matriz vazia)"finalizers": []
)kubectl proxy
em outro terminal para fins de autenticação e executar após a solicitação de curvatura na porta retornadacurl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json 127.0.0.1:8001/k8s/clusters/c-mzplp/api/v1/namespaces/rook-ceph/finalize
Desmontagem detalhada da torre ceph aqui .
fonte
A pergunta original é " Qual poderia ser o motivo desse problema? " E a resposta é discutida em https://github.com/kubernetes/kubernetes/issues/51835 e https://github.com/kubernetes/kubernetes/issues / 65569 & veja https://www.bountysource.com/issues/33241128-unable-to-remove-a-stopped-container-device-or-resource-busy
Isso é causado pelo vazamento da montagem do docker em outro espaço de nome.
Você pode fazer logon no host de pod para investigar.
fonte
Eu me deparei com isso recentemente para liberar recursos no meu cluster. Aqui está o comando para excluir todos eles.
espero que isso ajude alguém que leu isso
fonte