Comando para excluir todos os pods em todos os namespaces do kubernetes

154

Ao examinar os documentos, há uma chamada de API para excluir o pod 'a', mas existe uma maneira de eliminar todos os pods em todos os namespaces?

user_mda
fonte

Respostas:

283

Não há comando para fazer exatamente o que você pediu.

Aqui estão algumas correspondências.

Você pode excluir todos os pods em um único espaço para nome com este comando:

kubectl delete --all pods --namespace=foo

Você também pode excluir todas as implantações no espaço para nome, o que excluirá todos os pods anexados às implantações correspondentes ao espaço para nome

kubectl delete --all deployments --namespace=foo

Você pode excluir todos os espaços para nome e todos os objetos em todos os espaços para nome (mas não objetos sem espaço para nome, como nós e alguns eventos) com este comando:

kubectl delete --all namespaces

No entanto, o último comando provavelmente não é algo que você deseja fazer, pois excluirá coisas no espaço de nomes do sistema kube, o que tornará seu cluster inutilizável.

Este comando excluirá todos os namespaces, exceto o kube-system, que pode ser útil:

for each in $(kubectl get ns -o jsonpath="{.items[*].metadata.name}" | grep -v kube-system);
do
  kubectl delete ns $each
done
Eric Tune
fonte
1
Com a versão atual do k8s, o comando "kubectl delete --all namespaces" não exclui mais as coisas do sistema ... Diz, por exemplo: namespaces "default" é proibido: esse namespace não pode ser excluído
Kai Wähner
Isso exclui a implantação ou apenas os pods?
Sinaesthetic
1
kubectl delete pods --all --all-namespacesàs vezes parece funcionar (não sei ao certo o que faz com que ele funcione em alguns ambientes e não em outros). Funciona bem no meu host bastião, mas não no laptop. Ambos executando debian e ambas com a mesma versão de kubectl (aglomerado versão 1.13)
Patrick W
@ KaiWähner, se não me engano, as coisas relacionadas ao sistema k8s estão no kube-systemespaço para nome. No exemplo da mensagem, eu posso ver o defaultespaço para nome. Foi kube-systemexcluído com o comando que você anexou?
George Tseres 28/03
79
kubectl delete daemonsets,replicasets,services,deployments,pods,rc --all

para se livrar deles também controladores de replicação traquinas.

Jason
fonte
4
Isto está errado. Isso é excluído apenas no espaço para nome atual.
PleaseHelp
Adicionar a bandeira -n, mas pena que é para um pod de cada vez e não tudo de uma vez
grbonk
1
Está faltando ingpara ingressa também exclui
Druska
2
convém adicionar também "statefulset" (se aplicável). Caso contrário, ele continuará a criar novos pods mesmo depois de executar o comando acima!
buch11
15

Você só precisa sedfazer isso:

kubectl get pods --no-headers=true --all-namespaces |sed -r 's/(\S+)\s+(\S+).*/kubectl --namespace \1 delete pod \2/e'

Explica:

  1. use o comando kubectl get pods --all-namespacespara obter a lista de todos os pods em todos os namespaces.
  2. use a --no-headers=trueopção para ocultar os cabeçalhos.
  3. use scommand of sedpara buscar as duas primeiras palavras, que representam namespacee pod's namerespectivamente, e monte o deletecomando usando-as.
  4. a final deletede comando é como: kubectl --namespace kube-system delete pod heapster-eq3yw.
  5. use o emodificador de scomando para executar o comando montado acima, que fará os deletetrabalhos reais .

Para evitar excluir pods no kube-systemespaço para nome, basta adicionar grep -v kube-systempara excluir o kube-systemespaço para nome antes do sedcomando.

Weike
fonte
Você também pode simplesmente colocar --all-namespacesse você não deseja excluir pods no kube-systemnamespace
ianstarz
Qual será o comando para excluir apenas alguns pods? Exemplo: eu tinha o giro de 20 Pod e agora desejo manter apenas 1. #
233 Jason Jason
11

Você pode simplesmente executar

kubectl delete all --all --all-namespaces
  • O primeiro allsignifica os tipos de recursos comuns (pods, replicasets, implantações, ...)

    • kubectl get all == kubectl get pods,rs,deployments, ...
  • O segundo --allsignifica selecionar todos os recursos dos tipos selecionados


Observe que allnão inclui:

  • recursos sem espaço para nome (por exemplo, clusterrolebindings, clusterroles, ...)
  • configmaps
  • rolebindings
  • papéis
  • segredos
  • ...

Para limpar perfeitamente,

  • você poderia usar outras ferramentas (por exemplo, Helm, Kustomize, ...)
  • você poderia usar um espaço para nome.
  • você pode usar rótulos ao criar recursos.
Mo K
fonte
2

Aqui está uma lista que pode ser estendida com grep para filtrar por nome.

kubectl get pods -o jsonpath="{.items[*].metadata.name}" | \
tr " " "\n" | \
xargs -i -P 0 kubectl delete pods {}
Claudio Fahey
fonte
1
kubectl delete po,ing,svc,pv,pvc,sc,ep,rc,deploy,replicaset,daemonset --all -A
Braconnot_P
fonte
Seja cuidadoso! Como o PV não está no namespace, o comando acima removerá todos os PVs em todo o cluster.
Ahmad Ahmadi
0

Se você já possui pods recriados, pense em excluir todas as implantações primeiro

kubectl delete -n *NAMESPACE deployment *DEPLOYMENT

Apenas substitua NAMSPACE e DEPLOYMENT pelos correspondentes, você pode obter todas as informações de implantações usando o seguinte comando

kubectl get deployments --all-namespaces
Smaillns
fonte
0

O plug-in Kubectl bulk (ação em massa no krew) pode ser útil para você, pois fornece operações em massa nos recursos selecionados. Este é o comando para excluir pods

 ' kubectl bulk pods -n namespace delete '

Você pode verificar detalhes neste

Emre Odabaş
fonte
0

Eu crio um código python para excluir tudo no namespace

delall.py

import json,sys,os;

obj=json.load(sys.stdin);
for item in obj["items"]:
        os.system("kubectl delete " + item["kind"] + "/" +item["metadata"]["name"] + " -n yournamespace")

e depois

kubectl get all -n kong -o json | python delall.py
user2218085
fonte
0

O K8s funciona completamente no fundamental do espaço para nome. se você deseja liberar todo o recurso relacionado ao espaço para nome especificado.

você pode usar o abaixo mencionado:

excluir espaço para nome kubectl k8sdemo-app

Sachin Mishra
fonte