सभी कुबेरनेट नामस्थानों में सभी पॉड्स को हटाने के लिए कमांड


154

डॉक्स को देखने पर, एक 'पॉड' को हटाने के लिए एक एपीआई कॉल है, लेकिन क्या सभी नामस्थानों में सभी पॉड्स को मारने का एक तरीका है?

जवाबों:


283

आपके द्वारा पूछे गए कार्यों को करने की कोई आज्ञा नहीं है।

यहाँ कुछ करीबी मैच हैं।

आप इस आदेश के साथ एक एकल नाम स्थान में सभी पॉड्स को हटा सकते हैं:

kubectl delete --all pods --namespace=foo

आप नेमस्पेस में सभी तैनाती को भी हटा सकते हैं जो नेमस्पेस के अनुरूप तैनाती से जुड़ी सभी पॉड्स को हटा देगा

kubectl delete --all deployments --namespace=foo

आप इस कमांड के साथ हर नामस्थान (लेकिन गैर-नामांकित ऑब्जेक्ट्स, जैसे नोड्स और कुछ ईवेंट) में सभी नामस्थान और हर ऑब्जेक्ट को हटा सकते हैं:

kubectl delete --all namespaces

हालाँकि, बाद की कमान संभवतः कुछ ऐसा नहीं है जिसे आप करना चाहते हैं, क्योंकि यह क्यूब-सिस्टम नेमस्पेस में चीजों को हटा देगा, जो आपके क्लस्टर को उपयोग करने योग्य नहीं बना देगा।

यह कमांड क्यूब-सिस्टम को छोड़कर सभी नामस्थानों को हटा देगा, जो उपयोगी हो सकते हैं:

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" सिस्टम के सामान को अब डिलीट नहीं करता है ... यह कहता है जैसे: नाम स्थान "डिफ़ॉल्ट" निषिद्ध है: यह नाम स्थान हटाया नहीं जा सकता है
काई वॉर्नर

क्या यह तैनाती या केवल पॉड्स को हटाता है?
सिनास्टेटिक

1
kubectl delete pods --all --all-namespacesकभी-कभी काम करने लगता है (यह निश्चित नहीं है कि यह कुछ वातावरणों में काम करने का कारण बनता है और दूसरों में नहीं)। यह मेरे गढ़ होस्ट से अच्छी तरह से काम करता है लेकिन लैपटॉप से ​​नहीं। दोनों चल रहे डेबियन और दोनों एक ही संस्करण kubectl के संस्करण (क्लस्टर संस्करण 1.13)
पैट्रिक डब्ल्यू

@ KaiWähner अगर मैं गलत नहीं हूँ k8s सिस्टम से संबंधित सामान kube-systemनामस्थान में हैं। संदेश के उदाहरण में, मैं defaultनामस्थान देख सकता हूं । है kube-systemआदेश आप संलग्न के साथ नष्ट कर दिया?
जॉर्ज टेरस

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

उनसे छुटकारा पाने के लिए पेसकी प्रतिकृति नियंत्रक भी।


4
ये गलत है। यह केवल वर्तमान नामस्थान में हटाता है।
कृपया हेल्पप

-N झंडा जोड़ें, लेकिन खेद है कि एक समय में एक फली के लिए और एक बार में सभी नहीं
grbonk

1
आप इससे चूक रहे हैं ing इनग्रेसेज़ को भी
ड्रस्का

2
आप "स्टेटफुलसेट" (यदि लागू हो) भी जोड़ना चाहते हैं। अन्यथा यह आपके ऊपर कमांड चलाने के बाद भी नई पॉड्स को बनाए रखेगा!
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. उपयोग esऊपर इकट्ठे कमांड को निष्पादित करने के लिए कमांड संशोधक का , जो वास्तविक deleteकाम करेगा।

kube-systemनेमस्पेस में पॉड्स को हटाने से बचने के लिए , कमांड से पहले नेमस्पेस grep -v kube-systemको बाहर करने की जरूरत है ।kube-systemsed


तुम भी छोड़ सकते हैं --all-namespacesअगर आप kube-systemनाम स्थान में फली को नष्ट नहीं करना चाहते हैं
ianstarz

केवल कुछ पॉड को हटाने का आदेश क्या होगा? उदाहरण: मैंने 20 पॉड स्पिन किए और अब केवल 1. रखना चाहते हैं
जेसन

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 हटाएं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.