2015-03-04 11 views
25

कुबर्नेट्स का शेड्यूलर कैसे काम करता है? मेरा मतलब यह है कि कुबर्नेट्स का शेड्यूलर बहुत आसान प्रतीत होता है?कुबर्नेट्स का शेड्यूलर कैसे काम करता है?

मेरा प्रारंभिक विचार यह है कि यह शेड्यूलर केवल एक साधारण प्रवेश नियंत्रण प्रणाली है, वास्तविक शेड्यूलर नहीं। क्या यह सही है?

मैं एक संक्षिप्त विवरण मिला, लेकिन यह बहुत जानकारीपूर्ण नहीं है:

Kubernetes अनुसूचक एक नीति युक्त, टोपोलॉजी-अवगत, कार्यभार विशेष समारोह है कि काफी प्रभाव डालता उपलब्धता, प्रदर्शन, और क्षमता। अनुसूचक खाते में व्यक्तिगत और सामूहिक संसाधन आवश्यकताओं, सेवा आवश्यकताओं, हार्डवेयर/सॉफ्टवेयर/नीति की कमी, आत्मीयता और विरोधी आत्मीयता विनिर्देशों की गुणवत्ता, डेटा इलाके, अंतर-काम का बोझ हस्तक्षेप, समय सीमा, और इतने पर लेने के लिए की जरूरत है। वर्कलोड-विशिष्ट आवश्यकताओं आवश्यकतानुसार एपीआई के माध्यम से उजागर किया जाएगा।

उत्तर

39

पैरा आप उद्धृत का वर्णन करता है, जहां हम भविष्य (जहां भविष्य महीने, नहीं साल की इकाइयों में परिभाषित किया गया है) में होने की उम्मीद है। हम अभी तक नहीं हैं, लेकिन शेड्यूलर में पहले से ही कई उपयोगी सुविधाएं हैं, जो कि सरल तैनाती के लिए पर्याप्त हैं। इस उत्तर के बाकी हिस्सों में, मैं समझाऊंगा कि शेड्यूलर आज कैसे काम करता है।

शेड्यूलर केवल प्रवेश नियंत्रक नहीं है; बनाए गए प्रत्येक फली के लिए, यह उस फली के लिए "सर्वश्रेष्ठ" मशीन पाता है, और यदि कोई मशीन उपयुक्त नहीं है, तो जब तक मशीन उपयुक्त न हो जाए तब तक पॉड अनिश्चित हो जाती है।

शेड्यूलर कॉन्फ़िगर करने योग्य है। इसमें दो प्रकार की नीतियां हैं, FitPredicate (मास्टर/पीकेजी/शेड्यूलर/predicates.go देखें) और प्राथमिकता समारोह (मास्टर/पीकेजी/शेड्यूलर/प्राथमिकताएं देखें)। मैं उनका वर्णन करूंगा।

फिट भविष्यवाणियों के लिए आवश्यक नियम हैं, उदाहरण के लिए नोड पर लेबल पॉड पर लेबल चयनकर्ता के साथ संगत होना चाहिए (यह नियम predicates.go में PodSelectorMatches() में लागू किया गया है, और अनुरोधित संसाधनों का योग कंटेनर पहले से ही मशीन पर चल रहा है और नए कंटेनर के अनुरोधित संसाधनों को आप मशीन पर शेड्यूलिंग पर विचार कर रहे हैं मशीन की क्षमता से अधिक नहीं होना चाहिए (यह नियम भविष्य में PodFitsResources() में लागू किया गया है। जाओ; ध्यान दें कि "अनुरोधित संसाधन" को पॉड के रूप में परिभाषित किया गया है। स्पीकर कंटेंसर [एन]। स्रोत। सीमाएं, और यदि आप शून्य संसाधनों का अनुरोध करते हैं तो आप हमेशा फिट होते हैं)। यदि किसी भी आवश्यक नियम किसी विशेष (नई फली, मशीन) जोड़ी के लिए संतुष्ट नहीं हैं, तो उस मशीन पर नया पॉड निर्धारित नहीं है। यदि सभी मशीनों की जांच करने के बाद शेड्यूलर निर्णय लेता है कि नया पॉड किसी भी मशीन पर निर्धारित नहीं किया जा सकता है, तो फली लंबित स्थिति में बनी हुई है जब तक कि यह मशीनों में से किसी एक द्वारा संतुष्ट न हो।

फिट भविष्यवाणियों के संबंध में सभी मशीनों की जांच करने के बाद, शेड्यूलर यह पाया जा सकता है कि कई मशीनें फोड "फिट" होती हैं। लेकिन निश्चित रूप से फली केवल एक मशीन पर निर्धारित किया जा सकता है। यही वह जगह है जहां प्राथमिकताएं आती हैं। असल में शेड्यूलर मशीनों को रैंक करता है जो सभी फिट भविष्यवाणियों को पूरा करते हैं, और फिर सबसे अच्छा चुनते हैं। उदाहरण के लिए, यह उस मशीन को पसंद करता है जिसका पहले से चलने वाले फोड कम से कम संसाधनों का उपभोग करते हैं (यह प्राथमिकताओं में leastRequestedPriority() में लागू किया गया है)। यह नीति दूसरों को खाली छोड़ते समय एक मशीन पर बहुत सारे पैकिंग के बजाय फली (और इस प्रकार कंटेनर) फैलती है।

जब मैंने कहा कि शेड्यूलर कॉन्फ़िगर करने योग्य है, तो मेरा मतलब है कि आप संकलित समय पर निर्णय ले सकते हैं जो कि भविष्यवाणी करता है और प्राथमिकताएं जो आप कुबर्नेट्स को लागू करना चाहते हैं। वर्तमान में यह उन सभी को लागू करता है जिन्हें आप predicates.go और प्राथमिकताओं.go में देखते हैं।

+0

मुझे लगता है कि पुराने दस्तावेज़ में कुछ गड़बड़ है। कुबेर संसाधन प्रतिबंध के लिए शेड्यूलिंग और 'सीमा' करने के लिए 'अनुरोध' का उपयोग करते हैं। – harryz

+0

@ डेविडो क्या सार्वजनिक दस्तावेज है जो कोड के बजाए सादे अंग्रेजी में डिफ़ॉल्ट फ़िट प्रीडिकेट्स और प्राथमिकता कार्यों का वर्णन करता है? गैर-कुबेरियों को समझाने और डिजाइन निर्णय लेने के लिए यह सहायक होगा। – alph486

+4

तो दो साल बाद क्या आप अपने उत्तर की शुरुआत में उल्लेख किए गए इच्छित लक्ष्य तक पहुंचे? –

5

हमने अनुकूलन किया है, उदाहरण के लिए, कस्टम चयनकर्ताओं के आधार पर बहुस्तरीय संबंध और विरोधी संबंध लागू करें। शेड्यूलर सही नहीं है, लेकिन अधिकांश सेवा स्तर वर्कलोड के लिए यह बहुत अच्छा है, और भविष्य में बहुत बेहतर होना चाहिए। https://docs.openshift.org/latest/admin_guide/scheduler.html#use-cases एक विशेष क्यूब शेड्यूलर कॉन्फ़िगरेशन का वर्णन करता है जो इसे प्रदान करता है।

+0

के 8 एस शेड्यूलर पर शानदार विस्तृत संसाधन! ओपनशफ्ट दस्तावेज़ों के लिंक के लिए धन्यवाद! – TrinitronX

संबंधित मुद्दे