คำสั่งเพื่อลบพ็อดทั้งหมดในเนมสเปซ kubernetes ทั้งหมด


155

เมื่อดูที่เอกสารมีการเรียก API เพื่อลบ 'a' pod แต่มีวิธีฆ่าพ็อดทั้งหมดในเนมสเปซทั้งหมดหรือไม่

คำตอบ:


284

ไม่มีคำสั่งให้ทำสิ่งที่คุณถาม

นี่คือการแข่งขันที่ใกล้เคียง

คุณสามารถลบพ็อดทั้งหมดในเนมสเปซเดียวด้วยคำสั่งนี้:

kubectl delete --all pods --namespace=foo

คุณยังสามารถลบการปรับใช้ทั้งหมดในเนมสเปซซึ่งจะลบพ็อดทั้งหมดที่แนบกับการปรับใช้ที่สอดคล้องกับเนมสเปซ

kubectl delete --all deployments --namespace=foo

คุณสามารถลบเนมสเปซทั้งหมดและทุกวัตถุในทุกเนมสเปซ (แต่ไม่ใช่วัตถุที่ไม่มีเนมสเปซเช่นโหนดและบางเหตุการณ์) ด้วยคำสั่งนี้:

kubectl delete --all namespaces

อย่างไรก็ตามคำสั่งหลังอาจไม่ใช่สิ่งที่คุณต้องการเนื่องจากจะลบสิ่งต่าง ๆ ในเนมสเปซระบบ kube ซึ่งจะทำให้คลัสเตอร์ของคุณไม่สามารถใช้งานได้

คำสั่งนี้จะลบเนมสเปซทั้งหมดยกเว้น 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" ถูกห้าม: เนมสเปซนี้อาจไม่ถูกลบ
Kai Wähner

เป็นการลบการปรับใช้หรือเพียงแค่พ็อดหรือไม่
Sinaesthetic

1
kubectl delete pods --all --all-namespacesดูเหมือนว่าจะทำงานได้ในบางครั้ง (ไม่แน่ใจว่าอะไรทำให้มันทำงานในบางสภาพแวดล้อมและไม่ทำงานในที่อื่น) มันทำงานได้ดีจากโฮสต์ป้อมปราการของฉัน แต่ไม่ได้มาจากแล็ปท็อป ทั้งเดเบียนที่รันอยู่และทั้งคู่กำลังรันเวอร์ชันเดียวกันของ kubectl (เวอร์ชันคลัสเตอร์ 1.13)
Patrick W

@ KaiWähnerถ้าฉันไม่เข้าใจผิดว่าสิ่งที่เกี่ยวข้องกับระบบ k8 อยู่ในkube-systemเนมสเปซ ในตัวอย่างข้อความฉันเห็นdefaultเนมสเปซ จะถูกkube-systemลบออกไปด้วยคำสั่งที่คุณได้แนบ?
George Tseres

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

เพื่อกำจัดพวกเขาควบคุมการจำลองแบบที่น่ารำคาญเกินไป


4
นี่เป็นสิ่งที่ผิด สิ่งนี้จะลบเฉพาะในเนมสเปซปัจจุบัน
โปรดช่วยเหลือ

เพิ่มแฟล็ก -n แต่ขออภัยสำหรับหนึ่งพ็อดต่อครั้งและไม่พร้อมกันทั้งหมด
grbonk

1
คุณพลาดingลบ ingresses ด้วย
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เพื่อดึงคำสองคำแรกซึ่งเป็นตัวแทนnamespaceและpod's nameตามลำดับจากนั้นรวบรวมdeleteคำสั่งโดยใช้คำเหล่านั้น
  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
พ็อด

สิ่งที่จะเป็นคำสั่งที่จะลบเพียงไม่กี่ฝัก? ตัวอย่าง: ฉันหมุน 20 พ็อดและตอนนี้ต้องการเก็บเพียง 1
Jason

11

คุณสามารถเรียกใช้

kubectl delete all --all --all-namespaces
  • สิ่งแรกallหมายถึงชนิดทรัพยากรทั่วไป (พ็อดชุดจำลองการปรับใช้ ... )

    • kubectl get all == kubectl get pods,rs,deployments, ...
  • ประการที่สอง--allหมายถึงการเลือกทรัพยากรทั้งหมดของชนิดที่เลือก


โปรดทราบว่าallไม่รวม:

  • แหล่งข้อมูลที่ไม่ใช่เนมสเปซ (เช่น, กลุ่มควบคุม, คลัสเตอร์, ... )
  • configmaps
  • rolebindings
  • บทบาท
  • ความลับ
  • ...

เพื่อทำความสะอาดอย่างสมบูรณ์แบบ

  • คุณสามารถใช้เครื่องมืออื่น ๆ (เช่น 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

ฉันสร้างรหัสหลามเพื่อลบทั้งหมดในเนมสเปซ

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

K8s ทำงานอย่างสมบูรณ์บนพื้นฐานของเนมสเปซ หากคุณต้องการปล่อยทรัพยากรทั้งหมดที่เกี่ยวข้องกับเนมสเปซที่ระบุ

คุณสามารถใช้ที่กล่าวถึงด้านล่าง:

kubectl ลบเนมสเปซ k8sdemo-app

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.