
मैंने क्यूब ईगल बनाया - प्रोमेथियस का निर्यातक। यह एक अच्छी बात है जो छोटे और मध्यम समूहों के संसाधनों को बेहतर ढंग से समझने में मदद करता है। नतीजतन, मैंने एक सौ से अधिक डॉलर बचाए, क्योंकि मैंने सही प्रकार की मशीनों का चयन किया और वर्कलोड के लिए एप्लिकेशन संसाधन सीमाओं को कॉन्फ़िगर किया।
मैं क्यूब ईगल के फायदों के बारे में बात करूंगा, लेकिन पहले मैं समझाऊंगा कि उपद्रव क्यों हुआ और उच्च-गुणवत्ता की निगरानी की आवश्यकता क्यों थी।
मैंने 4-50 नोड्स के कई समूहों का प्रबंधन किया। प्रत्येक क्लस्टर में - 200 माइक्रोसर्विसेज और एप्लिकेशन तक। उपलब्ध हार्डवेयर का बेहतर उपयोग करने के लिए, अधिकांश परिनियोजन को फटने योग्य RAM और CPU संसाधनों के साथ कॉन्फ़िगर किया गया था। इसलिए फली यदि आवश्यक हो, तो उपलब्ध संसाधन ले सकते हैं, और साथ ही इस नोड पर अन्य अनुप्रयोगों के साथ हस्तक्षेप नहीं करते हैं। खैर, यह बहुत अच्छा नहीं है?
और यद्यपि क्लस्टर में अपेक्षाकृत कम सीपीयू (8%) और रैम (40%) की खपत होती है, फिर भी जब हम नोड पर उपलब्ध अधिक मेमोरी को आवंटित करने की कोशिश करते हैं, तो उन्हें लगातार चूल्हा से भीड़ की समस्या होती है। तब हमारे पास Kubernetes संसाधनों की निगरानी के लिए केवल एक डैशबोर्ड था। यहाँ एक है:

GAdana डैशबोर्ड केवल cAdvisor मेट्रिक्स के साथ
ऐसे पैनल के साथ, नोड्स जो बहुत मेमोरी और सीपीयू खाते हैं, कोई समस्या नहीं है। समस्या का कारण पता लगाना है। फली को जगह पर रखने के लिए, आप निश्चित रूप से, सभी पॉड्स पर गारंटीकृत संसाधनों को कॉन्फ़िगर कर सकते हैं (अनुरोधित संसाधन सीमा के बराबर हैं)। लेकिन यह लोहे का सबसे स्मार्ट उपयोग नहीं है। क्लस्टर पर कई सौ गीगाबाइट मेमोरी थी, जबकि कुछ नोड्स भूखे थे, जबकि अन्य में 4-10 जीबी आरक्षित थे।
यह पता चला है कि कुबेरनेट्स अनुसूचक ने असमान रूप से उपलब्ध संसाधनों में वर्कलोड वितरित किया। कुबेरनेट्स शेड्यूलर विभिन्न विन्यासों को ध्यान में रखता है: आत्मीयता, तंज और सहनशीलता के नियम, नोड चयनकर्ता जो उपलब्ध नोड्स को सीमित कर सकते हैं। लेकिन मेरे मामले में ऐसा कुछ नहीं था, और प्रत्येक नोड पर अनुरोधित संसाधनों के आधार पर फली की योजना बनाई गई थी।
चूल्हा के लिए, एक नोड चुना गया था जिसमें सबसे अधिक मुफ्त संसाधन हैं और जो अनुरोध की शर्तों को पूरा करता है। यह पता चला कि नोड्स पर अनुरोधित संसाधन वास्तविक उपयोग से मेल नहीं खाते हैं, और यहां क्यूब ईगल और संसाधनों की निगरानी करने की क्षमता बचाव में आई।
मेरे पास लगभग सभी कुबेरनेट क्लस्टर केवल नोड निर्यातक और क्यूब स्टेट मेट्रिक्स के साथ हैं । नोड एक्सपोर्टर I / O और डिस्क, CPU और RAM उपयोग के आँकड़े प्रदान करता है, और Kube स्टेट मेट्रिक्स, Kubernetes ऑब्जेक्ट मेट्रिक्स को दिखाता है, जैसे CPU और मेमोरी संसाधनों पर अनुरोध और सीमाएँ।
हमें Grafana में अनुरोध और सीमा मैट्रिक्स के साथ उपयोग मेट्रिक्स को संयोजित करने की आवश्यकता है, और फिर हमें समस्या के बारे में सभी जानकारी मिलती है। यह सरल लगता है, लेकिन वास्तव में इन दो उपकरणों में लेबल को अलग-अलग कहा जाता है, और कुछ मैट्रिक्स में मेटाडेटा लेबल बिल्कुल नहीं होते हैं। क्यूब ईगल सब कुछ अपने आप करता है और पैनल इस तरह दिखता है:


