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?

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

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.


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.


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.

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


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

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


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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.