पॉड्स समाप्ति की स्थिति में फंस गए


244

मैंने ReplicationController12 पॉड्स को हटाने की कोशिश की और मैं देख सकता था कि कुछ पॉड्स Terminatingस्टेटस में अटके हुए हैं ।

मेरे कुबेरनेट क्लस्टर में एक नियंत्रण विमान नोड और तीन श्रमिक नोड हैं जो उबंटू आभासी मशीनों पर स्थापित हैं।

इस मुद्दे का कारण क्या हो सकता है?

NAME        READY     STATUS        RESTARTS   AGE
pod-186o2   1/1       Terminating   0          2h
pod-4b6qc   1/1       Terminating   0          2h
pod-8xl86   1/1       Terminating   0          1h
pod-d6htc   1/1       Terminating   0          1h
pod-vlzov   1/1       Terminating   0          1h

क्या शेड्यूलर और कंट्रोलर-मैनेजर चल रहे हैं?
एंटोनी

1
से संबंधित हो सकता github.com/kubernetes/kubernetes/issues/51835
donhector

जवाबों:


471

POD को बलपूर्वक हटाने के लिए आप निम्न आदेश का उपयोग कर सकते हैं।

kubectl delete pod <PODNAME> --grace-period=0 --force --namespace <NAMESPACE>

3
यह मेरे लिए एक 1.2.4 पर समाधान था। फली पूरी रात समाप्त कर दिया गया था
816 tback

6
मेरे मामले में, मुझे एक और विकल्प जोड़ना होगा: --forceफली को फलीभूत करने के लिए।
बीएमडब्ल्यू

17
मैंने अपने क्लस्टर में ऐसा किया था और फली को हटा दिया गया था, लेकिन जब मैंने नोड की जाँच की तो यह कंटेनर अभी भी चल रहा था। मैंने नोड पर ही डॉकटर को पुनः आरंभ किया। github.com/kubernetes/kubernetes/issues/25456 बस इस कमांड के साथ एक प्रणालीगत समस्या को छिपा नहीं रहे हैं, सावधान रहें।
मकसूद

4
@mqsoh: फोर्स डिलीट इसे सिर्फ एपी-सर्वर स्टोर (etcd) से हटा दें, डिलीट किया गया वास्तविक संसाधन अनिश्चित काल तक चलता रह सकता है।
बिट्स

8
"चेतावनी: तत्काल विलोपन इस पुष्टि के लिए प्रतीक्षा नहीं करता है कि चल रहे संसाधन को समाप्त कर दिया गया है। संसाधन अनिश्चित काल तक क्लस्टर पर चलता रह सकता है" क्या संसाधन?
अक्षय

57

फली हटाएं बल:

kubectl delete pod --grace-period=0 --force --namespace <NAMESPACE> <PODNAME>

--forceझंडा अनिवार्य है।


41
लेकिन मेरे लिए असली सवाल यह है कि "हमें पहले स्थान पर इसका सहारा क्यों लेना है?" अन्यथा सामान्य परिचालन स्थितियों के तहत इस अटकी हुई स्थिति में किस प्रकार की चीजें फली को प्राप्त करती हैं?
neverfox

2
खैर, मैं आपको एक उदाहरण दे सकता हूं, हमारे पास एक जावा कंटेनर था जिसमें सुंदर शटडाउन था, लेकिन कूड़ा-कचरा खुद को मौत के लिए इकट्ठा कर रहा था, इस प्रकार संकेतों पर प्रतिक्रिया नहीं कर रहा था।
ऑरेलिया

1
नाम स्थान प्रदान करना अच्छा है, अन्यथा बहु-नाम स्थान के वातावरण में आपकी फली नहीं मिलेगी, डिफ़ॉल्ट रूप से यह kube-systemनाम स्थान में दिख रही है ।
डैनियल आंद्रेई मिनक

एक बार में सभी पॉड्स को हटाने के लिए मजबूर करने के लिएktl get pods -o custom-columns=:metadata.name | xargs kubectl delete pod --force --grace-period=0
गहरा

21

संसाधन (पॉड, परिनियोजन, डीएस आदि ...) से फाइनल ब्लॉक को हटा दें।

"finalizers": [
  "foregroundDeletion"
]

1
इसके बाद लगातार वॉल्यूम हटता गया। यह वास्तव में क्या करता है?
रयान

समाप्त होने की अवस्था में फंसी मेरी फली को तुरन्त हटा दिया गया।
कुबेरचुन

यह केवल एक चीज थी जो मेरे लिए अटकी हुई फली तय करती delete -grace-period=0 --forceथी जब वह नहीं थी। मैं भी कुछ विस्तार की सराहना करता हूं कि यह वास्तव में क्या करता है, हालांकि।
वेलोरल

यह पृष्ठ अग्रभूमि विवरण बताता है। इसका मेटा डेटा मान जो इंगित करता है कि ऑब्जेक्ट हटाने की प्रक्रिया में है। kubernetes.io/docs/concepts/workloads/controllers/…
शॉन कीन

14

व्यावहारिक उत्तर - आप हमेशा रनिंग द्वारा एक समाप्ति पॉड को हटा सकते हैं:

kubectl delete pod NAME --grace-period=0

ऐतिहासिक उत्तर - संस्करण 1.1 में एक मुद्दा था जहां कभी-कभी फली समाप्त होने की स्थिति में फंसी हो जाती है यदि उनके नोड्स को क्लस्टर से अशुद्ध रूप से हटा दिया जाता है।


1
मुझे लगता है कि यह मुद्दा है। मैंने नोड्स से हटाए बिना एक मिनियन वीएम को संचालित किया। क्या यह स्वीकार्य व्यवहार है? या कुबेरनेट्स से उन फली को हटाने के लिए एक तय है?
दिमुथु

