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?

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

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.


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.


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.

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 {}


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

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


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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.