कुबेरनेट्स में बेदखल फली का क्या होगा?


85

मैंने देखा कि मेरी कुछ फली कुबेरनेट्स द्वारा बेदखल हो गई। उनके साथ क्या होगा? बस इस तरह के चारों ओर लटका या मुझे उन्हें मैन्युअल रूप से हटाना होगा?


3
उसी व्यवहार के साक्षी, मेरे पास एक फली है जो Evicted13 दिनों से राज्य में है । बेदखली फली की तरह लगता है हटा नहीं (या शायद यह सिर्फ एक बग है)।
एलुआन केरील-ईवन

पॉडगैक नियंत्रक उन विफल / प्राप्त पॉड्स को पुनः प्राप्त करेगा जब एक विन्यास योग्य सीमा तक पहुंच गया।
21

2
मेरे पॉड्स बेदखल हैं और कुल 40 हैं। तो क्या मुझे उन बेस्ड पॉड्स के लिए भी प्रति माह चार्ज किया जाएगा?
अनंत

कंटेनरों के गुच्छा निकाले जाते हैं लेकिन मेरे पास अभी भी उम्मीद के मुताबिक 2 कंटेनर हैं। असफल लोग कम संसाधन ( DiskPressure) के कारण थे, जिनका उपयोग करके पाया जा सकता हैkubectl describe pods my-pod-name --namespace prod
प्रयागपाद

जवाबों:


83

एक त्वरित वर्कअराउंड मैं उपयोग करता हूं, एक घटना के बाद सभी बेदखल फली को मैन्युअल रूप से हटाने के लिए है। आप इस कमांड का उपयोग कर सकते हैं:

kubectl get pods --all-namespaces -o json | jq '.items[] | select(.status.reason!=null) | select(.status.reason | contains("Evicted")) | "kubectl delete pods \(.metadata.name) -n \(.metadata.namespace)"' | xargs -n 1 bash -c


आपके पास एक टाइपो होना चाहिए, -aतर्क अमान्य है।
इल्या सुजलडंत्स्की

6
यह (और इसी तरह के उत्तर) ओपी प्रश्न का उत्तर नहीं देता है "उनका क्या होगा [अगर आप कुछ भी नहीं करते हैं]?"
ओलिवर

59

नाम स्थान में विफल स्थिति में पॉड्स को हटाने के लिए default

kubectl -n default delete pods --field-selector=status.phase=Failed

1
अजीब बात है, यह कोई भी नहीं दिखाता है status.phase=Evicted। मैं यह करने में कामयाब रहा kubectl -n default delete pods --field-selector=status.phase!=Running। लेकिन सावधान रहें, यह सब कुछ मिटा देगा
n3o

3
मुझे लगता है कि यह kubectl -n default get pods --field-selector=status.phase=Failedपहली बार में चलाने के लिए उपयोगी हो सकता है ।
यूज़र

यह Evictedमेरे लिए फली से छुटकारा दिलाता है।
रोबर्टोडेक्नेरेक्स

19

बेचे गए पॉड्स को मैन्युअल रूप से हटा दिया जाना चाहिए। आप Errorराज्य में सभी पॉड्स को हटाने के लिए निम्न आदेश का उपयोग कर सकते हैं ।

kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -

15

एक नरम या कठोर निष्कासन सीमा जो मिली है, उसके आधार पर , फली में कंटेनरों को अनुग्रह अवधि के साथ या बिना समाप्त किया PodPhaseजाएगा, Failedइसे पॉड के रूप में चिह्नित किया जाएगा और हटा दिया जाएगा। यदि आपका एप्लिकेशन उदा परिनियोजन के भाग के रूप में चलता है, तो कुबेरनेट द्वारा एक और पॉड बनाया और शेड्यूल किया जाएगा - संभवतया दूसरे नोड पर इसका निष्कासन थ्रेसहोल्ड से अधिक न हो।

ज्ञात हो कि बेदखली जरूरी नहीं कि थ्रेसहोल्ड के कारण हो, बल्कि एक नोडkubectl drain को खाली करने के लिए या कुबेरनेट एपीआई के माध्यम से मैन्युअल रूप से लागू किया जा सकता है


3
हाँ, मेरी फली परिनियोजन से है, और मुझे दूसरे नोड पर एक और पॉड दिखाई दे रही है, लेकिन उन पिछली बेदखली पॉड्स भी हैं
प्रीपलिन

आप कैसे निर्धारित करते हैं कि वे "वहां भी हैं"? कौन सी कमांड वास्तव में आपको दिखाती है?
साइमन टेसर

बसkubectl get pods -n mynamespace
पहुँच

किस राज्य में? क्या kubectl describe pod <pod>कहता है?
साइमन टेसर

1
ओपी नहीं लेकिन मेरे पास यह मुद्दा है। kubectl describe "स्थिति: विफल कारण: अनुमानित संदेश: पॉड संसाधन पर नोड कम था: [मेमोरीपीयर]।"
ब्रायन

7

Kube-controller-managerडिफ़ॉल्ट रूप से काम कर रहे K8s इंस्टॉलेशन के साथ मौजूद है। ऐसा प्रतीत होता है कि जीसी में किक करने से पहले डिफ़ॉल्ट अधिकतम 12500 समाप्त पॉड्स है।

K8s दस्तावेज़ से सीधे: https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/#kube-controller-manager

- निष्क्रिय-पॉड-जीसी-थ्रेशोल्ड इंट 32 डिफॉल्ट: 12500
समाप्त फली की संख्या जो समाप्त पॉड कचरा कलेक्टर से समाप्त होने से पहले ही समाप्त हो सकती है। यदि <= 0, समाप्त फली कचरा कलेक्टर अक्षम है।


