कुबेरनेट्स "विफल शेड्यूलिंग" त्रुटियों को डीबग कैसे करें
पॉड शेड्यूलिंग समस्याएँ सबसे आम कुबेरनेट्स त्रुटियों में से एक हैं। एक नए पॉड में फंसने के कई कारण हो सकते हैं Pending
साथ राज्य FailedScheduling
उसके कारण के रूप में। इस स्थिति को दर्शाने वाला पॉड कोई कंटेनर शुरू नहीं करेगा, इसलिए आप अपने एप्लिकेशन का उपयोग नहीं कर पाएंगे।
शेड्यूलिंग समस्याओं के कारण लंबित पॉड सामान्य रूप से मैन्युअल हस्तक्षेप के बिना प्रारंभ नहीं होंगे। आपको अपने क्लस्टर की मरम्मत के लिए मूल कारण का पता लगाने और कार्रवाई करने की आवश्यकता होगी। इस लेख में, आप सीखेंगे कि इस समस्या का निदान और समाधान कैसे करें ताकि आप अपना वर्कलोड बढ़ा सकें।
सारांश
एक असफल निर्धारण त्रुटि की पहचान करना
पॉड्स के लिए a प्रदर्शित करना सामान्य है Pending
स्थिति उन्हें अपने क्लस्टर में जोड़ने के बाद थोड़े समय के लिए। कुबेरनेट्स को आपके नोड्स पर कंटेनर इंस्टेंस शेड्यूल करने की आवश्यकता होती है, और उन नोड्स को छवि को इसकी रजिस्ट्री से खींचने की आवश्यकता होती है। पॉड शेड्यूलिंग विफलता का पहला संकेत तब होता है जब यह हमेशा के रूप में दिखाई देता है Pending
सामान्य स्टार्ट-अप अवधि बीत जाने के बाद। आप Kubectl's चलाकर स्थिति की जांच कर सकते हैं get pods
आदेश दिया:
$ kubectl पॉड्स प्राप्त करें नाम तैयार स्थिति पुनरारंभ आयु डेमो-पॉड 0/1 लंबित 0 4m05s
demo-pod
चार मिनट से अधिक, लेकिन यह अभी भी अंदर है Pending
राज्य। पॉड्स आमतौर पर कंटेनर शुरू करने में इतना समय नहीं लेते हैं, इसलिए कुबेरनेट्स क्या अपेक्षा करता है, इसकी जांच शुरू करने का समय आ गया है।
अगला डायग्नोस्टिक चरण पॉड के ईवेंट इतिहास का उपयोग करके पुनर्प्राप्त करना है describe pod
आदेश दिया:
$ kubectl पॉड डेमो-पॉड का वर्णन करें ... इवेंट्स: टाइप करें कारण आयु संदेश से ---- ------ ---- ---- ------- ... चेतावनी विफल निर्धारण 4m डिफ़ॉल्ट- अनुसूचक 0/4 नोड उपलब्ध हैं: 1 बहुत अधिक पॉड्स, 3 अपर्याप्त सीपीयू।
इवेंट लॉग एक की पुष्टि करता है FailedScheduling
त्रुटि विस्तार का कारण है Pending
राज्य। इस घटना की सूचना तब दी जाती है जब कुबेरनेट्स आपके क्लस्टर के वर्कर नोड्स में से किसी एक को आवश्यक संख्या में पॉड आवंटित नहीं कर सकता है।
घटना संदेश से पता चलता है कि शेड्यूलिंग वर्तमान में क्यों संभव नहीं है: क्लस्टर में चार नोड हैं, लेकिन उनमें से कोई भी पॉड नहीं ले सकता है। तीन नोड्स में अपर्याप्त सीपीयू क्षमता है, जबकि दूसरा नोड स्वीकार कर सकने वाले पॉड्स की संख्या पर एक सीमा तक पहुंच गया है।
विफल निर्धारण त्रुटियों और इसी तरह के मुद्दों को समझना
कुबेरनेट्स केवल अतिरिक्त संसाधनों के साथ नोड्स पर पॉड्स शेड्यूल कर सकते हैं। सीपीयू या मेमोरी से बाहर चलने वाले नोड्स अब पॉड नहीं ले सकते। पॉड्स शेड्यूलिंग में भी विफल हो सकते हैं यदि वे स्पष्ट रूप से किसी एक नोड द्वारा प्रदान किए जा सकने वाले संसाधनों से अधिक संसाधनों का अनुरोध करते हैं। यह आपके क्लस्टर को स्थिर रखता है।
कुबेरनेट्स कंट्रोल प्लेन जानता है कि आपके क्लस्टर में कौन से पॉड पहले से ही नोड्स को आवंटित किए गए हैं। यह इस जानकारी का उपयोग उन नोड्स के सेट को निर्धारित करने के लिए करता है जो एक नया पॉड प्राप्त कर सकते हैं। शेड्यूलिंग त्रुटि तब होती है जब कोई उम्मीदवार उपलब्ध नहीं होता है, जिससे पॉड अटक जाता है Pending
जब तक क्षमता जारी नहीं हो जाती।
कुबेरनेट्स अन्य कारणों से भी पॉड्स को शेड्यूल नहीं कर सकते हैं। नोड्स को कई तरह से पॉड होस्ट करने के लिए अयोग्य माना जा सकता है, भले ही उनके पास पर्याप्त सिस्टम संसाधन हों:
- एक रखरखाव ऑपरेशन से पहले नए पॉड प्राप्त करने से रोकने के लिए एक व्यवस्थापक द्वारा नोड को बंद कर दिया गया हो सकता है।
- नोड का प्रभाव हो सकता है जो पॉड्स को शेड्यूल करने से रोकता है। आपके पॉड को नोड द्वारा तब तक स्वीकार नहीं किया जाएगा जब तक कि उसमें मेल खाने वाली सहनशीलता न हो।
- हो सकता है आपका पॉड अनुरोध कर रहा हो a
hostPort
जो पहले से ही नोड से जुड़ा हुआ है। नोड एक समय में केवल एक पॉड को एक विशेष पोर्ट नंबर प्रदान कर सकता है। - हो सकता है कि आपका पॉड a का उपयोग कर रहा हो
nodeSelector
इसका मतलब है कि इसे एक विशेष लेबल वाले नोड पर प्रोग्राम किया जाना चाहिए। अनटैग किए गए नोड पात्र नहीं होंगे। - पॉड्स और नोड्स की एफ़िनिटी और एंटी-एफ़िनिटी असंतोषजनक हो सकती हैं, जिससे एक शेड्यूलिंग संघर्ष हो सकता है जो नए पॉड को स्वीकार करने से रोकता है।
- पॉड में ए हो सकता है
nodeName
फ़ील्ड जो शेड्यूल करने के लिए एक विशिष्ट नोड की पहचान करती है। यदि यह नोड ऑफ़लाइन या अनिर्धारित है तो पॉड होल्ड पर अटक जाएगा।
इसका उत्तरदायित्व है kube-scheduler
, कुबेरनेट्स अनुसूचक, इन शर्तों के माध्यम से काम करने और नोड्स के सेट की पहचान करने के लिए जो एक नए पॉड की मेजबानी कर सकता है। ए FailedScheduling
घटना तब होती है जब कोई भी नोड मानदंडों को पूरा नहीं करता है।
समाधान अनुसूची विफल स्थिति
संदेश के आगे प्रदर्शित किया गया FailedScheduling
आम तौर पर प्रकट करते हैं कि आपके क्लस्टर में प्रत्येक नोड पॉड क्यों नहीं ले सका। समस्या का निवारण प्रारंभ करने के लिए आप इस जानकारी का उपयोग कर सकते हैं। ऊपर दिए गए उदाहरण में, क्लस्टर में चार पॉड्स थे, तीन जहां सीपीयू की सीमा पूरी हो गई थी और एक जो एक पॉड काउंट सीमा से अधिक हो गया था।
इस मामले में क्लस्टर क्षमता मूल कारण है। आप हार्डवेयर खपत के मुद्दों को हल करने के लिए अपने क्लस्टर को नए नोड्स के साथ स्केल कर सकते हैं, ऐसे संसाधनों को जोड़कर जो अतिरिक्त लचीलापन प्रदान करेंगे। चूंकि इससे आपकी लागत भी बढ़ेगी, यह पहले जांचने योग्य है कि क्या आपके क्लस्टर में अनावश्यक पॉड हैं। अप्रयुक्त संसाधनों को हटाने से नए संसाधनों के लिए क्षमता मुक्त हो जाएगी।
आप का उपयोग करके अपने प्रत्येक नोड पर उपलब्ध संसाधनों का निरीक्षण कर सकते हैं describe node
आदेश दिया:
$ kubectl नोड डेमो-नोड का वर्णन करता है ... आवंटित संसाधन: (कुल सीमाएं 100 प्रतिशत से अधिक हो सकती हैं, अर्थात, अतिप्रतिबद्ध।) संसाधन अनुरोध सीमाएँ -------- -------- ---- -- cpu 812m (90%) 202m (22%) मेमोरी 905Mi (57%) 715Mi (45%) अल्पकालिक-भंडारण 0 (0%) 0 (0%) विशाल पृष्ठ-2Mi 0 (0%) 0 (0%)
इस नोड पर पॉड्स पहले से ही उपलब्ध मेमोरी के 57% का अनुरोध कर रहे हैं। यदि कोई नया पॉड अपने लिए 1 Gi का अनुरोध करता है, तो नोड शेड्यूलिंग अनुरोध को स्वीकार नहीं कर पाएगा। अपने प्रत्येक नोड के लिए इस जानकारी की निगरानी करने से आपको यह आकलन करने में मदद मिल सकती है कि आपका क्लस्टर अधिक प्रावधानित हो रहा है या नहीं। आपके एक नोड के विफल होने की स्थिति में अतिरिक्त क्षमता होना महत्वपूर्ण है और इसके कार्यभार को दूसरे पर पुनर्निर्धारित करने की आवश्यकता है।
शेड्यूल करने योग्य नोड्स गुम होने के कारण शेड्यूलिंग विफलताएँ निम्न के समान एक संदेश प्रदर्शित करेंगी FailedScheduling
आयोजन:
0/4 नोड उपलब्ध हैं: 4 नोड अनिर्धारित थे
नोड जिन्हें शेड्यूल नहीं किया जा सकता क्योंकि उन्हें लूप किया गया है, उनमें शामिल होंगे SchedulingDisabled
उनके स्थिति क्षेत्र में:
$ kubectl नोड प्राप्त करें नाम स्थिति भूमिकाएं आयु संस्करण नोड-1 तैयार, शेड्यूलिंग अक्षम नियंत्रण-प्लेन, मास्टर 26m v1.23.3
आप नए पॉड प्राप्त करने की अनुमति देने के लिए नोड को अनलिंक कर सकते हैं:
$ kubectl uncordon node-1 node/node-1 uncordoned
जब नोड बंद नहीं होते हैं और पर्याप्त संसाधन होते हैं, तो शेड्यूलिंग त्रुटियां आमतौर पर संदूषण या त्रुटि के कारण होती हैं nodeSelector
अपने पॉड पर फ़ील्ड। यदि तुम प्रयोग करते हो nodeSelector
सत्यापित करें कि आपने कोई टाइपो नहीं बनाया है और आपके क्लस्टर में पॉड्स हैं जिनमें आपके द्वारा निर्दिष्ट लेबल हैं।
जब नोड दूषित होते हैं, तो सुनिश्चित करें कि आपने अपने पॉड के मेनिफेस्ट में संबंधित सहिष्णुता को शामिल किया है। एक उदाहरण के रूप में, यहाँ एक नोड है जो दूषित हो गया है इसलिए पॉड्स तब तक शेड्यूल नहीं करेंगे जब तक कि उनके पास a demo-taint: allow
सहनशीलता:
$ kubectl टेंट नोड्स नोड-1 डेमो-टेंट=अनुमति दें: NoSchedule
अपने पॉड मेनिफ़ेस्ट को संपादित करें ताकि वे नोड पर शेड्यूल कर सकें:
कल्पना: सहनशीलता: - चाभी: डेमो कलंक ऑपरेटर: बराबर मूल्य: अनुमति देना प्रभाव: कोई शेड्यूल नहीं
उत्पन्न होने वाली समस्या का समाधान करें FailedScheduling
राज्य कुबेरनेट्स को आपके लंबित पॉड का शेड्यूलिंग फिर से शुरू करने की अनुमति देगा। नियंत्रण विमान द्वारा आपके नोड्स में परिवर्तन का पता लगाने के तुरंत बाद वे स्वचालित रूप से चलना शुरू कर देंगे। आपको अपने पॉड्स को फिर से शुरू करने या मैन्युअल रूप से फिर से बनाने की आवश्यकता नहीं है, जब तक कि समस्या आपके पॉड मेनिफेस्ट में त्रुटियों के कारण न हो, जैसे गलत एफ़िनिटी या nodeSelector
खेतों।
सारांश
FailedScheduling
त्रुटियां तब होती हैं जब कुबेरनेट्स आपके क्लस्टर में नोड पर एक नया पॉड नहीं रख सकते। यह अक्सर आपके मौजूदा नोड्स के हार्डवेयर संसाधनों जैसे सीपीयू, मेमोरी और डिस्क से बाहर चलने के कारण होता है। जब यह स्थिति होती है, तो आप अतिरिक्त नोड्स शामिल करने के लिए अपने क्लस्टर को स्केल करके समस्या को ठीक कर सकते हैं।
शेड्यूलिंग विफलता तब भी होती है जब पॉड्स नोड समानताएं, एंटी-एफ़िनिटीज़ और चयनकर्ता निर्दिष्ट करते हैं जो वर्तमान में आपके क्लस्टर में उपलब्ध नोड्स से संतुष्ट नहीं हो सकते हैं। अवरुद्ध और दूषित नोड्स कुबेरनेट्स के लिए उपलब्ध विकल्पों को और कम कर देते हैं। इस प्रकार की समस्या को लेबल में टाइपो के लिए अपने मैनिफ़ेस्ट की जाँच करके और उन बाधाओं को हटाकर हल किया जा सकता है जिनकी अब आपको आवश्यकता नहीं है।