すべてのkubernetes名前空間のすべてのポッドを削除するコマンド


154

ドキュメントを見ると、「a」ポッドを削除するAPI呼び出しがありますが、すべての名前空間のすべてのポッドを強制終了する方法はありますか?

回答:


283

要求したとおりに実行するコマンドはありません。

ここにいくつかの近い一致があります。

次のコマンドを使用して、単一の名前空間内のすべてのポッドを削除できます。

kubectl delete --all pods --namespace=foo

名前空間のすべてのデプロイメントを削除することもできます。これにより、名前空間に対応するデプロイメントに接続されているすべてのポッドが削除されます。

kubectl delete --all deployments --namespace=foo

次のコマンドを使用して、すべてのネームスペースとすべてのネームスペース内のすべてのオブジェクトを削除できます(ただし、ノードや一部のイベントなどの非ネームスペースオブジェクトは削除できません)。

kubectl delete --all namespaces

ただし、後者のコマンドはkube-system名前空間の内容を削除してクラスターを使用できなくするため、おそらく実行したくないものです。

このコマンドは、kube-systemを除くすべての名前空間を削除します。これは便利な場合があります。

for each in $(kubectl get ns -o jsonpath="{.items[*].metadata.name}" | grep -v kube-system);
do
  kubectl delete ns $each
done

1
k8sの現在のバージョンでは、コマンド「kubectl delete --all namespaces」はシステムのものを削除しません...たとえば、namespaces「default」は禁止されています:この名前空間は削除されない可能性があります
KaiWähnerApr

これによりデプロイメントまたはポッドのみが削除されますか?
Sinaesthetic

1
kubectl delete pods --all --all-namespaces時々動作するように見えます(ある環境で動作する原因と他の環境では動作しない原因は不明)それは私の要塞ホストからはうまく機能しますが、ラップトップからは機能しません。両方ともdebianを実行しており、両方とも同じバージョンのkubectl(クラスターバージョン1.13)を実行しています
Patrick W

@KaiWähnerk8sシステム関連のものはkube-system名前空間にあります。メッセージの例では、default名前空間を確認できます。されkube-system、あなたが添付したコマンドで削除?
ジョージツェレス

79
kubectl delete daemonsets,replicasets,services,deployments,pods,rc --all

厄介なレプリケーションコントローラも取り除く必要があります。


4
これは間違っています。これは、現在のネームスペースでのみ削除されます。
PleaseHelp '28

-nフラグを追加しますが、一度に1つのポッドではなく、一度にすべてではありません
grbonk

1
ingまた、イングレスを削除するために欠落しています
Druska

2
"statefulset"も追加することができます(該当する場合)。そうでなければ、上記のコマンドを実行した後でも、新しいポッドをフォークし続けます!
buch11

15

sedこれを行うだけです:

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

説明:

  1. コマンドを使用 kubectl get pods --all-namespacesを、すべての名前空間のすべてのポッドのリストを取得します。
  2. 使用する --no-headers=trueオプションをしてヘッダーを非表示にします。
  3. sコマンドを使用して、それぞれsedを表す最初の2つの単語をフェッチし、次にnamespacepod's namedeleteそれらを使用しコマンドをます。
  4. 最後のdeleteコマンドは次のようになります kubectl --namespace kube-system delete pod heapster-eq3yw
  5. コマンドのe修飾子を使用して、s上記で組み立てたコマンドを実行しdeleteます。これにより、実際の作業が行われます。

kube-system名前空間内のポッドの削除を回避するには、コマンドの前に名前空間を追加grep -v kube-systemして除外する必要がありkube-systemますsed


名前空間の--all-namespacesポッドを削除したくない場合は、ドロップすることもできkube-systemます
ianstarz

少数のポッドのみを削除するコマンドは何ですか?例:私はスピン20ポッドを持っていたし、今ちょうど1を保持したい
ジェイソン

11

簡単に実行できます

kubectl delete all --all --all-namespaces
  • 1つ目allは、一般的なリソースの種類(ポッド、レプリカセット、デプロイメントなど)を意味します

    • kubectl get all == kubectl get pods,rs,deployments, ...
  • 2番目の--all方法は、選択した種類のすべてのリソースを選択することです


all含まれていないことに注意してください:

  • 名前空間のないリソース(例:clusterrolebindings、clusterroles、...)
  • configmaps
  • 役割バインディング
  • 役割
  • 秘密
  • ...

完全にクリーンアップするために、

  • 他のツール(Helm、Kustomizeなど)を使用できます
  • 名前空間を使用できます。
  • リソースを作成するときにラベルを使用できます。

2

以下は、名前でフィルタリングするためにgrepで拡張できるワンライナーです。

kubectl get pods -o jsonpath="{.items[*].metadata.name}" | \
tr " " "\n" | \
xargs -i -P 0 kubectl delete pods {}


0

再作成されるポッドがすでにある場合は、最初にすべてのデプロイメントを削除することを検討してください

kubectl delete -n *NAMESPACE deployment *DEPLOYMENT

NAMSPACEとDEPLOYMENTを対応するものに置き換えるだけで、次のコマンドですべての展開情報を取得できます

kubectl get deployments --all-namespaces

0

Kubectlバルク(krewのバルクアクション)プラグインは便利な場合があります。これにより、選択したリソースに対する一括操作が可能になります。ポッドを削除するコマンドです

 ' kubectl bulk pods -n namespace delete '

これで詳細を確認できます


0

名前空間のすべてを削除するPythonコードを作成します

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")

その後

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

0

K8は、名前空間の基本に完全に対応しています。指定した名前空間に関連するすべてのリソースを解放したい場合。

以下の言及を使用することができます:

kubectl delete名前空間k8sdemo-app

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.