मेरे मास्टर नोड्स पर मेरे पास क्यूब-कंट्रोलर-मैनेजर पॉड्स हैं। लेकिन मुझे इस ध्वज को कैसे संशोधित करना चाहिए? यदि मैं kubectl edit pod kube-controller-manager-<master_name> -n kube-systemइसका उपयोग करना चाहता हूँ, तो मुझे pod is invalidविन्यास फाइल को सहेजने के बाद यह त्रुटि देता है ।
अली तू ०

5

यदि आपके पास एक ऐसी Completedस्थिति के साथ फली है, जिसे आप आसपास रखना चाहते हैं:

kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -

4

बस उस स्थिति में जब कोई व्यक्ति सभी नामस्थानों के लिए सभी निकाले गए पॉड्स को स्वचालित रूप से हटाना चाहता है:

  • शक्ति कोशिका
    Foreach( $x in (kubectl get po --all-namespaces --field-selector=status.phase=Failed --no-headers -o custom-columns=:metadata.name)) {kubectl delete po $x --all-namespaces }
  • दे घुमा के
kubectl get po --all-namespaces --field-selector=status.phase=Failed --no-headers -o custom-columns=:metadata.name | xargs kubectl delete po --all-namespaces

3

सभी 'बेदखल ’पॉड्स को हटाने के लिए काल्विन की कमान के ओपनशीट के बराबर:

eval "$(oc get pods --all-namespaces -o json | jq -r '.items[] | select(.status.phase == "Failed" and .status.reason == "Evicted") | "oc delete pod --namespace " + .metadata.namespace + " " + .metadata.name')"

3

बेक्ड पॉड्स को हटाने के लिए एक और बैश कमांड

kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod

2

सभी Evictedपॉड्स को बल से हटाने के लिए , आप यह एक-लाइन कमांड आज़मा सकते हैं:

$ kubectl get pod -A | sed -nr '/Evicted/s/(^\S+)\s+(\S+).*/kubectl -n \1 delete pod \2 --force --grace-period=0/e'

सुझाव: विलोपन कार्य करने के लिए वास्तविक आदेश को मुद्रित करने के बजाय केवल कमांड के pसंशोधक का उपयोग करें :ssede

$ kubectl get pod -A | sed -nr '/Evicted/s/(^\S+)\s+(\S+).*/kubectl -n \1 delete pod \2 --force --grace-period=0/p'

1

यहां बताया गया है कि थ्रेसहोल्ड कोड (यदि आप बहुत अधिक बेदखल फली नहीं देखना चाहते हैं) के लिए 'आधिकारिक' गाइड है: क्यूब-कंट्रोलर-मैनेजर

लेकिन एक ज्ञात समस्या यह है कि क्यूब-कंट्रोलर-मैनेजर को कैसे स्थापित किया जाए ...


कृपया उल्लेख करें कि उल्लेखित स्थापना कैसे प्राप्त की जा सकती है, यदि यह परेशानी वाली है।
मैंडीशॉ जूल

मुझे इसका उत्तर नहीं पता है, इसलिए मैंने इसका उल्लेख किया है। और ओपी ने उस प्रणाली का उल्लेख नहीं किया जिसका वह उपयोग कर रहा था और मुझे नहीं पता कि क्या उसके पास भी यही मुद्दा होगा। BTW, डाउनवोट सुपर नीस है।
टिकैले

आपको लगता है कि मैंने अपने विचार को एक टिप्पणी के रूप में जोड़ने के लिए बेहतर काम किया है क्योंकि यह पूरी तरह से सवाल का जवाब नहीं देता है (यही कारण है कि मैंने इसे अस्वीकार कर दिया है - क्षमा करें, लेकिन यह हम सभी के लिए होता है, मेरे सहित अभी)।
मैंडीशॉ जूल

उपरोक्त सभी अन्य उत्तरों की जाँच करें, ओपी ने पूछा कि क्या हुआ और उनमें से कितने लोगों ने उत्तर दिया और उनमें से कितने बेदखली फली को हटाने का एक तरीका प्रदान करते हैं?
टिकैले

1

एक और तरीका अभी भी साथ है awk

किसी भी मानवीय त्रुटि को रोकने के लिए जो मुझे पागल बना सकती है (वांछनीय फली हटाना), मैं get podsआदेश के परिणाम से पहले जांच करता हूं :

kubectl -n my-ns get pods --no-headers --field-selector=status.phase=Failed     

अगर यह अच्छा लगता है, तो हम यहाँ जाते हैं:

kubectl -n my-ns get pods --no-headers --field-selector=status.phase=Failed | \
awk '{system("kubectl -n my-ns delete pods " $1)}'

1

Bellow कमांड सभी नामस्थानों से सभी विफल पॉड्स को हटाती है

kubectl get pods -A | grep Evicted | awk '{print $2 " -n " $1}' | xargs -n 3 kubectl delete pod

0

नीचे दिए गए आदेश में डिफ़ॉल्ट नामस्थान से सभी निकाले गए पॉड मिलेंगे और उन्हें हटा देगा

kubectl get pods | grep Evicted | awk '{print$1}' | xargs -I {} kubectl delete pods/{}


1
कोड केवल उत्तरों को प्रोत्साहित नहीं किया जाता है, क्योंकि यह समझाए गए संदर्भ के साथ उत्तर की तरह मदद नहीं करेगा जो समुदाय को लंबे समय में मदद करता है।
अरुण विनोथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.