हां, वर्जन 1.2 के आसपास आने तक का वर्कआउट पॉड्स को हटाना है।
एलेक्स रॉबिन्सन

36
आप हमेशा एक समापन पॉड को हटाने के लिए मजबूर कर सकते हैंkubectl delete pod NAME --grace-period=0
क्लेटन

3
डॉक्टर का कहना है कि जब kubectl delete ...एक SIG_TERMअनुरोध चल रहा है तो कंटेनर को भेजा जाएगा। लेकिन क्या होगा अगर ग्रेस अवधि के बाद, कंटेनर अभी भी चल रहा है? मुझे फली का एक गुच्छा मिला, जिसमें Terminatingकुछ लिखा था, कुछ नटज में। प्रतिकृतिकंट्रोलर हटा दिया गया था, और कंटेनर अभी भी चल रहा है
क्वीन गुयेन तुआन

4
kubectl delete pod PODNAME --grace-period=0मेरे लिए क्लेटन द्वारा सुझाए गए अनुसार काम किया।
योगेश जिलवार

13

मुझे यह आदेश अधिक सीधा लगा:

for p in $(kubectl get pods | grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force;done

यह डिफ़ॉल्ट नाम स्थान में समाप्ति स्थिति में सभी पॉड्स को हटा देगा।


1
यदि आप इसे किसी अन्य नामस्थानों जैसे kube-systemउपयोग पर चलाना चाहते हैं:for p in $(kubectl get pods -n kube-system| grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force -n kube-system;done
acrogenesis

8

मेरे मामले में --forceविकल्प काफी काम नहीं आया। मैं अभी भी फली देख सकता था! यह समाप्ति / अज्ञात मोड में अटक गया था। इसलिए दौड़ने के बाद

kubectl delete pods <pod> -n redis --grace-period=0 --force

मैं भागा

kubectl patch pod <pod> -p '{"metadata":{"finalizers":null}}'

2
ऐसा करने से पहले, यह समझने के लायक है कि kubernetes.io/docs/concepts/workloads/controllers/… पढ़ने के लिए क्या अंतिम हैं। इसके अलावा, विशिष्ट
स्टाइलाइजर को देखकर

5

यदि --grace-period=0काम नहीं कर रहा है तो आप कर सकते हैं:

kubectl delete pods <pod> --grace-period=0 --force

ऐसी कुछ स्थितियाँ हैं जहाँ यह काम करती दिखाई देती है लेकिन वास्तव में यह नष्ट नहीं होती है। यह उन मुद्दों के साथ करना पड़ सकता है जहां क्यूबलेट फली की स्थिति खो देता है और राज्य प्राप्त नहीं कर सकता है इसलिए इसे छोड़ देता है .. (जैसे github.com/kubernetes/kubernetes/issues/51835 )। मुझे अभी तक इसे शुद्ध करने का कोई तरीका नहीं मिला है।
cgseller

3

मैं हाल ही में इस पर लड़खड़ा गया जब रोके सीफ नेमस्पेस को हटा दिया - यह समाप्त होने की स्थिति में फंस गया।

केवल एक चीज जिसने मदद की kubernetes फाइनल को हटाकर सीधे k8s कर्ली को कर्ल के रूप में यहां पर सुझाव दिया गया था

  • kubectl get namespace rook-ceph -o json > tmp.json
  • में kubernetes फाइनल को हटाएं tmp.json(खाली सरणी छोड़ें "finalizers": [])
  • kubectl proxyअन्य प्रयोजनों के लिए टर्मिनल में चलाएं और लौटे पोर्ट के लिए कर्ल अनुरोध का पालन करें
  • curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json 127.0.0.1:8001/k8s/clusters/c-mzplp/api/v1/namespaces/rook-ceph/finalize
  • नेमस्पेस चला गया है

विस्तृत किश्ती सीएफएच फाड़ यहाँ


3

मूल प्रश्न यह है कि " इस मुद्दे का कारण क्या हो सकता है? " और उत्तर की चर्चा https://github.com/kubernetes/kubernetes/issues/51835 और https://github.com/kubernetes/ububernetes/issues पर की गई है / 65569 और देखें https://www.bountysource.com/issues/33241128-unable-to-remove-a-stnect-container-device-or-resource-busy

इसकी वजह से डॉक माउंट कुछ अन्य नामस्थानों में लीक हो गया।

आप जांच के लिए पॉड होस्ट पर लॉगऑन कर सकते हैं।

minikube ssh
docker container ps | grep <id>
docker container stop <id> 

मुझे विश्वास नहीं हो रहा है कि यह सबसे कम उत्कीर्ण उत्तर है और इसमें एक भी टिप्पणी नहीं है। जबकि अन्य सभी उत्तर समस्या के आसपास काम करने या ठीक करने के तरीकों को संबोधित करते हैं, ओपी ने स्पष्ट रूप से इस कारण से पूछा कि पहली जगह में स्थिति क्यों होती है।
मिस्टरस्ट्राइकलैंड

0

मैंने हाल ही में अपने क्लस्टर में संसाधन मुक्त करने के लिए इस पर ठोकर खाई। यहाँ उन सभी को हटाने का आदेश है।

kubectl get pods --all-namespaces | grep Terminating | while read line; do 
pod_name=$(echo $line | awk '{print $2}' ) name_space=$(echo $line | awk 
'{print $1}' ); kubectl delete pods $pod_name -n $name_space --grace-period=0 --force; 
done

आशा है कि यह पढ़ने वाले किसी व्यक्ति की मदद करेगा

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