क्यूब ईगल डैशबोर्ड
हम संसाधनों के साथ कई समस्याओं को हल करने और उपकरणों को बचाने में कामयाब रहे:
- कुछ डेवलपर्स को पता नहीं था कि कितने संसाधनों की आवश्यकता है (या बस परेशान नहीं हुआ)। हमारे पास संसाधनों के लिए गलत अनुरोधों को खोजने के लिए कुछ भी नहीं था - इसके लिए हमें खपत प्लस अनुरोधों और सीमाओं को जानना होगा। अब वे प्रोमेथियस मेट्रिक्स देखते हैं, वास्तविक उपयोग और फाइन-ट्यून प्रश्नों और सीमाओं की निगरानी करते हैं।
- जेवीएम एप्लिकेशन जितना रैम लेते हैं, उतना ही ले जाते हैं। कचरा संग्रहकर्ता स्मृति को मुक्त करता है यदि 75% से अधिक शामिल हो। और चूंकि अधिकांश सेवाओं में फटने योग्य मेमोरी है, इसलिए जेवीएम ने हमेशा उस पर कब्जा कर लिया है। इसलिए, इन सभी जावा सेवाओं ने उम्मीद से कहीं अधिक रैम का उपभोग किया।
- कुछ अनुप्रयोगों ने बहुत अधिक मेमोरी का अनुरोध किया, और कुबेरनेट्स अनुसूचक ने इन नोड्स को अन्य अनुप्रयोगों को नहीं दिया, हालांकि वास्तव में वे अन्य नोड्स की तुलना में स्वतंत्र थे। एक डेवलपर ने गलती से अनुरोध में एक अतिरिक्त अंक जोड़ा और 2 के बजाय 20: रैम का एक बड़ा टुकड़ा पकड़ लिया। आवेदन में 3 प्रतिकृतियां थीं, इसलिए 3 नोड प्रभावित थे।
- हमने संसाधन सीमाएँ पेश कीं, सही अनुरोधों के साथ पॉड्स को फिर से योजनाबद्ध किया और सभी नोड्स में लोहे का उपयोग करने का सही संतुलन प्राप्त किया। एक जोड़ी नोड्स को आम तौर पर बंद किया जा सकता है। और फिर हमने देखा कि हमारे पास गलत मशीनें (सीपीयू-ओरिएंटेड हैं, मेमोरी-ओरिएंटेड नहीं)। हमने प्रकार बदला और कुछ और नोड्स को हटा दिया।
परिणाम
किसी क्लस्टर में बर्स्टेबल संसाधनों के साथ, आप मौजूदा हार्डवेयर का अधिक कुशलता से उपयोग करते हैं, लेकिन कुबेरनेट्स शेड्यूलर संसाधन अनुरोधों पर पॉड शेड्यूल करता है, जो कि व्यापक है। एक पत्थर से दो पक्षियों को मारने के लिए: समस्याओं से बचने के लिए, और संसाधनों को पूर्ण रूप से उपयोग करने के लिए, अच्छी निगरानी की आवश्यकता होती है। क्यूब ईगल (प्रोमेथियस निर्यातक और ग्राफाना डैशबोर्ड) इसके लिए उपयोगी है।