Comecei pods com comando
$ kubectl run busybox --image=busybox --restart=Never --tty -i --generator=run-pod/v1
Ocorreu um erro e agora não consigo excluir isso Pod
.
Eu tentei usar os métodos descritos abaixo, mas o Pod
continua sendo recriado.
$ kubectl delete pods busybox-na3tm
pod "busybox-na3tm" deleted
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
busybox-vlzh3 0/1 ContainerCreating 0 14s
$ kubectl delete pod busybox-vlzh3 --grace-period=0
$ kubectl delete pods --all
pod "busybox-131cq" deleted
pod "busybox-136x9" deleted
pod "busybox-13f8a" deleted
pod "busybox-13svg" deleted
pod "busybox-1465m" deleted
pod "busybox-14uz1" deleted
pod "busybox-15raj" deleted
pod "busybox-160to" deleted
pod "busybox-16191" deleted
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default busybox-c9rnx 0/1 RunContainerError 0 23s
kubernetes
kubectl
yman
fonte
fonte
kubectl get all -o name
?kubectl get events
para ver o que está criando esses objetos?kubctl get rc
ver se um ReplicationController foi criado. Nesse caso, exclua-o e exclua os pods.kubectl get deployment
kubectl delete deployment <deployment_name>
. Para obter o nome da implantação, façakubectl get deployments
Respostas:
Você precisa excluir a implantação, que por sua vez deve excluir os pods e os conjuntos de réplicas https://github.com/kubernetes/kubernetes/issues/24137
Para listar todas as implantações:
Em seguida, para excluir a implantação:
Onde NAMESPACE é o namespace em que está e DEPLOYMENT é o
name
da implantação.Em alguns casos, ele também pode estar em execução devido a um trabalho ou daemonset. Verifique o seguinte e execute o comando de exclusão apropriado.
fonte
kubectl create
comandokubectl get jobs
kubectl delete replicasets,subscriptions,deployments,jobs,services,pods --all -n <namespace>
Em vez de tentar descobrir se é uma implantação, conjunto de dados, conjunto de estado ... ou o que (no meu caso, era um controlador de replicação que continuava a abranger novos pods :) Para determinar o que era que continuava a abranger a imagem obteve todos os recursos com este comando:
kubectl get all
Obviamente, você também pode obter todos os recursos de todos os namespaces:
kubectl get all --all-namespaces
ou defina o espaço para nome que você deseja inspecionar:
kubectl get all -n NAMESPACE_NAME
Depois que vi que o controlador de replicação era responsável pelo meu problema, eu o excluí:
kubectl delete replicationcontroller/CONTROLLER_NAME
fonte
se o seu pod tiver um nome como
name-xxx-yyy
, ele pode ser controlado por um replicasets.apps chamadoname-xxx
, você deve excluir esse replicaset primeiro antes de excluir o podkubectl delete replicasets.apps name-xxx
fonte
kubectl delete --all jobs -n <namespace>
kubectl get replicasets.apps -n <namespace>
(ou --all-namespaces)Procure também conjuntos com estado
excluir todos os conjuntos com estado em um espaço para nome
para excluí-los um por um
fonte
Em alguns casos, os pods ainda não desaparecem, mesmo ao excluir a implantação. Nesse caso, para forçar a exclusão deles, você pode executar o comando abaixo.
kubectl delete pods podname --grace-period=0 --force
fonte
Recreate
.Isso fornecerá informações sobre todos os pods, implantações, serviços e tarefas no espaço para nome.
pods podem ser criados por implantações ou tarefas
Se você excluir a implantação ou o trabalho, a reinicialização dos pods poderá ser interrompida.
fonte
Muitas respostas aqui dizem para excluir um objeto k8s específico, mas você pode excluir vários objetos ao mesmo tempo, em vez de um por um:
kubectl delete deployments,jobs,services,pods --all -n <namespace>
No meu caso, estou executando o cluster OpenShift com o OLM - Operator Lifecycle Manager . O OLM é quem controla a implantação; portanto, quando eu excluí a implantação, não foi suficiente para impedir a reinicialização dos pods.
Somente quando excluí o OLM e sua assinatura , a implantação, os serviços e os pods desapareceram.
Primeiro, liste todos os objetos k8s no seu espaço para nome:
O OLM não está listado com
get all
, por isso procuro especificamente:Agora exclua todos os objetos, incluindo OLMs, assinaturas, implantações, conjuntos de réplicas, etc:
Listar objetos novamente - todos foram embora:
fonte
Quando o pod está sendo recriado automaticamente mesmo após a exclusão manual, esses pods foram criados usando o Deployment. Quando você cria uma implantação, ela cria automaticamente ReplicaSet e Pods. Dependendo de quantas réplicas do seu pod você mencionou no script de implantação, ele criará esse número de pods inicialmente. Quando você tenta excluir qualquer pod manualmente, ele os cria automaticamente.
Sim, às vezes você precisa excluir os pods com força. Mas, neste caso, o comando force não funciona.
fonte
Em vez de remover o NS, você pode tentar remover replicaSet
Em seguida, exclua o replicaSet
fonte
Depois de fazer um tutorial interativo , acabei com vários pods, serviços e implantações:
Para limpar tudo,
delete --all
funcionou bem:Isso me deixou com (o que eu acho que é) um cluster vazio do Kubernetes:
fonte
Se você tem um trabalho que continua em execução, é necessário pesquisar o trabalho e excluí-lo:
kubectl get job --all-namespaces | grep <name>
e
kubectl delete job <job-name>
fonte
Você pode
kubectl get replicasets
verificar a implantação antiga com base na idade ou no tempoExclua a implantação antiga com base no tempo, se desejar excluir o mesmo pod de aplicativo atual em execução
fonte
Também enfrentei o problema, usei o comando abaixo para excluir a implantação.
mas os pods ainda estavam recriando, então eu cruzei o Replica Set usando o comando abaixo
edite o replicaset para 1 a 0
fonte
A causa principal da pergunta foi o atributo de implantação / tarefa / replicasets,
strategy->type
que define o que deve acontecer quando o pod for destruído (implícita ou explicitamente). No meu caso, foiRecreate
.De acordo com a resposta do @ nomad , excluir a implantação / tarefa / replicasets é a correção simples para evitar experiências com combinações mortais antes de atrapalhar o cluster como um usuário iniciante.
Tente os seguintes comandos para entender as ações por trás da cena antes de pular para a depuração:
fonte
No meu caso, implantei através de um arquivo YAML como
kubectl apply -f deployment.yaml
e a solução parece ser excluir viakubectl delete -f deployment.yaml
fonte
Tive um problema semelhante: após excluir a implantação (
kubectl delete deploy <name>
), os pods continuavam "Em execução" e eram recriados automaticamente após a exclusão (kubectl delete po <name>
).Verificou-se que o conjunto de réplicas associado não foi excluído automaticamente por algum motivo e, após a exclusão de (
kubectl delete rs <name>
), foi possível excluir os pods.fonte
Com implantações que possuem conjuntos com estado (ou serviços, trabalhos etc.), você pode usar este comando:
Este comando finaliza qualquer coisa executada no especificado
<NAMESPACE>
E forte
fonte