Perintah untuk menghapus semua pod di semua kubernetes namespaces

154

Setelah melihat dokumen, ada panggilan API untuk menghapus pod 'a', tetapi apakah ada cara untuk membunuh semua pod di semua ruang nama?

user_mda
sumber

Jawaban:

283

Tidak ada perintah untuk melakukan persis apa yang Anda minta.

Inilah beberapa pertandingan dekat.

Anda dapat menghapus semua pod dalam satu namespace dengan perintah ini:

kubectl delete --all pods --namespace=foo

Anda juga dapat menghapus semua penyebaran di namespace yang akan menghapus semua pod yang terpasang dengan penyebaran yang sesuai dengan namespace

kubectl delete --all deployments --namespace=foo

Anda dapat menghapus semua namespace dan setiap objek di setiap namespace (tetapi bukan objek yang tidak di-namespace, seperti node dan beberapa peristiwa) dengan perintah ini:

kubectl delete --all namespaces

Namun, perintah yang terakhir mungkin bukan sesuatu yang ingin Anda lakukan, karena itu akan menghapus hal-hal di namespace sistem kubus, yang akan membuat cluster Anda tidak dapat digunakan.

Perintah ini akan menghapus semua namespace kecuali kube-system, yang mungkin berguna:

for each in $(kubectl get ns -o jsonpath="{.items[*].metadata.name}" | grep -v kube-system);
do
  kubectl delete ns $each
done
Eric Tune
sumber
1
Dengan versi saat ini dari k8s, perintah "kubectl delete --all namespaces" tidak menghapus hal-hal sistem lagi ... Dikatakan mis: namespaces "default" dilarang: namespace ini mungkin tidak dihapus
Kai Wähner
Apakah ini menghapus penyebaran atau hanya pod?
Sinaesthetic
1
kubectl delete pods --all --all-namespacestampaknya bekerja kadang-kadang (tidak yakin apa yang menyebabkannya bekerja di beberapa lingkungan dan tidak di tempat lain). Ini bekerja dengan baik dari tuan rumah benteng saya tetapi tidak dari laptop. Keduanya menjalankan debian dan keduanya menjalankan versi kubectl yang sama (versi cluster 1.13)
Patrick W
@ KaiWähner jika saya tidak salah, hal-hal yang berhubungan dengan sistem K8 ada di kube-systemnamespace. Dalam contoh pesan, saya bisa melihat defaultnamespace. Apakah kube-systemdihapus dengan perintah yang Anda lampirkan?
George Tseres
79
kubectl delete daemonsets,replicasets,services,deployments,pods,rc --all

untuk menyingkirkan mereka pengontrol replikasi sial juga.

jason
sumber
4
Ini salah. Ini hanya akan menghapus namespace saat ini.
Tolong Bantu
Tambahkan tanda -n, tapi maaf itu untuk satu pod sekaligus dan tidak sekaligus
grbonk
1
Anda juga tidak ingdapat menghapus ingresses
Druska
2
Anda mungkin ingin menambahkan "statefulset" juga (jika ada). Kalau tidak, ia akan terus mencari pod baru bahkan setelah Anda menjalankan perintah di atas!
buch11
15

Anda hanya perlu sedmelakukan ini:

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

Menjelaskan:

  1. gunakan perintah kubectl get pods --all-namespacesuntuk mendapatkan daftar semua pod di semua ruang nama.
  2. gunakan --no-headers=trueopsi untuk menyembunyikan header.
  3. gunakan sperintah seduntuk mengambil dua kata pertama, yang mewakili namespacedan pod's namemasing - masing, kemudian kumpulkan deleteperintah menggunakan mereka.
  4. final deleteperintah seperti: kubectl --namespace kube-system delete pod heapster-eq3yw.
  5. gunakan epengubah sperintah untuk menjalankan perintah yang dirakit di atas, yang akan melakukan deletepekerjaan yang sebenarnya .

Untuk menghindari menghapus pod di kube-systemnamespace, hanya perlu menambahkan grep -v kube-systemuntuk mengecualikan kube-systemnamespace sebelum sedperintah.

Weike
sumber
Anda juga dapat menjatuhkan --all-namespacesjika Anda tidak ingin menghapus pod di kube-systemnamespace
ianstarz
Apa yang akan menjadi perintah untuk menghapus hanya beberapa pod? Contoh: Saya telah memutar 20 Pod dan sekarang ingin tetap hanya 1.
Jason
11

Anda cukup berlari

kubectl delete all --all --all-namespaces
  • Yang pertama allberarti jenis sumber daya umum (pod, replika, penyebaran, ...)

    • kubectl get all == kubectl get pods,rs,deployments, ...
  • Yang kedua --allberarti memilih semua sumber daya dari jenis yang dipilih


Catatan yang alltidak termasuk:

  • sumber nonpacu sumber daya (mis., gugus-gugus roda, gugus-simpul, ...)
  • configmaps
  • rolebindings
  • peran
  • rahasia
  • ...

Untuk membersihkan dengan sempurna,

  • Anda bisa menggunakan alat lain (mis., Helm, Kustomize, ...)
  • Anda bisa menggunakan namespace.
  • Anda bisa menggunakan label saat Anda membuat sumber daya.
Mo K
sumber
2

Berikut ini adalah satu-liner yang dapat diperpanjang dengan grep untuk memfilter berdasarkan nama.

kubectl get pods -o jsonpath="{.items[*].metadata.name}" | \
tr " " "\n" | \
xargs -i -P 0 kubectl delete pods {}
Claudio Fahey
sumber
1
kubectl delete po,ing,svc,pv,pvc,sc,ep,rc,deploy,replicaset,daemonset --all -A
Braconnot_P
sumber
Hati-hati! Karena PV tidak menggunakan namespace , perintah di atas akan menghapus semua PVs cluster-wide.
Ahmad Ahmadi
0

Jika Anda sudah memiliki pod yang dibuat ulang, pikirkan untuk menghapus semua penyebaran terlebih dahulu

kubectl delete -n *NAMESPACE deployment *DEPLOYMENT

Cukup ganti NAMSPACE dan DEPLOYMENT dengan yang sesuai, Anda bisa mendapatkan semua informasi penyebaran dengan perintah berikut

kubectl get deployments --all-namespaces
Smaillns
sumber
0

Plugin Kubectl bulk (bulk-action on krew) mungkin berguna bagi Anda, itu memberi Anda operasi massal pada sumber daya yang dipilih. Ini adalah perintah untuk menghapus pod

 ' kubectl bulk pods -n namespace delete '

Anda dapat memeriksa detailnya di ini

Emre Odabaş
sumber
0

Saya membuat kode python untuk menghapus semua di 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")

lalu

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

K8s sepenuhnya bekerja pada dasar namespace. jika Anda ingin melepaskan semua sumber daya yang terkait dengan namespace yang ditentukan.

Anda dapat menggunakan yang disebutkan di bawah ini:

kubectl menghapus namespace k8sdemo-app

Sachin Mishra
sumber