कुबेरनेट्स कंटेनरीकृत एप्लीकेशन के परिनियोजन, स्केलिंग और प्रबंधन को स्वचालित करने के लिए एक ओपन सोर्स कंटेनर ऑर्केस्ट्रेशन इंजन है| यह ओपन सोर्स प्रोजेक्ट Cloud Native Computing Foundation द्वारा होस्ट किया गया है।
1.1 - प्रलेखन के उपलब्ध संस्करण
इस वेबसाइट में कुबेरनेट्स के वर्तमान और चार पिछले संस्करण के प्रलेखन शामिल हैं।
2 - शुरू करना
यह भाग कुबेरनेट्स को सेटअप करने और चलाने के विभिन्न तरीकों को सूचीबद्ध करता है। जब आप कुबेरनेट्स सेटअप करते हैं, तो इसके आधार पर एक इंस्टॉलेशन प्रकार चुनें: रखरखाव में आसानी, सुरक्षा, नियंत्रण, उपलब्ध संसाधन और क्लस्टर के संचालन और प्रबंधन के लिए आवश्यक विशेषज्ञता।
कुबेरनेट्स क्लस्टर को स्थानीय मशीन पर, क्लाउड में, या अपने स्वयं के डेटासेंटर में डिप्लॉय करने के लिए आप कुबेरनेट्स डाउनलोड कर सकते हैं।
यदि आप कुबेरनेट्स क्लस्टर को स्वयं संभालना नहीं चाहते हैं, तो आप एक संचालन सेवा चुन सकते हैं, जैसे ये प्रमाणित प्लेटफॉर्म।
क्लाउड की विस्तृत श्रृंखला और बेयर मेटल वातावरण के लिए अन्य मानकीकृत और कस्टम समाधान भी उपलब्ध हैं।
सीखने का वातावरण
यदि आप कुबेरनेट्स सीख रहे हैं, तो कुबेरनेट्स समुदाय द्वारा समर्थित टूल का उपयोग करें,
या स्थानीय मशीन पर कुबेरनेट्स क्लस्टर सेटअप करने के लिए इकोसिस्टम में उपलब्ध टूल का उपयोग करें।
इंस्टॉल टूल्स देखें।
प्रोडक्शन वातावरण
प्रोडक्शन वातावरण के लिए समाधान का मूल्यांकन करते समय, विचार करें कि कुबेरनेट्स क्लस्टर के किन पहलुओं (या abstractions) का संचालन आप स्वयं प्रबंधित करना चाहते हैं और किसे आप एक प्रदाता को सौंपना पसंद करते हैं।
स्वयं प्रबंधित कर रहे कुबेरनेट्स क्लस्टर डिप्लॉय करने के लिए kubeadm आधिकारिक टूल है।
कुबेरनेट्स के कण्ट्रोल प्लेन को Linux पर चलाने के लिए डिज़ाइन किया गया है। अपने क्लस्टर के अंदर आप Linux या अन्य ऑपरेटिंग सिस्टम पर एप्लिकेशन चला सकते हैं, जिसमें windows भी शामिल हैं।
उत्पादन-गुणवत्ता वाले कुबेरनेट्स क्लस्टर के लिए योजना और तैयारी की आवश्यकता होती है।
यदि आपका कुबेरनेट्स क्लस्टर महत्वपूर्ण कार्यभार चलाने के लिए है, तो इसे लचीला होने के लिए कॉन्फ़िगर किया जाना चाहिए।
यह पेज उन चरणों के बारे में बताता है जो आप उत्पादन के लिए तैयार क्लस्टर सेटअप करने के लिए,
या उत्पादन के उपयोग के लिए मौजूदा क्लस्टर को अपग्रेड करने के लिए उठा सकते हैं।
यदि आप पहले से ही उत्पादन सेटअप से परिचित हैं और लिंक चाहते हैं, तो
आगे जाएं।
उत्पादन विचार
आमतौर पर, उत्पादन कुबेरनेट्स क्लस्टर वातावरण में व्यक्तिगत सीखने, विकास या परीक्षण वातावरण कुबेरनेट्स की तुलना में अधिक आवश्यकताएं होती हैं। एक उत्पादन वातावरण की आवश्यकता ये हो सकती है, जैसे: कई उपयोगकर्ताओं द्वारा सुरक्षित पहुंच, लगातार उपलब्धता, और बदलती मांगों के लिए संसाधनों को अनुकूलित करना।
जैसा कि आप तय करते हैं कि आप अपने उत्पादन कुबेरनेट्स वातावरण को कहाँ रखना चाहते हैं (परिसर या क्लाउड में) और प्रबंधन की मात्रा जिसे आप दूसरों को देना या सौंपना चाहते हैं, विचार करें कि कुबेरनेट्स क्लस्टर के लिए आपकी आवश्यकताएं निम्नलिखित मुद्दों से कैसे प्रभावित होती हैं:
उपलब्धता: सिंगल-मशीन कुबेरनेट्स सीखने का माहौल में विफलता का एक बिंदु है। अत्यधिक उपलब्ध क्लस्टर बनाने का अर्थ है:
पर्याप्त वर्कर नोड्स उपलब्ध होना, या जल्दी से उपलब्ध होने में सक्षम होना, क्योंकि बदलते वर्कलोड इसे वारंट करते हैं।
स्केल: यदि आप उम्मीद करते हैं कि आपके उत्पादन कुबेरनेट्स पर्यावरण को मांग की एक स्थिर मात्रा प्राप्त होगी, तो आप उस क्षमता के लिए सेटअप करने में सक्षम हो सकते हैं जिसकी आपको आवश्यकता है और किया जा सकता है। हालाँकि, यदि आप समय के साथ मांग बढ़ने की उम्मीद करते हैं या मौसम या विशेष घटनाओं जैसी चीजों के आधार पर अचानक से बदलते हैं, तो आपको योजना बनाने की आवश्यकता है कि कण्ट्रोल प्लेन और वर्कर नोड्स के लिए अधिक अनुरोधों से बढ़े दबाव को कैसे दूर किया जाए या अप्रयुक्त संसाधनों को कम करने के लिए स्केल किया जाए।
सुरक्षा और एक्सेस मैनेजमेंट: आपके अपने कुबेरनेट्स लर्निंग क्लस्टर पर पूर्ण व्यवस्थापकीय विशेषाधिकार हैं। लेकिन महत्वपूर्ण कार्यभार के साथ साझा क्लस्टर, और एक या दो से अधिक उपयोगकर्ता, को क्लस्टर संसाधनों तक कौन और क्या एक्सेस कर सकता है, इसके लिए अधिक परिष्कृत दृष्टिकोण की आवश्यकता होती है। आप यह सुनिश्चित करने के लिए (भूमिका-आधारित एक्सेस कण्ट्रोल) और अन्य सुरक्षा तंत्रों का उपयोग कर सकते हैं कि उपयोगकर्ता और कार्यभार उन संसाधनों तक पहुँच प्राप्त कर सकते हैं जिनकी उन्हें आवश्यकता है, साथ ही में कार्यभार और क्लस्टर को साथ में सुरक्षित रख सके।
आप नीतियों और कंटेनर संसाधन को प्रबंधित करके उन संसाधनों की सीमा निर्धारित कर सकते हैं जिन तक उपयोगकर्ता और कार्यभार पहुंच सकते हैं।
कुबेरनेट्स उत्पादन वातावरण को स्वयं बनाने से पहले, इस कार्य में से कुछ या सभी को सौंपने पर विचार करें
टर्नकी क्लाउड सॉल्यूशंस प्रदाता या अन्य कुबेरनेट्स पार्टनर्स विकल्पों में शामिल हैं:
सर्वरलेस: किसी क्लस्टर को प्रबंधित किए बिना केवल तृतीय-पक्ष उपकरण पर कार्यभार चलाएं। आपसे सीपीयू उपयोग, मेमोरी और डिस्क अनुरोध जैसी चीज़ों के लिए शुल्क लिया जाएगा।
व्यवस्थित कण्ट्रोल प्लेन: प्रदाता को क्लस्टर के कण्ट्रोल प्लेन के पैमाने और उपलब्धता का प्रबंधन करने दें, साथ ही पैच और अपग्रेड को भी संभालें।
व्यवस्थित वर्कर नोड्स: अपनी आवश्यकताओं को पूरा करने के लिए नोड्स के पूल को कॉन्फ़िगर करें, फिर प्रदाता सुनिश्चित करता है कि वे नोड उपलब्ध हैं और जरूरत पड़ने पर अपग्रेड को लागू करने के लिए तैयार हैं।
एकीकरण: ऐसे प्रदाता हैं जो कुबेरनेट्स को अन्य सेवाओं के साथ एकीकृत करते हैं जिनकी आपको आवश्यकता हो सकती है, जैसे भंडारण, कंटेनर रजिस्ट्रियां, प्रमाणीकरण तरीके, और विकास उपकरण।
चाहे आप कुबेरनेट्स क्लस्टर का निर्माण स्वयं करें या भागीदारों के साथ काम करें, अपनी आवश्यकताओं का मूल्यांकन करने के लिए निम्नलिखित अनुभागों की समीक्षा करें क्योंकि वे आपके क्लस्टर से संबंधित हैं कण्ट्रोल प्लेन, वर्कर नोड्स, यूज़र एक्सेस, और वर्कलोड रिसोर्सस.
उत्पादन क्लस्टर सेटअप
उत्पादन-गुणवत्ता वाले कुबेरनेट्स क्लस्टर में, कण्ट्रोल प्लेन क्लस्टर को उन सेवाओं से प्रबंधित करता है जिन्हें विभिन्न तरीकों से कई कंप्यूटरों में फैलाया जा सकता है। हालाँकि, प्रत्येक वर्कर नोड एक एकल इकाई का प्रतिनिधित्व करता है जिसे कुबेरनेट्स पॉड चलाने के लिए कॉन्फ़िगर किया गया है।
उत्पादन कण्ट्रोल प्लेन
सबसे सरल कुबेरनेट्स क्लस्टर में एक ही मशीन पर चलने वाले संपूर्ण कण्ट्रोल प्लेन और वर्कर नोड सेवाएं होती हैं। आप वर्कर नोड्स को जोड़कर उस वातावरण को विकसित कर सकते हैं, जैसा कि कुबेरनेट्स कंपोनेंट्स के डायग्राम में दर्शाया गया है। यदि क्लस्टर थोड़े समय के लिए उपलब्ध होने के लिए है, या अगर कुछ गंभीर रूप से गलत हो जाता है, तो इसे छोड़ दिया जा सकता है, यह आपकी आवश्यकताओं को पूरा कर सकता है।
यदि आपको अधिक स्थायी, अत्यधिक उपलब्ध क्लस्टर की आवश्यकता है, तो आपको कण्ट्रोल प्लेन को विस्तारित करने के तरीकों पर विचार करना चाहिए। डिजाइन के अनुसार, एक मशीन पर चलने वाली एक-मशीन कण्ट्रोल प्लेन सेवाएं अत्यधिक उपलब्ध नहीं हैं। यदि क्लस्टर को चालू रखना और यह सुनिश्चित करना कि कुछ गलत होने पर इसकी मरम्मत की जा सकती है, महत्वपूर्ण है, तो इन चरणों पर विचार करें:
डिप्लॉयमेंट टूल्स चुनें: आप kubeadm, kops, और kubespray जैसे टूल का उपयोग करके एक कण्ट्रोल प्लेन को तैनात कर सकते हैं। उनमें से प्रत्येक डिप्लॉयमेंट विधियों का उपयोग करके उत्पादन-गुणवत्ता डिप्लॉयमेंट के लिए युक्तियों को जानने के लिए डिप्लॉयमेंट टूल्स के साथ कुबेरनेट्स स्थापित करना देखें। आपके डिप्लॉयमेंट के साथ उपयोग करने के लिए विभिन्न कंटेनर रनटाइम उपलब्ध हैं।
सर्टिफ़िकेट प्रबंधित करे: कण्ट्रोल प्लेन सेवाओं के बीच सुरक्षित संचार सर्टिफ़िकेटस का उपयोग करके कार्यान्वित किया जाता है। डिप्लॉयमेंट के दौरान सर्टिफ़िकेट स्वचालित रूप से उत्पन्न होते हैं या आप अपने स्वयं के सर्टिफ़िकेट अथॉरिटी का उपयोग करके उन्हें उत्पन्न कर सकते हैं।
विवरण के लिए PKI सर्टिफ़िकेटस और आवश्यकताएं देखें।
एपिसर्वर के लिए लोड बैलेंसर कॉन्फ़िगर करें: विभिन्न नोड्स पर चल रहे एपिसर्वर सर्विस इंस्टेंस के लिए बाहरी एपीआई अनुरोधों को वितरित करने के लिए लोड बैलेंसर को कॉन्फ़िगर करें।
विवरण के लिए एक बाहरी लोड बैलेंसर बनाना देखें।
अलग और बैकअप etcd सेवा: अतिरिक्त सुरक्षा और उपलब्धता के लिए etcd सेवाएं या तो अन्य कंट्रोल प्लेन सेवाओं के समान मशीनों पर चल सकती हैं या अलग मशीनों पर चल सकती हैं। क्योंकि etcd क्लस्टर कॉन्फ़िगरेशन डेटा संग्रहीत करता है, etcd डेटाबेस का बैकअप नियमित रूप से किया जाना चाहिए ताकि यह सुनिश्चित हो सके कि यदि आवश्यक हो तो आप उस डेटाबेस की मरम्मत कर सकते हैं।
etcd को कॉन्फ़िगर करने और उपयोग करने के विवरण के लिए etcd अक्सर पूछे जाने वाले प्रश्न देखें।
विवरण के लिए कुबेरनेट्स के लिए ऑपरेटिंग etcd क्लस्टर और क्यूबएडीएम के साथ एक उच्च उपलब्धता etcd क्लस्टर स्थापित करें देखें।
मल्टीपल कण्ट्रोल प्लेन सिस्टम बनाएं: उच्च उपलब्धता के लिए, कण्ट्रोल प्लेन एक मशीन तक सीमित नहीं होना चाहिए। यदि कण्ट्रोल प्लेन सेवाएं एक init सेवा (जैसे systemd) द्वारा चलाई जाती हैं, तो प्रत्येक सेवा को कम से कम तीन मशीनों पर चलना चाहिए। हालाँकि, कुबेरनेट्स में पॉड्स के रूप में कण्ट्रोल प्लेन सेवाएं चलाना सुनिश्चित करता है कि आपके द्वारा अनुरोधित सेवाओं की प्रतिकृति संख्या हमेशा उपलब्ध रहेगी।
अनुसूचक फॉल्ट सहने वाला होना चाहिए, लेकिन अत्यधिक उपलब्ध नहीं होना चाहिए। कुबेरनेट्स सेवाओं के नेता चुनाव करने के लिए कुछ डिप्लॉयमेंट उपकरण राफ्ट सर्वसम्मति एल्गोरिथ्म की स्थापना करते हैं। यदि प्राथमिक चला जाता है, तो दूसरी सेवा स्वयं को चुनती है और कार्यभार संभालती है।
कई क्षेत्रों में विस्तार करना: यदि अपने क्लस्टर को हर समय उपलब्ध रखना महत्वपूर्ण है, तो एक ऐसा क्लस्टर बनाने पर विचार करें, जो कई डेटा केंद्रों पर चलता हो, जिसे क्लाउड वातावरण में ज़ोन के रूप में संदर्भित किया जाता है। ज़ोन(zone) के समूहों को रीजन(region) कहा जाता है। एक ही क्षेत्र में कई क्षेत्रों में एक क्लस्टर फैलाकर, यह इस संभावना में सुधार कर सकता है कि एक क्षेत्र अनुपलब्ध होने पर भी आपका क्लस्टर कार्य करना जारी रखेगा।
विवरण के लिए एक से अधिक ज़ोन मे चलाना देखें।
चल रही सुविधाओं का प्रबंधन: यदि आप अपने क्लस्टर को समय के साथ रखने की योजना बनाते हैं, तो इसके स्वास्थ्य और सुरक्षा को बनाए रखने के लिए आपको कुछ कार्य करने होंगे। उदाहरण के लिए, यदि आपने क्यूबएडीएम के साथ स्थापित किया है, तो आपको सर्टिफिकेट प्रबंधन और क्यूबएडीएम क्लस्टर्स को अपग्रेड करने में मदद करने के लिए निर्देश दिए गए हैं, कुबेरनेट्स प्रशासनिक कार्यों की लंबी सूची के लिए क्लस्टर का एडमिनिस्टर देखें।
उत्पादन-गुणवत्ता वाले कार्यभार को लचीला होने की आवश्यकता है और वे जिस चीज पर भरोसा करते हैं वह लचीला होना चाहिए (जैसे कि CoreDNS)। चाहे आप अपने स्वयं के कंट्रोल प्लेन का प्रबंधन करें या क्लाउड प्रदाता आपके लिए इसे करें, आपको अभी भी यह विचार करने की आवश्यकता है कि आप अपने वर्कर नोड्स को कैसे प्रबंधित करना चाहते हैं (इसे बस नोड्स के रूप में भी संदर्भित किया गया है)।
नोड्स कॉन्फ़िगर करें: नोड्स भौतिक या आभासी मशीन हो सकते हैं। यदि आप अपने स्वयं के नोड्स बनाना और प्रबंधित करना चाहते हैं, तो आप एक समर्थित ऑपरेटिंग सिस्टम स्थापित कर सकते हैं, फिर उपयुक्त जोड़ और चला सकते हैं
नोड सेवाएं। विचार करना:
जब आप उपयुक्त मेमोरी, सीपीयू, और डिस्क स्पीड और स्टोरेज क्षमता उपलब्ध कराकर नोड्स सेट करते हैं तो आपके वर्कलोड की मांग।
क्या जेनेरिक कंप्यूटर सिस्टम करेंगे या आपके पास ऐसे वर्कलोड हैं जिन्हें GPU प्रोसेसर, Windows नोड्स या VM आइसोलेशन की आवश्यकता है।
वैलिदेट(Validate) नोड: यह सुनिश्चित करने के तरीके के बारे में जानकारी के लिए वैलिद(Valid) नोड सेटअप देखें कि एक नोड कुबेरनेट्स क्लस्टर में शामिल होने के लिए आवश्यकताओं को पूरा करता है।
क्लस्टर में नोड जोड़ें: यदि आप अपने स्वयं के क्लस्टर का प्रबंधन कर रहे हैं, तो आप अपनी स्वयं की मशीनें स्थापित करके और या तो उन्हें मैन्युअल रूप से जोड़कर या क्लस्टर के एपिसर्वर में खुद को पंजीकृत करवाकर नोड्स जोड़ सकते हैं। इन तरीकों से नोड्स जोड़ने के लिए कुबेरनेट्स को कैसे सेट करें, इस बारे में जानकारी के लिए नोड्स अनुभाग देखें।
क्लस्टर में Windows नोड्स जोड़ें: कुबेरनेट्स Windows वर्कर नोड्स के लिए समर्थन प्रदान करता है, जिससे आप Windows कंटेनरों में लागू वर्कलोड को चला सकते हैं। विवरण के लिए कुबेरनेट्स में Windows देखें।
स्केल नोड्स: आपके क्लस्टर को अंततः जिस क्षमता की आवश्यकता होगी, उसके विस्तार के लिए एक योजना बनाएं। आपको चलाने के लिए आवश्यक पॉड्स और कंटेनरों की संख्या के आधार पर, यह निर्धारित करने में सहायता के लिए बड़े समूहों के लिए विचार देखें कि आपको कितने नोड्स की आवश्यकता है। यदि आप स्वयं नोड्स का प्रबंधन कर रहे हैं, तो इसका अर्थ यह हो सकता है कि आप अपने स्वयं के भौतिक उपकरण खरीदना और स्थापित करना चाहते हैं।
ऑटोस्केल नोड्स: अधिकांश क्लाउड प्रदाता अस्वस्थ नोड्स को बदलने के लिए क्लस्टर ऑटोस्केलर का समर्थन करते हैं या मांग के अनुसार नोड्स की संख्या को बढ़ाते और घटाते हैं। विभिन्न क्लाउड प्रदाताओं द्वारा इसे कैसे कार्यान्वित किया जाता है, इसके लिए अक्सर पूछे जाने वाले प्रश्न ऑटोस्केलर कैसे काम करता है और डिप्लॉयमेंट देखें। ऑन-प्रिमाइसेस के लिए, कुछ वर्चुअलाइजेशन प्लेटफॉर्म हैं जिन्हें मांग के आधार पर नए नोड्स को स्पिन करने के लिए स्क्रिप्ट किया जा सकता है।
नोड स्वास्थ्य जांच सेट करें: महत्वपूर्ण कार्यभार के लिए, आप यह सुनिश्चित करना चाहते हैं कि उन नोड्स पर चलने वाले नोड और पॉड स्वस्थ हैं। नोड समस्या डिटेक्टर डेमॉन का उपयोग करके, आप सुनिश्चित कर सकते हैं कि आपके नोड स्वस्थ हैं।
उत्पादन उपयोगकर्ता प्रबंधन
उत्पादन में, आप उस मॉडल से आगे बढ़ रहे हैं जहां आप या लोगों का एक छोटा समूह क्लस्टर तक पहुंच रहा है जहां संभावित रूप से दर्जनों या सैकड़ों लोग हो सकते हैं। सीखने के माहौल या प्लेटफ़ॉर्म प्रोटोटाइप में, आप जो कुछ भी करते हैं उसके लिए आपके पास एक ही प्रशासनिक खाता हो सकता है। उत्पादन में, आप विभिन्न नेमस्पेस्सों तक पहुंच के विभिन्न स्तरों वाले अधिक खाते चाहते हैं।
उत्पादन-गुणवत्ता वाले क्लस्टर को लेने का अर्थ है यह तय करना कि आप कैसे हैं
अन्य उपयोगकर्ताओं द्वारा चुनिंदा रूप से पहुंच की अनुमति देना चाहते हैं। विशेष रूप से, आपको उन लोगों की पहचान को सत्यापित करने के लिए रणनीतियों का चयन करने की आवश्यकता है जो आपके क्लस्टर (प्रमाणीकरण) तक पहुंचने का प्रयास करते हैं और यह तय करते हैं कि क्या उनके पास वह करने की अनुमति है जो वे पूछ रहे हैं (प्राधिकरण):
प्रमाणीकरण: apiserver क्लाइंट का उपयोग करके उपयोगकर्ताओं को प्रमाणित कर सकता है
प्रमाण पत्र, वाहक टोकन, एक प्रमाणीकरण प्रॉक्सी, या HTTP मूल प्रमाणीकरण। आप चुन सकते हैं कि आप किन प्रमाणीकरण विधियों का उपयोग करना चाहते हैं। प्लगइन्स का उपयोग करके, apiserver आपके संगठन की मौजूदा प्रमाणीकरण विधियों, जैसे LDAP या Kerberos का लाभ उठा सकता है। कुबेरनेट्स उपयोगकर्ताओं को प्रमाणित करने के इन विभिन्न तरीकों के विवरण के लिए प्रमाणीकरण देखो।
प्राधिकरण: जब आप अपने नियमित उपयोगकर्ताओं को अधिकृत करने के लिए निकलते हैं, तो आप शायद आरबीएसी और एबीएसी प्राधिकरण के बीच चयन करेंगे। उपयोगकर्ता खातों को अधिकृत करने के लिए विभिन्न तरीकों की समीक्षा करने के लिए प्राधिकरण अवलोकन देखें (साथ ही आपके क्लस्टर में सेवा खाते तक पहुंच):
भूमिका-आधारित अभिगम नियंत्रण (RBAC): प्रमाणित उपयोगकर्ताओं को अनुमतियों के विशिष्ट सेट की अनुमति देकर आप अपने क्लस्टर तक पहुँच प्रदान कर सकते हैं। अनुमतियाँ एक विशिष्ट नेमस्पेस्स (भूमिका) या संपूर्ण क्लस्टर (ClusterRole) के लिए असाइन की जा सकती हैं। फिर रोलबाइंडिंग और क्लस्टररोलबाइंडिंग का उपयोग करके, उन अनुमतियों को विशेष उपयोगकर्ताओं से जोड़ा जा सकता है।
विशेषता-आधारित अभिगम नियंत्रण (ABAC): आपको क्लस्टर में संसाधन विशेषताओं के आधार पर नीतियां बनाने देता है और उन विशेषताओं के आधार पर पहुंच की अनुमति देगा या अस्वीकार करेगा। नीति फ़ाइल की प्रत्येक पंक्ति विषय (उपयोगकर्ता या समूह), संसाधन संपत्ति, गैर-संसाधन संपत्ति (/ संस्करण या / एपिस), और केवल पढ़ने के लिए संस्करण गुणों (एपीआई संस्करण और प्रकार) और विशिष्ट गुणों के मानचित्र की पहचान करती है। विवरण के लिए देखें उदाहरण।
जब कोई आपके उत्पादन कुबेरनेट्स क्लस्टर पर प्रमाणीकरण और प्राधिकरण सेटअप कर रहा हो, तो यहां कुछ बातों पर विचार करना चाहिए:
प्राधिकरण मोड सेट करें: जब कुबेरनेट्स एपीआई सर्वर
(kube-apiserver) शुरू होता है, समर्थित प्रमाणीकरण मोड को --authorization-mode फ़्लैग का उपयोग करके सेट किया जाना चाहिए। उदाहरण के लिए, kube-adminserver.yaml फ़ाइल में वह फ़्लैग (/etc/kubernetes/manifests में) नोड, आरबीएसी पर सेट किया जा सकता है। यह प्रमाणित अनुरोधों के लिए नोड और आरबीएसी प्राधिकरण की अनुमति देगा।
उपयोगकर्ता प्रमाणपत्र और रोल बाइंडिंग (RBAC) बनाएं: यदि आप आरबीएसी प्राधिकरण का उपयोग कर रहे हैं, तो उपयोगकर्ता एक सर्टिफिकेट साइनिंग रिक्वेस्ट (सीएसआर) बना सकते हैं जिस पर क्लस्टर सीए द्वारा हस्ताक्षर किए जा सकते हैं। फिर आप प्रत्येक उपयोगकर्ता के लिए रोल्स और क्लस्टररोल्स को बाध्य कर सकते हैं।
विवरण के लिए प्रमाणपत्र पर हस्ताक्षर करने के अनुरोध देखें।
ऐसी नीतियां बनाएं जो विशेषताओं को जोड़ती हैं (ABAC): यदि आप एबीएसी प्राधिकरण का उपयोग कर रहे हैं, तो आप चुनिंदा उपयोगकर्ताओं या समूहों को विशेष संसाधनों (जैसे पॉड), नेमस्पेस, या एपीग्रुप तक पहुंचने के लिए अधिकृत करने के लिए नीतियां बनाने के लिए विशेषताओं के संयोजन असाइन कर सकते हैं। अधिक जानकारी के लिए देखें उदाहरण।
प्रवेश नियंत्रकों पर विचार करें: एपीआई सर्वर के माध्यम से आने वाले अनुरोधों के लिए प्राधिकरण के अतिरिक्त रूपों में शामिल हैं
वेबहुक टोकन प्रमाणीकरण। वेबहुक और अन्य विशेष प्राधिकरण प्रकारों को एपीआई सर्वर में प्रवेश नियंत्रक जोड़कर सक्षम करने की आवश्यकता है।
कार्यभार संसाधनों पर सीमा निर्धारित करें
उत्पादन कार्यभार की मांग कुबेरनेट्स नियंत्रण विमान के अंदर और बाहर दोनों जगह दबाव पैदा कर सकती है। अपने क्लस्टर के वर्कलोड की जरूरतों के लिए सेट अप करते समय इन मदों पर विचार करें:
DNS मांग के लिए तैयार करें: यदि आप वर्कलोड के बड़े पैमाने पर बढ़ने की उम्मीद करते हैं, तो आपकी DNS सेवा भी बड़े पैमाने पर तैयार होनी चाहिए।
क्लस्टर में DNS सेवा को ऑटोस्केल करना देखें।
अतिरिक्त सेवा खाते बनाएं: उपयोगकर्ता खाते यह निर्धारित करते हैं कि उपयोगकर्ता क्लस्टर पर क्या कर सकते हैं, जबकि एक सेवा खाता किसी विशेष नेमस्पेस्स के भीतर पॉड एक्सेस को परिभाषित करता है। डिफ़ॉल्ट रूप से, एक पॉड अपने नेमस्पेस्स से डिफ़ॉल्ट सेवा खाता लेता है।
नया सेवा खाता बनाने के बारे में जानकारी के लिए सेवा खातों का प्रबंधन देखें।
उदाहरण के लिए, आप शायद यह करना चाहें:
ऐसे रहस्य जोड़ें जिनका उपयोग पॉड किसी विशेष कंटेनर रजिस्ट्री से इमेज खींचने के लिए कर सकता है। उदाहरण के लिए पॉड्स के लिए सेवा खाते कॉन्फ़िगर करें देखें।
किसी सेवा खाते में RBAC अनुमतियाँ असाइन करें। विवरण के लिए सेवा खाता अनुमतियां देखें।
यदि आप अपना स्वयं का क्लस्टर बनाना चुनते हैं, तो योजना बनाएं कि आप प्रमाणपत्र को कैसे संभालना चाहते हैं और etcd जैसी सुविधाओं के लिए उच्च उपलब्धता सेट करें।
और एपीआई सर्वर।
आपको क्लस्टर में प्रत्येक नोड में एक कंटेनर रनटाइम
इंस्टॉल करना होगा ताकि पॉड वहां चल सकें।
यह पृष्ठ बताता है कि क्या शामिल है और
नोड्स की स्थापना के लिए संबंधित कार्यों का वर्णन करता है।
कुबेरनेट्स 1.32 के लिए आवश्यक है कि आप एक रनटाइम का उपयोग करें जो
कंटेनर रनटाइम इंटरफ़ेस (CRI)
के अनुरूप है।
अन्य ऑपरेटिंग सिस्टम के लिए, अपने प्लेटफ़ॉर्म के अनुसार विशिष्ट प्रलेखन देखें।
Cgroup ड्राइवर
प्रक्रियाओं के लिए आवंटित संसाधनों को सीमित करने के लिए कंट्रोल ग्रुप का उपयोग किया जाता है।
जब Linux वातावरण के लिए init सिस्टम, systemd
को चुना जाता है, तब init प्रक्रिया रुट(root) control group (cgroup) उत्पन्न करती है और उपभोग करती है तथा cgroup मैनेजर की तरह काम करता है।
Systemd और cgroups एकीकृत हैं और प्रत्येक systemd यूनिट को एक cgroup आवंटित होता है। अपने कन्टैनर रनटाइम और kubelet को cgroupfs प्रयोग करने के लिए कॉन्फ़िगर करना संभव है। systemd के साथ cgroupfs प्रयोग करने के कारण दो अलग cgroup मैनेजर होंगे।
एक एकल cgroup प्रबंधक इस दृष्टिकोण को सरल बनाता है कि कौन से संसाधन आवंटित किए जा रहे हैं और डिफ़ॉल्ट रूप से उपलब्ध और उपयोग में आने वाले संसाधनों के बारे में अधिक सुसंगत दृश्य होगा।
जब एक सिस्टम पर दो cgroup मैनेजर होते हैं, तो आपको उन रिसोर्सेज के दो व्यू मिलते हैं। क्षेत्र में, लोगों ने ऐसे मामलों की सूचना दी है जहां नोड्स जो kubelet और डॉकर के लिए cgroupfs का उपयोग करने के लिए कॉन्फ़िगर किए गए हैं, लेकिन बाकी प्रक्रियाओं के लिए systemd संसाधन दबाव के कारण अस्थिर हो जाते हैं।
सेटिंग्स को इस तरह बदलना कि आपका कंटेनर रनटाइम और kubelet systemd का उपयोग करें क्योंकि cgroup ड्राइवर सिस्टम को स्थिर करता है। डॉकर के लिए इसे कॉन्फ़िगर करने के लिए, native.cgroupdriver=systemd सेट करें।
सावधान:
क्लस्टर में शामिल होने वाले नोड के cgroup ड्राइवर को बदलना एक संवेदनशील ऑपरेशन है। यदि kubelet ने एक सीग्रुप ड्राइवर के सिमेंटिक्स (semantics) का उपयोग करके पॉड्स बनाए हैं, तो कंटेनर रनटाइम को दूसरे सीग्रुप ड्राइवर में बदलने से मौजूदा पॉड्स के पॉड सैंडबॉक्स को फिर से बनाते समय त्रुटियां हो सकती हैं। kubelet को पुनरारंभ करने से ऐसी त्रुटियों का समाधान नहीं हो सकता है।
यदि आपके पास स्वचालन है जो इसे व्यवहार्य बनाता है, तो अद्यतन किए गए कॉन्फ़िगरेशन का उपयोग करके नोड को दूसरे के साथ बदलें, या स्वचालन का उपयोग करके इसे पुनर्स्थापित करें।
Cgroup v2
Cgroup v2, cgroup Linux API का अगला संस्करण है। Cgroup v1 से अलग, प्रत्येक कंट्रोलर के लिए एक अलग अनुक्रम के बजाय एक पदानुक्रम है।
नया संस्करण cgroup v1 पर कई सुधार प्रदान करता है, इनमें से कुछ सुधार हैं:
API का उपयोग करने का स्पष्ट और आसान तरीका
कंटेनरों के लिए सुरक्षित उप-वृक्ष प्रतिनिधिमंडल
प्रेशर स्टॉल की जानकारी जैसी नई सुविधाएँ
भले ही कर्नेल हाइब्रिड कॉन्फ़िगरेशन का समर्थन करता हो, जहां कुछ नियंत्रक cgroup v1 द्वारा प्रबंधित किए जाते हैं और कुछ अन्य cgroup v2 द्वारा, Kubernetes सभी नियंत्रकों को प्रबंधित करने के लिए केवल उसी cgroup संस्करण का समर्थन करता है।
यदि सिस्टमड (Systemd) डिफ़ॉल्ट रूप से cgroup v2 का उपयोग नहीं करता है, तो आप कर्नेल कमांड लाइन में systemd.unified_cgroup_hierarchy=1 जोड़कर सिस्टम को इसका उपयोग करने के लिए कॉन्फ़िगर कर सकते हैं।
# यह उदाहरण एक Linux OS के लिए है जो DNF पैकेज मैनेजर का उपयोग करता है# आपका सिस्टम कमांड लाइन सेट करने के लिए एक अलग विधि का उपयोग कर सकता है# लिनक्स कर्नेल का उपयोग करता है।sudo dnf install -y grubby &&\
sudo grubby \
--update-kernel=ALL \
--args="systemd.unified_cgroup_hierarchy=1"
यदि आप कर्नेल के लिए कमांड लाइन बदलते हैं, तो आपको अपने से पहले नोड को रिबूट करना होगा
परिवर्तन प्रभावी होता है।
Cgroup v2 में स्विच करते समय उपयोगकर्ता अनुभव में कोई उल्लेखनीय अंतर नहीं होना चाहिए, जब तक कि उपयोगकर्ता सीग्रुप फाइल सिस्टम को सीधे नोड पर या कंटेनरों के भीतर से एक्सेस कर रहे हैं।
इसका उपयोग करने के लिए, Cgroup v2 को CRI रनटाइम द्वारा भी सपोर्टेड (supported) होना चाहिए।
Kubeadm प्रबंधित क्लस्टर में systemd ड्राइवर में माइग्रेट करना
यदि आप मौजूदा kubeadm प्रबंधित क्लस्टर में systemd cgroup ड्राइवर में माइग्रेट करना चाहते हैं, तो माइग्रेशन गाइड का पालन करें।
CRI संस्करण समर्थन
आपके कंटेनर रनटाइम को कंटेनर रनटाइम इंटरफ़ेस के कम से कम v1alpha2 का समर्थन करना चाहिए।
कुबेरनेट्स 1.32 डिफ़ॉल्ट रूप से CRI API के v1 का उपयोग करता है।
यदि कंटेनर रनटाइम v1 API का समर्थन नहीं करता है, तो क्यूबलेट वापस आ जाता है
इसके बजाय (बहिष्कृत) v1alpha2 API का उपयोग करना।
कंटेनर रनटाइम
टिप्पणी: यह खंड अन्य पक्ष परियोजनाओं से जुड़ा है जो कुबेरनेट्स द्वारा आवश्यक कार्यक्षमता प्रदान करते हैं। कुबेरनेट्स परियोजना के लेखक इन परियोजनाओं के लिए जिम्मेदार नहीं हैं। यह पृष्ठ CNCF वेबसाइट दिशानिर्देश का अनुसरण करते हुए परियोजनाओं को वर्णानुक्रम में सूचीबद्ध करता है। इस सूची में कोई नई परियोजना जोड़ने से पहले यह विषय मार्गदर्शक पृष्ट पढ़के ही परिवर्तन करें।
कंटेनरडी
यह खंड कंटेनरडी को CRI रनटाइम के रूप में उपयोग करने के लिए आवश्यक कदम है।
अपने सिस्टम पर containerd इंस्टॉल करने के लिए निम्नलिखित कमांड का उपयोग करें:
पूर्वापेक्षाएँ इंस्टॉल और कॉन्फ़िगर करें:
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOFsudo modprobe overlay
sudo modprobe br_netfilter
# सेटअप आवश्यक sysctl params, ये रिबूट के दौरान बने रहते हैं।cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF# रिबूट के बिना sysctl params लागू करेंsudo sysctl --system
आधिकारिक डॉकर रिपॉजिटरी से containerd.io पैकेज इंस्टॉल करें। अपने संबंधित लिनक्स वितरण के लिए डॉकर रिपॉजिटरी इंस्टॉल करने और containerd.io पैकेज इंस्टॉल करने के निर्देश यहां देखे जा सकते हैं
डॉकर इंजन इंस्टॉल करें.
Copy-Item -Path ".\bin\" -Destination "$Env:ProgramFiles\containerd" -Recurse -Force
cd $Env:ProgramFiles\containerd\
.\containerd.exe config default | Out-File config.toml -Encoding ascii
# कॉन्फ़िगरेशन की समीक्षा करें। सेटअप के आधार पर आप समायोजित करना चाह सकते हैं:# - सैंडबॉक्स_इमेज (कुबेरनेट्स पॉज़ इमेज)# - cni bin_dir और conf_dir स्थानGet-Content config.toml
# (वैकल्पिक - लेकिन अत्यधिक अनुशंसित) विंडोज डिफेंडर स्कैन से कंटेनर को बाहर करेंAdd-MpPreference -ExclusionProcess "$Env:ProgramFiles\containerd\containerd.exe"
systemd cgroup ड्राइवर {#containerd-systemd} का उपयोग करना
runc के साथ /etc/containerd/config.toml में systemd cgroup ड्राइवर का उपयोग करने के लिए, सेट करें
यदि आप इस परिवर्तन को लागू करते हैं,तो सुनिश्चित करें कि आप फिर से कंटेनरडी को पुनरारंभ करें:
sudo systemctl restart containerd
जब आप kubeadm का उपयोग करें, मैन्युअल रूप से कॉन्फ़िगर करें
क्यूबलेट के लिए cgroup ड्राइवर मैन्युअल रूप से कॉन्फ़िगर करें।
CRI-O
इस खंड में CRI-O को कंटेनर रनटाइम के रूप में इंस्टॉल करने के लिए आवश्यक जानकारी है।
अपने सिस्टम पर CRI-O इंस्टॉल करने के लिए निम्नलिखित कमांड का उपयोग करें:
टिप्पणी:
CRI-O के प्रमुख और छोटे संस्करणों को Kubernetes के प्रमुख और छोटे संस्करणों से मेल खाना चाहिए।
अधिक जानकारी के लिए CRI-O compatibility matrix देखें।
पूर्वापेक्षाएँ इंस्टॉल और कॉन्फ़िगर करें:
# बूटअप पर मॉड्यूल लोड करने के लिए .conf फाइल बनाएंcat <<EOF | sudo tee /etc/modules-load.d/crio.conf
overlay
br_netfilter
EOFsudo modprobe overlay
sudo modprobe br_netfilter
# आवश्यक sysctl params सेट करें, ये रिबूट के दौरान बने रहते हैं।cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOFsudo sysctl --system
निम्नलिखित ऑपरेटिंग सिस्टम पर CRI-O स्थापित करने के लिए, एनवायरनमेंट वेरिएबलOS को निम्न तालिका से उपयुक्त मान पर सेट करें:
ऑपरेटिंग सिस्टम
$OS
Debian Unstable
Debian_Unstable
Debian Testing
Debian_Testing
फिर, सेट करें `$VERSION`CRI-O संस्करण में जो आपके Kubernetes संस्करण से मेल खाता है।
उदाहरण के लिए, यदि आप CRI-O 1.20 इंस्टॉल करना चाहते हैं, तो `VERSION=1.20` सेट करें।
आप अपनी स्थापना को किसी विशिष्ट रिलीज़ पर पिन कर सकते हैं।
संस्करण 1.20.0 स्थापित करने के लिए, `VERSION=1.20:1.20.0` सेट करें।
निम्नलिखित ऑपरेटिंग सिस्टम पर स्थापित करने के लिए, एनवायरनमेंट वेरिएबल OS सेट करें
निम्न तालिका में उपयुक्त फ़ील्ड के लिए:
ऑपरेटिंग सिस्टम
$OS
Ubuntu 20.04
xUbuntu_20.04
Ubuntu 19.10
xUbuntu_19.10
Ubuntu 19.04
xUbuntu_19.04
Ubuntu 18.04
xUbuntu_18.04
फिर, `$VERSION` को CRI-O संस्करण में सेट करें जो आपके Kubernetes संस्करण से मेल खाता हो।
उदाहरण के लिए, यदि आप CRI-O 1.20 इंस्टॉल करना चाहते हैं, तो `VERSION=1.20` सेट करें।
आप अपनी स्थापना को किसी विशिष्ट रिलीज़ पर पिन कर सपर पिन कर सकते हैं।
संस्करण 1.20.0 स्थापित करने के लिए, `VERSION=1.20:1.20.0` सेट करें।
निम्नलिखित ऑपरेटिंग सिस्टम पर स्थापित करने के लिए, एनवायरनमेंट वे वेरिएबल
OS सेट करें निम्न तालिका में उपयुक्त फ़ील्ड के लिए:
ऑपरेटिंग सिस्टम
$OS
Centos 8
CentOS_8
Centos 8 Stream
CentOS_8_Stream
Centos 7
CentOS_7
फिर, `$VERSION` को CRI-O संस्करण में सेट करें जो आपके Kubernetes संस्करण से मेल खाता हो।
उदाहरण के लिए, यदि आप CRI-O 1.20 इंस्टॉल करना चाहते हैं, तो `VERSION=1.20` सेट करें।
आप अपनी स्थापना को किसी विशिष्ट रिलीज़ पर पिन कर सकते हैं।
संस्करण 1.20.0 स्थापित करने के लिए, `VERSION=1.20:1.20.0` सेट करें।
$VERSION को CRI-O संस्करण में सेट करें जो आपके Kubernetes संस्करण से मेल खाता हो।
उदाहरण के लिए, यदि आप CRI-O 1.20, VERSION=1.20 स्थापित करना चाहते हैं।
आप इसके साथ उपलब्ध संस्करण पा सकते हैं:
sudo dnf module list cri-o
CRI-O फेडोरा पर विशिष्ट रिलीज के लिए पिनिंग का समर्थन नहीं करता है।
CRI-O डिफ़ॉल्ट रूप से systemd cgroup ड्राइवर का उपयोग करता है।
cgroupfs cgroup ड्राइवर पर स्विच करने के लिए, या तो /etc/crio/crio.conf संपादित करें या /etc/crio/crio.conf.d/02-cgroup-manager.conf में ड्रॉप-इन कॉन्फ़िगरेशन रखें। उदाहरण के लिए:
कृपया बदले हुए conmon_cgroup पर भी ध्यान दें, जिसे cgroupfs के साथ CRI-O का उपयोग करते समय पॉड मान पर सेट करना होगा।
आमतौर पर क्यूबलेट के cgroup ड्राइवर कॉन्फ़िगरेशन (आमतौर पर kubeadm के माध्यम से किया जाता है) और CRI-O को सिंक में रखना आवश्यक है।
डॉकर इंजन
डॉकर इंजन कंटेनर रनटाइम है जिसने यह सब शुरू किया। पूर्व में सिर्फ डॉकर के रूप में जाना जाता था,यह कंटेनर रनटाइम विभिन्न रूपों में उपलब्ध है। डॉकर इंजन इंस्टॉल करें आपके विकल्पों की व्याख्या करता है
इस रनटाइम को इंस्टॉल करने के लिए।
डॉकर इंजन कुबेरनेट्स 1.32 के साथ सीधे संगत है, जो कि बहिष्कृत dockershim घटक का उपयोग करता है। अधिक जानकारी के लिए
और संदर्भ, Dockershim deprecation FAQ देखें।
आप तृतीय-पक्ष एडेप्टर भी पा सकते हैं जो आपको कुबेरनेट्स के साथ डॉकर इंजन का उपयोग करने देता है, समर्थित Container Runtime Interface के माध्यम से
(CRI)।
निम्नलिखित CRI एडेप्टर डॉकर इंजन के साथ काम करने के लिए डिज़ाइन किए गए हैं:
Mirantis Container Runtime (MCR) एक व्यावसायिक रूप से है उपलब्ध कंटेनर रनटाइम जिसे पहले डॉकर एंटरप्राइज एडिशन के नाम से जाना जाता था।
आप खुले स्रोत का उपयोग करके कुबेरनेट्स के साथ मिरांटिस कंटेनर रनटाइम का उपयोग कर सकते हैं cri-dockerd घटक, MCR के साथ शामिल है।
2.2.2 - Turnkey Cloud Solutions
यह पृष्ठ कुबेरनेट्स प्रमाणित समाधान प्रदाताओं की एक सूची प्रदान करता है। हर एक प्रदाता पृष्ठ से आप सीख सकते हैं कि उत्पादन योग्य क्लस्टर को इंस्टॉल और सेटअप कैसे करें।
2.2.3 - परिनियोजन टूल के साथ कुबेरनेट्स स्थापित करे
अपना स्वयं का प्रोडक्शन कुबेरनेट्स क्लस्टर स्थापित करने के लिए कई विधियाँ और उपकरण है। उदाहरण के लिए:
kops: एक स्वचालित क्लस्टर प्रावधान उपकरण। ट्यूटोरियल, सर्वोत्तम प्रथाओं, कॉन्फ़िगरेशन विकल्पों और समुदाय तक पहुंचने की जानकारी के लिए, कृपया kOps वेबसाइट देखें।
kubespray: सामान्य OS/कुबेरनेट्स क्लस्टर कॉन्फ़िगरेशन प्रबंधन कार्यों के लिए अन्सिबल प्लेबुकस, इन्वेंट्री, प्रोविजनिंग टूल और डोमेन ज्ञान की एक संरचना। आप स्लैक चैनल #kubespray पर समुदाय को संपर्क कर सकते है।
2.2.4 - कुबेरनेट्स में Windows
2.3 - उत्तम प्रथाएं
3 - अवधारणाएँ
अवधारणा अनुभाग आपको कुबेरनेट्स प्रणाली के हिस्सों के बारे में जानने में मदद करता है जिसका उपयोग कुबेरनेट्स आपके क्लस्टर का प्रतिनिधित्व करने के लिए करता है, और कुबेरनेट्स कार्यप्रणाली की गहरी समझ प्राप्त करने में आपकी मदद करता है।
3.1 - अवलोकन
कुबेरनेट्स कंटेनरीकृत वर्कलोड और सेवाओं के प्रबंधन के लिए एक पोर्टेबल, एक्स्टेंसिबल, ओपन-सोर्स प्लेटफॉर्म है, जो घोषणात्मक कॉन्फ़िगरेशन और स्वचालन दोनों की सुविधा प्रदान करता है। इसका एक बड़ा, तेजी से बढ़ता हुआ पारिस्थितिकी तंत्र है। कुबेरनेट्स सेवाएँ, समर्थन और उपकरण व्यापक रूप से उपलब्ध हैं।
यह पृष्ठ कुबेरनेट्स का एक अवलोकन है।
कुबेरनेट्स कंटेनरीकृत वर्कलोड और सेवाओं के प्रबंधन के लिए एक पोर्टेबल, एक्स्टेंसिबल, ओपन-सोर्स प्लेटफॉर्म है, जो घोषणात्मक कॉन्फ़िगरेशन और स्वचालन दोनों की सुविधा प्रदान करता है। इसका एक बड़ा, तेजी से बढ़ता हुआ पारिस्थितिकी तंत्र है। कुबेरनेट्स सेवाएँ, समर्थन और उपकरण व्यापक रूप से उपलब्ध हैं।
कुबेरनेट्स नाम ग्रीक से उत्पन्न हुआ है, जिसका अर्थ है हेल्समैन या पायलट।
K8s एक संक्षिप्त नाम के रूप में "K" और "s" के बीच आठ अक्षरों को गिनने का परिणाम है। Google ने 2014 में कुबेरनेट्स प्रोजेक्ट को ओपन-सोर्स किया। कुबेरनेट्स गूगल के 15 से अधिक वर्षों के अनुभव को समुदाय से सर्वोत्तम नस्ल के विचारों और प्रथाओं के साथ बड़े पैमाने पर उत्पादन कार्यभार को जोड़ती है।
काल में वापस जाना
आइए काल में वापस जाकर एक नज़र डालते हैं कि कुबेरनेट्स इतना उपयोगी क्यों है।
पारंपरिक डिप्लॉयमेंट युग:
प्रारंभ में, संगठनों ने भौतिक (physical) सर्वरों पर एप्लिकेशन चलाए। भौतिक (physical) सर्वर में एप्लिकेशनो के लिए संसाधन सीमाओं को परिभाषित करने का कोई तरीका नहीं था, और इससे संसाधन आवंटन समस्याएं उत्पन्न हुईं। उदाहरण के लिए, यदि एक से अधिक एप्लिकेशने एक भौतिक सर्वर पर चलते हैं, तो ऐसे उदाहरण हो सकते हैं जहां एक एप्लिकेशन अधिकांश संसाधनों को ले लेगा, और इसके परिणामस्वरूप, अन्य एप्लिकेशने खराब प्रदर्शन करेंगे। इसका एक समाधान यह होगा कि प्रत्येक एप्लिकेशन को एक अलग भौतिक सर्वर पर चलाया जाए। लेकिन यह पैमाना नहीं था क्योंकि संसाधनों का कम उपयोग किया गया था, और संगठनों के लिए कई भौतिक सर्वरों को बनाए रखना महंगा था।
वर्चुअलाइज्ड डिप्लॉयमेंट युग: एक समाधान के रूप में, वर्चुअलाइजेशन पेश किया गया था। यह आपको एक भौतिक सर्वर के सीपीयू (CPU) पर कई वर्चुअल मशीन (वीएम) चलाने की अनुमति देता है। वर्चुअलाइजेशन एप्लिकेशनो को वीएम (VM) के बीच अलग-थलग करने की अनुमति देता है और सुरक्षा का एक स्तर प्रदान करता है क्योंकि एक एप्लिकेशन की जानकारी को दूसरे एप्लिकेशन द्वारा स्वतंत्र रूप से एक्सेस नहीं किया जा सकता है।
वर्चुअलाइजेशन एक भौतिक सर्वर में संसाधनों के बेहतर उपयोग की अनुमति देता है और बेहतर मापनीयता की अनुमति देता है क्योंकि एक एप्लिकेशन को आसानी से जोड़ा या अपडेट किया जा सकता है, हार्डवेयर लागत को कम करता है, और बहुत कुछ। वर्चुअलाइजेशन के साथ आप भौतिक संसाधनों का एक सेट डिस्पोजेबल वर्चुअल मशीनों के समूह के रूप में प्रस्तुत कर सकते हैं।
प्रत्येक वीएम वर्चुअलाइज्ड हार्डवेयर के शीर्ष पर अपने स्वयं के ऑपरेटिंग सिस्टम सहित सभी घटकों को चलाने वाली एक पूर्ण मशीन है।
कंटेनर डिप्लॉयमेंट युग: कंटेनर VMs के समान होते हैं, लेकिन उनके पास एप्लिकेशनो के बीच ऑपरेटिंग सिस्टम (OS) को साझा करने के लिए अलगाव गुण होते हैं। इसलिए, कंटेनरों को हल्का माना जाता है। वीएम (VM) के समान, एक कंटेनर का अपना फाइल सिस्टम, सीपीयू का हिस्सा, मेमोरी, प्रोसेस स्पेस और बहुत कुछ होता है। चूंकि वे अंतर्निहित बुनियादी ढांचे से अलग हो गए हैं, वे बादलों और ओएस (OS) वितरण में पोर्टेबल हैं।
कंटेनर लोकप्रिय हो गए हैं क्योंकि वे अतिरिक्त लाभ प्रदान करते हैं, जैसे:
अजाइल (Agile) एप्लिकेशन निर्माण और डिप्लॉयमेंट: VM इमेज उपयोग की तुलना में कंटेनर इमेज निर्माण की आसानी और दक्षता में वृद्धि हुई है।
निरंतर विकास, एकीकरण और डिप्लॉयमेंट: विश्वसनीय और लगातार कंटेनर इमेज निर्माण और त्वरित और कुशल रोलबैक के साथ तैनाती (इमेज अपरिवर्तनीयता के कारण) प्रदान करता है।
डेव (Dev) और ऑप्स (Ops) चिंताओं का पृथक्करण: डिप्लॉयमेंट समय के बजाय बिल्ड/रिलीज़ समय पर एप्लिकेशन कंटेनर इमेजेस (images) बनाएं, जिससे बुनियादी ढांचे से एप्लिकेशनो को अलग किया जा सके।
अवलोकन: न केवल ओएस-स्तर की जानकारी और मेट्रिक्स को सतह पर रखता है, बल्कि एप्लिकेशन स्वास्थ्य और अन्य संकेतों को भी लागू करता है।
विकास, परीक्षण और उत्पादन में पर्यावरणीय स्थिरता: लैपटॉप पर वैसे ही चलता है जैसे क्लाउड में चलता है।
क्लाउड और ओएस (OS) वितरण पोर्टेबिलिटी: उबंटू, RHEL, coreOS, ऑन-प्रिमाइसेस, प्रमुख सार्वजनिक क्लाउड पर और कहीं भी चलता है।
एप्लिकेशन-केंद्रित प्रबंधन: वर्चुअल हार्डवेयर पर OS चलाने से लेकर तार्किक संसाधनों का उपयोग करके OS पर एप्लिकेशन चलाने तक अमूर्तता के स्तर को बढ़ाता है ।
शिथिल युग्मित, वितरित, लोचदार, मुक्त सूक्ष्म सेवाएँ: एप्लिकेशन को छोटे, स्वतंत्र टुकड़ों में तोड़ा जाता है और उन्हें गतिशील रूप से तैनात और प्रबंधित किया जा सकता है - एक बड़ी एकल-उद्देश्य वाली मशीन पर चलने वाला एक मोनोलिथिक स्टैक नहीं।
संसाधन अलगाव: अनुमानित एप्लिकेशन प्रदर्शन।
संसाधन उपयोग: उच्च दक्षता और घनत्व।
आपको कुबेरनेट्स की आवश्यकता क्यों है और यह क्या कर सकता है
कंटेनर आपके एप्लिकेशनो को बंडल करने और चलाने का एक अच्छा तरीका है। उत्पादन के माहौल में, आप को उन कंटेनरों को प्रबंधित करने की आवश्यकता होती है जो एप्लिकेशने चलाते हैं और सुनिश्चित करते हैं कि कोई डाउनटाइम नहीं है। उदाहरण के लिए, यदि एक कंटेनर बंद हो जाता है, तो दूसरे कंटेनर को शुरू करने की आवश्यकता होती है। क्या यह आसान नहीं होगा यदि इस व्यवहार को एक प्रणाली द्वारा नियंत्रित किया जा सके ?
इस तरह कुबेरनेट्स बचाव के लिए आता है! कुबेरनेट्स आपको वितरित सिस्टम को लचीलेपन से चलाने के लिए एक ढांचा प्रदान करता है। यह आपके एप्लिकेशन के लिए स्केलिंग और फेलओवर का ख्याल रखता है, डिप्लॉयमेंट पैटर्न प्रदान करता है, और भी बहुत कुछ। उदाहरण के लिए, कुबेरनेट्स आपके सिस्टम के लिए कैनरी डिप्लॉयमेंट को आसानी से प्रबंधित कर सकता है।
कुबेरनेट्स आपको प्रदान करता है:
सेवा की खोज और लोड संतुलन
कुबेरनेट्स DNS नाम का उपयोग करके या अपने स्वयं के आईपी (IP) पते का उपयोग करके एक कंटेनर को उजागर कर सकता हैं। यदि एक कंटेनर में ट्रैफ़िक अधिक है, तो कुबेरनेट्स लोड बैलेंस करने और नेटवर्क ट्रैफ़िक को वितरित करने में सक्षम है ताकि डिप्लॉयमेंट स्थिर हो।
स्टोरेज ऑर्केस्ट्रेशन
कुबेरनेट्स आपको अपनी पसंद के स्टोरेज सिस्टम को स्वचालित रूप से माउंट करने की अनुमति देता है, जैसे कि स्थानीय स्टोरेज, पब्लिक क्लाउड प्रोवाइडर, और बहुत कुछ।
स्वचालित रोलआउट और रोलबैक
आप कुबेरनेट्स का उपयोग करके अपने तैनात कंटेनरों के लिए वांछित स्थिति का वर्णन कर सकते हैं, और यह वास्तविक स्थिति को नियंत्रित दर पर वांछित स्थिति में बदल सकता है। उदाहरण के लिए, आप अपने डिप्लॉयमेंट के लिए नए कंटेनर बनाने के लिए कुबेरनेट्स को स्वचालित कर सकते हैं, मौजूदा कंटेनरों को हटा सकते हैं और उनके सभी संसाधनों को नए कंटेनर में अपना सकते हैं।
**स्वचालित बिन पैकिंग **
आप कुबेरनेट्स को नोड्स के एक समूह के साथ प्रदान करते हैं जिसका उपयोग वह कंटेनरीकृत कार्यों को चलाने के लिए कर सकता है। आप कुबेरनेट्स को बताते हैं कि प्रत्येक कंटेनर को कितना सीपीयू और मेमोरी (रैम) चाहिए। कुबेरनेट्स आपके संसाधनों का सर्वोत्तम उपयोग करने के लिए कंटेनरों को आपके नोड्स में फिट कर सकता है।
सेल्फ-हीलिंग
कुबेरनेट्स विफल कंटेनरों को फिर से शुरू करता है, कंटेनरों को बदल देता है, उन कंटेनरों को नष्ट कर देता है जो आपकी उपयोगकर्ता-परिभाषित स्वास्थ्य जांच का जवाब नहीं देते हैं, और जब तक वे सेवा के लिए तैयार नहीं होते हैं, तब तक ग्राहकों को उनका विज्ञापन नहीं करते हैं।
सीक्रेट और कॉन्फ़िगरेशन प्रबंधन
कुबेरनेट्स आपको पासवर्ड, OAuth टोकन और SSH कुंजियों जैसी संवेदनशील जानकारी को संग्रहीत और प्रबंधित करने देता है। आप अपनी कंटेनर इमेजेस (images) के पुनर्निर्माण के बिना, और अपने स्टैक कॉन्फ़िगरेशन में रहस्यों को उजागर किए बिना रहस्यों और एप्लिकेशन कॉन्फ़िगरेशन को तैनात और अपडेट कर सकते हैं।
कुबेरनेट्स क्या नहीं है :
कुबेरनेट्स एक पारंपरिक, सर्व-समावेशी PaaS (एक सेवा के रूप में प्लेटफ़ॉर्म) प्रणाली नहीं है। चूंकि कुबेरनेट्स हार्डवेयर स्तर के बजाय कंटेनर स्तर पर काम करता है, यह कुछ सामान्य रूप से लागू सुविधाओं को प्रदान करता है, जैसे कि तैनाती, स्केलिंग, लोड बैलेंसिंग, और उपयोगकर्ताओं को उनके लॉगिंग, निगरानी और अलर्ट समाधान को एकीकृत करने देता है। हालाँकि, कुबेरनेट्स मोनोलिथिक नहीं है, और ये डिफ़ॉल्ट समाधान वैकल्पिक और प्लग करने योग्य हैं। कुबेरनेट्स डेवलपर प्लेटफॉर्म के निर्माण के लिए बिल्डिंग ब्लॉक्स प्रदान करता है, लेकिन जहां यह महत्वपूर्ण है वहां उपयोगकर्ता की पसंद और लचीलेपन को बरकरार रखता है।
कुबेरनेट्स:
समर्थित एप्लिकेशनो के प्रकारों को सीमित नहीं करता है। कुबेरनेट्स का उद्देश्य स्टेटलेस, स्टेटफुल और डेटा-प्रोसेसिंग वर्कलोड सहित अत्यंत विविध प्रकार के वर्कलोड का समर्थन करना है। यदि कोई एप्लिकेशन कंटेनर में चल सकता है, तो उसे कुबेरनेट्स पर बहुत अच्छा चलना चाहिए।
स्रोत कोड डेप्लॉय नहीं करता है और आपके एप्लिकेशन का निर्माण नहीं करता है। कंटीन्यूअस इंटीग्रेशन, डिलीवरी और डिप्लॉयमेंट(CI/CD) कार्यप्रवाह संगठन संस्कृतियों और प्राथमिकताओं के साथ-साथ तकनीकी आवश्यकताओं द्वारा निर्धारित किए जाते हैं।
एप्लिकेशन-स्तरीय सेवाएं प्रदान नहीं करता है, जैसे कि मिडलवेयर (उदाहरण के लिए, message buses), डेटा-प्रोसेसिंग फ्रेमवर्क (उदाहरण के लिए, spark), डेटाबेस (उदाहरण के लिए, MySQL), कैश, और न ही क्लस्टर स्टोरेज सिस्टम (उदाहरण के लिए, Ceph) अंतर्निहित सेवाओं के रूप में। ऐसे घटक कुबेरनेट्स पर चल सकते हैं, और/या ओपन सर्विस ब्रोकर जैसे पोर्टेबल तंत्र के माध्यम से कुबेरनेट्स पर चल रहे एप्लिकेशनो द्वारा एक्सेस किए जा सकते हैं।
लॉगिंग, मॉनिटरिंग या अलर्टिंग सॉल्यूशंस को निर्देशित नहीं करता है। यह अवधारणा के प्रमाण के रूप में कुछ एकीकरण प्रदान करता है, और मेट्रिक्स एकत्र करने और निर्यात करने के लिए तंत्र प्रदान करता है।
कॉन्फ़िगरेशन भाषा/सिस्टम (उदाहरण के लिए, Jsonnet) प्रदान नहीं करता है और न ही अनिवार्य करता है। यह एक घोषणात्मक API प्रदान करता है जिसे घोषणात्मक विनिर्देशों के मनमाने रूपों द्वारा लक्षित किया जा सकता है।
कोई व्यापक मशीन कॉन्फ़िगरेशन, रखरखाव, प्रबंधन, या स्वयं-उपचार प्रणाली प्रदान नहीं करता है और न ही अपनाता है।
इसके अतिरिक्त, कुबेरनेट्स केवल एक ऑर्केस्ट्रेशन प्रणाली नहीं है। वास्तव में, यह ऑर्केस्ट्रेशन की आवश्यकता को समाप्त करता है। ऑर्केस्ट्रेशन की तकनीकी परिभाषा एक परिभाषित वर्कफ़्लो का निष्पादन है: पहले ए (A) करें, फिर बी (B), फिर सी (C)। इसके विपरीत, कुबेरनेट्स में स्वतंत्र, कंपोज़ेबल नियंत्रण प्रक्रियाओं का एक सेट शामिल है जो वर्तमान स्थिति को प्रदान की गई वांछित स्थिति की ओर लगातार चलता है। इससे कोई फर्क नहीं पड़ता कि आप ए से सी कैसे प्राप्त करते हैं। केंद्रीकृत नियंत्रण की भी आवश्यकता नहीं है। इसका परिणाम एक ऐसी प्रणाली में होता है जो उपयोग में आसान और अधिक शक्तिशाली, मजबूत, लचीला और एक्स्टेंसिबल है।
कुबेरनेट्स प्रलेखन के इस खंड के पृष्ठ एकल कार्य करने का तरीका दिखाते हैं। आमतौर पर, कार्य पृष्ठ दिखाता है कि किसी एक काम को कई छोटे चरणों में विभाजित करके कैसे करना है।
kind की तरह, minikube एक उपकरण
है जो आपको स्थानीय स्तर पर कुबेरनेट्स चलाने देता है। minikube आपके कंप्यूटर
(windows, macOS और linux पीसी सहित) पर सिंगल-नोड कुबेरनेट्स क्लस्टर चलाता
है ताकि आप कुबेरनेट्स सीख सकें या डेवलपमेंट कर सकें।
यदि आपका ध्यान उपकरण को इंस्टॉल करने पर है तो आप मुख्य
आरंभ करें!
गाइड का अनुसरण कर सकते हैं।
एक बार जब आपके पास minikube काम कर रहा हो,
तो आप इसका उपयोग नमूना एप्लिकेशन
चलाने के लिए कर सकते हैं।
kubeadm
कुबेरनेट्स क्लस्टर बनाने और प्रबंधित करने के लिए आप kubeadm टूल का उपयोग कर सकते हैं।
यह उपयोगकर्ता के अनुकूल तरीके से न्यूनतम व्यवहार्य, सुरक्षित क्लस्टर बनाने और चलाने के लिए आवश्यक कार्य करता है।
kubeadm इंस्टॉल करना आपको दिखाता है कि kubeadm को कैसे इंस्टॉल किया जाए।
एक बार इंस्टॉल होने के बाद, आप इसका उपयोग क्लस्टर बनाने के लिए कर सकते हैं।
आप kubectl संस्करण का उपयोग करे जो आपके क्लस्टर के एक माइनर संस्करण के भीतर हो। उदाहरण के लिए, v1.32 क्लाइंट v1.31, v1.32 और v1.33 कण्ट्रोल प्लेन के साथ संवाद कर सकते हैं।
kubectl के नवीनतम संस्करण का उपयोग करने से अप्रत्याशित मुद्दों से बचने में मदद मिलती है।
Linux पर kubectl इंस्टॉल करें
Linux पर kubectl संस्थापित करने के लिए निम्नलिखित विधियाँ मौजूद हैं:
यदि आप Ubuntu या किसी अन्य Linux डिस्ट्रीब्यूशन पर हैं जो snap पैकेज मैनेजर को सपोर्ट करता है, तो kubectl snap एप्लिकेशन के रूप में उपलब्ध है।
snap install kubectl --classic
kubectl version --client
यदि आप Linux पर Homebrew पैकेज मैनेजर का उपयोग कर रहे हैं, तो kubectl इंस्टालेशन के लिए उपलब्ध है।
brew install kubectl
kubectl version --client
kubectl कॉन्फ़िगरेशन सत्यापित करें
kubectl को कुबेरनेट्स क्लस्टर को खोजने और एक्सेस करने के लिए, उसे
क्यूबकॉन्फिग फाइल(kubeconfig) की आवश्यकता होती है,
जो स्वचालित रूप से तब बनता है जब आप
kube-up.sh का उपयोग करके क्लस्टर बनाते हैं
या मिनीक्यूब क्लस्टर को सफलतापूर्वक डिप्लॉय करते हैं।
डिफ़ॉल्ट रूप से, kubectl कॉन्फ़िगरेशन ~/.kube/config पर स्थित होता है।
जाँच करें कि क्लस्टर स्टेट प्राप्त करके kubectl को ठीक से कॉन्फ़िगर किया गया है:
kubectl cluster-info
यदि आपको एक URL प्रतिक्रिया दिखती हैं, तो kubectl आपके क्लस्टर तक पहुँचने के लिए सही ढंग से कॉन्फ़िगर हुआ है।
यदि आपको निम्नलिखित संदेश दिखाई देता है, तो kubectl ठीक से कॉन्फ़िगर नहीं हुआ है या कुबेरनेट्स क्लस्टर से कनेक्ट करने में सक्षम नहीं है।
The connection to the server <server-name:port> was refused - did you specify the right host or port?
उदाहरण के लिए, यदि आप अपने लैपटॉप (स्थानीय रूप से) पर कुबेरनेट्स क्लस्टर चलाना चाहते हैं, तो आपको पहले मिनीक्यूब (minikube) जैसे टूल को इंस्टॉल करना होगा और ऊपर बताए गए कमांड को फिर से चलाना होगा।
यदि kubectl cluster-info URL प्रतिक्रिया देता है, लेकिन आप अपने क्लस्टर को एक्सेस नहीं कर पा रहें हैं, तो यह जाँचने के लिए कि क्या यह ठीक से कॉन्फ़िगर किया गया है, इस कमांड का उपयोग करें:
kubectl cluster-info dump
वैकल्पिक kubectl कॉन्फ़िगरेशन और प्लगइन्स
शेल ऑटोकम्प्लेशन सक्षम करें
kubectl Bash और Zsh के लिए ऑटोकम्प्लेशन का सपोर्ट प्रदान करता है, जो आपका काफी समय बचा सकता है।
नीचे Bash और Zsh के लिए ऑटोकम्प्लेशन स्थापित करने की प्रक्रियाएँ हैं।
Bash के लिए kubectl समापन स्क्रिप्ट kubectl completion bash कमांड के साथ उत्पन्न की जा सकती है। आपके शेल में समापन स्क्रिप्ट को सोर्स करने से kubectl ऑटोकम्पलीशन सक्षम हो जाती है।
हालाँकि, समापन की स्क्रिप्ट bash-completion पर निर्भर हैं जिसका अर्थ है कि आपको पहले इस सॉफ़्टवेयर को इंस्टॉल करना होगा (आप type _init_completion चलाकर परीक्षण कर सकते हैं कि आपने पहले से bash-completion इंस्टॉल की है या नहीं)।
Bash-completion को इंस्टॉल करें
कई पैकेज मैनेजर द्वारा bash-completion प्रदान की जाती है (यहाँ देखें)। आप इसे apt-get install bash-completion या yum install bash-completion आदि के साथ इंस्टॉल कर सकते हैं।
यह कमांड /usr/share/bash-completion/bash_completion उत्त्पन्न करता है, जो bash-completion की मुख्य स्क्रिप्ट है। आपके पैकेज मैनेजर के आधार पर, आपको इस फाइल को अपनी ~/.bashrc फाइल में मैन्युअल रूप से सोर्स करना होगा।
यह पता लगाने के लिए, अपना शेल पुनः लोड करें और type _init_completion रन करे। यदि कमांड सफल होता है, तो आप पहले से ही तैयार हैं, अन्यथा अपनी ~/.bashrc फ़ाइल में निम्नलिखित जोड़ें:
source /usr/share/bash-completion/bash_completion
अपना शेल पुनः लोड करें और type _init_completion टाइप करके सत्यापित करें कि बैश-कम्पलीशन सही ढंग से इंस्टॉल है।
kubectl ऑटोकम्पलीशन सक्षम करे
अब आपको यह सुनिश्चित करने की आवश्यकता है कि kubectl समापन स्क्रिप्ट आपके सभी शेल सत्रों (sourced) में प्राप्त हो जाए। आप ऐसा दो तरीकों से कर सकते हैं:
अपनी ~/.bashrc फ़ाइल में समापन स्क्रिप्ट सॉर्स करें:
समापन स्क्रिप्ट को /etc/bash_completion.d डायरेक्टरी में जोड़ें:
bash kubectl completion bash >/etc/bash_completion.d/kubectl
यदि आप के पास kubectl के लिए एक अन्य नाम (alias) है, तो आप उस अन्य नाम के साथ काम करने के लिए शेल समापन को बढ़ा सकते हैं:
echo'alias k=kubectl' >>~/.bashrc
echo'complete -F __start_kubectl k' >>~/.bashrc
टिप्पणी:
bash-completion सभी समापन स्क्रिप्ट को /etc/bash_completion.d में सोर्स करता है।
दोनों दृष्टिकोण बराबर हैं। आपके शेल को पुनः लोड करने के बाद, Kubectl ऑटोकम्पलीशन कार्य करना शुरू कर देगा।
Zsh के लिए kubectl कम्पलीशन स्क्रिप्ट kubectl completion zsh कमांड के साथ उत्पन्न की जा सकती है। आपके शेल में कम्पलीशन स्क्रिप्ट को सोर्स करने से kubectl ऑटो-कम्पलीशन सक्षम हो जाती है।
अपने सभी शेल सत्रों में ऐसा करने के लिए, निम्नलिखित को अपनी ~/.zshrc फ़ाइल में जोड़ें:
source <(kubectl completion zsh)
यदि आपके पास kubectl के लिए एक उपनाम है, तो आप उस उपनाम के साथ काम करने के लिए शेल कम्पलीशन को बढ़ा सकते हैं:
echo'alias k=kubectl' >>~/.zshrc
echo'complete -F __start_kubectl k' >>~/.zshrc
अपने शेल को पुनः लोड करने के बाद, kubectl ऑटो-कम्पलीशन कार्य करना चाहिए।
यदि आपको कोई त्रुटि मिलती है जैसे complete:13: command not found: compdef, तो अपनी ~/.zshrc फ़ाइल की शुरुआत में निम्नलिखित जोड़ें:
autoload -Uz compinit
compinit
kubectl convert प्लगइन इंस्टॉल करें
कुबेरनेट्स कमांड-लाइन टूल kubectl के लिए एक प्लगइन, जो आपको विभिन्न API संस्करण के बीच मैनिफ़ेस्ट को बदलने करने की अनुमति देता है।
यह विशेष रूप से नए कुबेरनेट्स रिलीज के साथ एक गैर-बहिष्कृत API संस्करण में मैनिफेस्ट को माइग्रेट करने में सहायक हो सकता है।
अधिक जानकारी के लिए, गैर पदावनत एपिस में विस्थापित करें पर जाएं।
आप kubectl संस्करण का उपयोग करे जो आपके क्लस्टर के एक माइनर संस्करण भीतर हो। उदाहरण के लिए, v1.32 क्लाइंट v1.31, v1.32 और v1.33 कण्ट्रोल प्लेन के साथ कम्युनिकेट कर सकते हैं।
kubectl के नए संस्करण का उपयोग करने से समस्या से बचत हो सकती है।
macOS पर kubectl इंस्टॉल करें
macOS पर kubectl संस्थापित करने के लिए निम्नलिखित विधियाँ मौजूद हैं:
सुनिश्चित करें कि /usr/local/bin आपके पाथ एनवायरनमेंट वेरिएबल में है।
यह सुनिश्चित करने के लिए परीक्षण करें कि आपके द्वारा इंस्टॉल किया गया संस्करण उप-टू-डेट है:
kubectl version --client
Homebrew के माध्यम से macOS पर इंस्टॉल करें
यदि आप macOS पर हैं और Homebrew पैकेज मैनेजर का उपयोग कर रहे हैं, आप Homebrew के साथ kubectl इंस्टॉल कर सकते हैं।
इंस्टालेशन कमांड रन करें:
brew install kubectl
या
brew install kubernetes-cli
यह सुनिश्चित करने के लिए परीक्षण करें कि आपके द्वारा इंस्टॉल किया गया संस्करण उप-टू-डेट है:
kubectl version --client
Macports के माध्यम से macOS पर इंस्टॉल करें
यदि आप macOS पर हैं और Macports पैकेज मैनेजर का उपयोग कर रहे हैं, आप Macports के साथ kubectl इंस्टॉल कर सकते हैं।
इंस्टालेशन कमांड रन करें:
sudo port selfupdate
sudo port install kubectl
यह सुनिश्चित करने के लिए परीक्षण करें कि आपके द्वारा इंस्टॉल किया गया संस्करण उप-टू-डेट है:
kubectl version --client
kubectl कॉन्फ़िगरेशन सत्यापित करें
kubectl को कुबेरनेट्स क्लस्टर को खोजने और एक्सेस करने के लिए, उसे
क्यूबकॉन्फिग फाइल(kubeconfig) की आवश्यकता होती है,
जो स्वचालित रूप से तब बनता है जब आप
kube-up.sh का उपयोग करके क्लस्टर बनाते हैं
या मिनीक्यूब क्लस्टर को सफलतापूर्वक डिप्लॉय करते हैं।
डिफ़ॉल्ट रूप से, kubectl कॉन्फ़िगरेशन ~/.kube/config पर स्थित होता है।
जाँच करें कि क्लस्टर स्टेट प्राप्त करके kubectl को ठीक से कॉन्फ़िगर किया गया है:
kubectl cluster-info
यदि आपको एक URL प्रतिक्रिया दिखती हैं, तो kubectl आपके क्लस्टर तक पहुँचने के लिए सही ढंग से कॉन्फ़िगर हुआ है।
यदि आपको निम्नलिखित संदेश दिखाई देता है, तो kubectl ठीक से कॉन्फ़िगर नहीं हुआ है या कुबेरनेट्स क्लस्टर से कनेक्ट करने में सक्षम नहीं है।
The connection to the server <server-name:port> was refused - did you specify the right host or port?
उदाहरण के लिए, यदि आप अपने लैपटॉप (स्थानीय रूप से) पर कुबेरनेट्स क्लस्टर चलाना चाहते हैं, तो आपको पहले मिनीक्यूब (minikube) जैसे टूल को इंस्टॉल करना होगा और ऊपर बताए गए कमांड को फिर से चलाना होगा।
यदि kubectl cluster-info URL प्रतिक्रिया देता है, लेकिन आप अपने क्लस्टर को एक्सेस नहीं कर पा रहें हैं, तो यह जाँचने के लिए कि क्या यह ठीक से कॉन्फ़िगर किया गया है, इस कमांड का उपयोग करें:
kubectl cluster-info dump
वैकल्पिक Kubectl कॉन्फ़िगरेशन और प्लगइन्स
शेल ऑटोकम्प्लेशन सक्षम करें
kubectl Bash और Zsh के लिए ऑटोकम्प्लेशन का सपोर्ट प्रदान करता है, जो आपका काफी समय बचा सकता है।
नीचे Bash और Zsh के लिए ऑटोकम्प्लेशन स्थापित करने की प्रक्रियाएँ हैं।
Bash के लिए kubectl समापन स्क्रिप्ट kubectl completion bash कमांड के साथ उत्पन्न की जा सकती है। आपके शेल में समापन स्क्रिप्ट को सोर्स करने से kubectl ऑटोकम्पलीशन सक्षम हो जाती है।```
हालाँकि, समापन की स्क्रिप्ट bash-completion पर निर्भर हैं जिसका अर्थ है कि आपको पहले इस सॉफ़्टवेयर को इंस्टॉल करना होगा।
चेतावनी:
Bash-completion के लिये दो संस्करण हैं v1 और v2। v1 bash 3.2 के लिये हैं (जो macOS के लिए डिफ़ॉल्ट है), और v2 bash 4.1+ के लिए है।kubectl कम्पलीशन स्क्रिप्ट Bash-completion v1 और Bash 3.2 के साथ ठीक से काम नहीं करती है। इसके लिए Bash-completion v2 और बैश 4.1+ की आवश्यकता है। इसलिए macOS पर kubectl कम्पलीशन को सही तरीके से इस्तेमाल करने के लिए , आपको bash 4.1+ इनस्टॉल और उपयोग करना होगा (निर्देश)। निम्नलिखित निर्देश मानते हैं कि आप बैश का उपयोग करते हैं (अर्थात 4.1 का कोई भी बैश संस्करण या इससे नया)।
अपग्रेड बैश
निम्नलिखित निर्देश मानते हैं कि आप बैश 4.1+ का उपयोग करते हैं। आप अपने बैश के संस्करण को यह चलाकर देख सकते हैं:
echo$BASH_VERSION
यदि यह बहुत पुराना है, तो आप Homebrew का उपयोग करके इसे इनस्टॉल/अपग्रेड कर सकते हैं:
brew install bash
अपने शेल को पुनः लोड करें और सत्यापित करें कि इच्छित संस्करण का उपयोग किया जा रहा है:
echo$BASH_VERSION$SHELL
Homebrew आमतौर पर इसे /usr/local/bin/bash पर इनस्टॉल करता है।
इनस्टॉल bash-completion
टिप्पणी:
जैसा कि उल्लेख किया गया है, ये निर्देश मानते हैं कि आप Bash 4.1+ का उपयोग करते हैं, जिसका अर्थ है कि आप bash-completion v2 इनस्टॉल करेंगे (Bash 3.2 और bash-completion v1 पर kubectl पूर्णता काम नहीं करेगी)।
आप type_init_completion से सत्यापित कर सकते हैं कि क्या आपके पास bash-completion v2 पहले से इनस्टॉल है। यदि नहीं, तो आप इसे Homebrew से इनस्टॉल कर सकते हैं
brew install bash-completion@2
जैसा कि इस कमांड के आउटपुट में बताया गया है, अपनी ~/.bash_profile फ़ाइल में निम्नलिखित जोड़ें:
यदि आपके पास kubectl के लिए एक नाम (alias) है, तो आप उस उपनाम के साथ काम करने के लिए शेल कम्पलीशन को बढ़ा सकते हैं:
echo'alias k=kubectl' >>~/.bash_profile
echo'complete -F __start_kubectl k' >>~/.bash_profile
यदि आपने Homebrew के साथ kubectl इनस्टॉल किया है (जैसा कि यहां बताया गया है), तो kubectl कम्पलीशन स्क्रिप्ट पहले से ही /usr/local/etc/bash_completion.d/kubectl में होनी चाहिए। ऐसे में आपको कुछ भी करने की जरूरत नहीं है।
टिप्पणी:
bash-completion Homebrew से इनस्टॉल होने पर, सारे फाइल्स को BASH_COMPLETION_COMPAT_DIR डायरेक्टरी में सोर्स कर देता है। इसलिए आखरी दो तरीके काम करते हैं।
किसी भी स्थिति में, आपके शेल को पुनः लोड करने के बाद, Kubectl पूर्णता कार्य करना चाहिए।
Zsh के लिए kubectl कम्पलीशन स्क्रिप्ट kubectl completion zsh कमांड के साथ उत्पन्न की जा सकती है। आपके शेल में कम्पलीशन स्क्रिप्ट को सोर्स करने से kubectl ऑटो-कम्पलीशन सक्षम हो जाती है।
अपने सभी शेल सत्रों में ऐसा करने के लिए, निम्नलिखित को अपनी ~/.zshrc फ़ाइल में जोड़ें:
source <(kubectl completion zsh)
यदि आपके पास kubectl के लिए एक उपनाम है, तो आप उस उपनाम के साथ काम करने के लिए शेल कम्पलीशन को बढ़ा सकते हैं:
echo'alias k=kubectl' >>~/.zshrc
echo'complete -F __start_kubectl k' >>~/.zshrc
अपने शेल को पुनः लोड करने के बाद, kubectl ऑटो-कम्पलीशन कार्य करना चाहिए।
यदि आपको कोई त्रुटि मिलती है जैसे complete:13: command not found: compdef, तो अपनी ~/.zshrc फ़ाइल की शुरुआत में निम्नलिखित जोड़ें:
autoload -Uz compinit
compinit
kubectl convert प्लगइन इंस्टॉल करें
कुबेरनेट्स कमांड-लाइन टूल kubectl के लिए एक प्लगइन, जो आपको विभिन्न API संस्करण के बीच मैनिफ़ेस्ट को बदलने करने की अनुमति देता है।
यह विशेष रूप से नए कुबेरनेट्स रिलीज के साथ एक गैर-बहिष्कृत API संस्करण में मैनिफेस्ट को माइग्रेट करने में सहायक हो सकता है।
अधिक जानकारी के लिए, गैर पदावनत एपिस में विस्थापित करें पर जाएं।
आप kubectl संस्करण का उपयोग करे जो आपके क्लस्टर के एक माइनर संस्करण भीतर हो। उदाहरण के लिए, v1.32 क्लाइंट v1.31, v1.32 और v1.33 कण्ट्रोल प्लेन के साथ कम्युनिकेट कर सकते हैं।
kubectl के नए संस्करण का उपयोग करने से समस्या से बचत हो सकती है।
Windows पर kubectl इंस्टॉल करें
Windows पर kubectl संस्थापित करने के लिए निम्नलिखित विधियाँ मौजूद हैं:
यह सुनिश्चित करने के लिए परीक्षण करें कि kubectl संस्करण डाउनलोड के समान है:
kubectl version --client
टिप्पणी:
Windows के लिए Docker Desktopkubectl का अपना संस्करण PATH में जोड़ता है।
यदि आपने पहले Docker Desktop स्थापित किया है, तो आपको Docker Desktop इंस्टॉलर द्वारा जोड़े गए एक PATH से पहले अपनी PATH प्रविष्टि डालने की आवश्यकता हो सकती है या Docker Desktop के kubectl को हटा दें।
Chocolatey या Scoop का उपयोग करके Windows पर इंस्टॉल करें
Windows पर kubectl इंस्टॉल करने के लिए आप या तो Chocolatey पैकेज मैनेजर अथवा Scoop कमांड-लाइन इंस्टॉलर का उपयोग कर सकते हैं।
यह सुनिश्चित करने के लिए परीक्षण करें कि आपके द्वारा इंस्टॉल किया गया संस्करण उप-टू-डेट है:
kubectl version --client
अपनी होम डायरेक्टरी पर जाएं:
# यदि आप cmd.exe का प्रयोग कर रहे हैं, तो: cd %USERPROFILE%cd ~
.kube डायरेक्टरी बनाएं:
mkdir .kube
आपके द्वारा अभी बनाई गई .kube डायरेक्टरी में जाएं:
cd .kube
दूरस्थ कुबेरनेट्स क्लस्टर का उपयोग करने के लिए kubectl को कॉन्फ़िगर करें:
New-Item config -type file
टिप्पणी:
अपनी पसंद के टेक्स्ट एडिटर जैसे नोटपैड का उपयोग कर कॉन्फिग फाइल को एडिट करें।
kubectl कॉन्फ़िगरेशन सत्यापित करें
kubectl को कुबेरनेट्स क्लस्टर को खोजने और एक्सेस करने के लिए, उसे
क्यूबकॉन्फिग फाइल(kubeconfig) की आवश्यकता होती है,
जो स्वचालित रूप से तब बनता है जब आप
kube-up.sh का उपयोग करके क्लस्टर बनाते हैं
या मिनीक्यूब क्लस्टर को सफलतापूर्वक डिप्लॉय करते हैं।
डिफ़ॉल्ट रूप से, kubectl कॉन्फ़िगरेशन ~/.kube/config पर स्थित होता है।
जाँच करें कि क्लस्टर स्टेट प्राप्त करके kubectl को ठीक से कॉन्फ़िगर किया गया है:
kubectl cluster-info
यदि आपको एक URL प्रतिक्रिया दिखती हैं, तो kubectl आपके क्लस्टर तक पहुँचने के लिए सही ढंग से कॉन्फ़िगर हुआ है।
यदि आपको निम्नलिखित संदेश दिखाई देता है, तो kubectl ठीक से कॉन्फ़िगर नहीं हुआ है या कुबेरनेट्स क्लस्टर से कनेक्ट करने में सक्षम नहीं है।
The connection to the server <server-name:port> was refused - did you specify the right host or port?
उदाहरण के लिए, यदि आप अपने लैपटॉप (स्थानीय रूप से) पर कुबेरनेट्स क्लस्टर चलाना चाहते हैं, तो आपको पहले मिनीक्यूब (minikube) जैसे टूल को इंस्टॉल करना होगा और ऊपर बताए गए कमांड को फिर से चलाना होगा।
यदि kubectl cluster-info URL प्रतिक्रिया देता है, लेकिन आप अपने क्लस्टर को एक्सेस नहीं कर पा रहें हैं, तो यह जाँचने के लिए कि क्या यह ठीक से कॉन्फ़िगर किया गया है, इस कमांड का उपयोग करें:
kubectl cluster-info dump
वैकल्पिक kubectl कॉन्फ़िगरेशन और प्लगइन्स
शेल ऑटोकम्प्लेशन सक्षम करें
kubectl Bash और Zsh के लिए ऑटोकम्प्लेशन का सपोर्ट प्रदान करता है, जो आपको बहुत सारी टाइपिंग बचा सकता है।
नीचे Zsh के लिए ऑटोकम्प्लेशन स्थापित करने की प्रक्रियाएँ हैं, यदि आप इसे Windows पर चला रहे हैं।
Zsh के लिए kubectl कम्पलीशन स्क्रिप्ट kubectl completion zsh कमांड के साथ उत्पन्न की जा सकती है। आपके शेल में कम्पलीशन स्क्रिप्ट को सोर्स करने से kubectl ऑटो-कम्पलीशन सक्षम हो जाती है।
अपने सभी शेल सत्रों में ऐसा करने के लिए, निम्नलिखित को अपनी ~/.zshrc फ़ाइल में जोड़ें:
source <(kubectl completion zsh)
यदि आपके पास kubectl के लिए एक उपनाम है, तो आप उस उपनाम के साथ काम करने के लिए शेल कम्पलीशन को बढ़ा सकते हैं:
echo'alias k=kubectl' >>~/.zshrc
echo'complete -F __start_kubectl k' >>~/.zshrc
अपने शेल को पुनः लोड करने के बाद, kubectl ऑटो-कम्पलीशन कार्य करना चाहिए।
यदि आपको कोई त्रुटि मिलती है जैसे complete:13: command not found: compdef, तो अपनी ~/.zshrc फ़ाइल की शुरुआत में निम्नलिखित जोड़ें:
autoload -Uz compinit
compinit
इंस्टॉल kubectl convert प्लगइन
कुबेरनेट्स कमांड-लाइन टूल kubectl के लिए एक प्लगइन, जो आपको विभिन्न API संस्करण के बीच मैनिफ़ेस्ट को बदलने करने की अनुमति देता है।
यह विशेष रूप से नए कुबेरनेट्स रिलीज के साथ एक गैर-बहिष्कृत API संस्करण में मैनिफेस्ट को माइग्रेट करने में सहायक हो सकता है।
अधिक जानकारी के लिए, गैर पदावनत एपिस में विस्थापित करें पर जाएं।
प्रलेखन के इस खंड में ट्यूटोरियल हैं।
ट्यूटोरियल दिखाता है कि किसी एकल कार्य से बड़े लक्ष्य को कैसे पूरा किया जाए।
आमतौर पर एक ट्यूटोरियल में कई खंड होते हैं,
जिनमें से प्रत्येक में चरणों के क्रम होते हैं।
प्रत्येक ट्यूटोरियल से परिचित होने से पहले, हम आपको
मानकीकृत शब्दावली पृष्ट को बुकमार्क करने की सलाह देते हैं।
मूलभूत
मूलभूत कुबरनेट्स एक गहन संवादात्मक ट्यूटोरियल है जो आपको कुबेरनेट्स प्रणाली को समझने और कुबेरनेट्स की कुछ बुनियादी सुविधाओं को आज़माने में मदद करता है।
यदि आप एक ट्यूटोरियल लिखना चाहते हैं, तो
ट्यूटोरियल पेज प्रकार के बारे में जानकारी के लिए
सामग्री पृष्ठ प्रकार देखें।
5.1 - हेलो मिनीक्यूब
यह ट्यूटोरियल आपको मिनिक्यूब का उपयोग करते हुए कुबेरनेट्स पर एक सैम्पल ऐप चलाने का तरीका दिखाता है। ट्यूटोरियल एक कंटेनर छवि प्रदान करता है जो सभी अनुरोधों को प्रतिध्वनित करने के लिए NGINX का उपयोग करता है।
उद्देश्य
मिनीक्यूब में एक नमूना एप्लीकेशन डेप्लॉय करें।
ऐप को चलाएं।
एप्लिकेशन लॉग देखें।
शुरू करने से पहले
यह ट्यूटोरियल मानता है कि आपने पहले ही मिनीक्यूब सेट कर लिया है।
इंस्टॉलेशन निर्देशों के लिए मिनीक्यूब स्टार्ट में Step 1 देखें।
टिप्पणी:
केवल Step 1, इंस्टालेशन में दिए गए निर्देशों का पालन करें। बाकी निर्देश इस पेज पर कवर किया गया है।
आपको kubectl भी इंस्टॉल करना होगा। स्थापाना निर्देश के लिए Kubectl स्थापित करें देखें।
एक मिनीक्यूब क्लस्टर बनाएं
minikube start
कुबेरनेट्स डैशबोर्ड खोलें:
कुबेरनेट्स डैशबोर्ड खोलें। आप इसे दो अलग-अलग तरीकों से कर सकते हैं:
# एक नया टर्मिनल प्रारंभ करें, और इस कमांड को चालू छोड़ दें।minikube dashboard
अब, उस टर्मिनल पर वापस जाएँ जहाँ आपने minikube start चलाया था।
टिप्पणी:
dashboard कमांड डैशबोर्ड ऐड-ऑन को इस्तेमाल के लिए तैयार करता है और प्रॉक्सी को डिफ़ॉल्ट वेब ब्राउज़र में खोलता है।
आप डैशबोर्ड पर कुबेरनेट्स संसाधन जैसे डेप्लॉयमेंट और सर्विस बना सकते हैं।
आमतौर पर, डैशबोर्ड केवल आंतरिक कुबेरनेट्स वर्चुअल नेटवर्क के भीतर से ही पहुँचा जा सकता है।
डैशबोर्ड को कुबेरनेट्स वर्चुअल नेटवर्क के बाहर से एक्सेस करने योग्य बनाने के लिए dashboard कमांड एक अस्थायी प्रॉक्सी बनाता है।
प्रॉक्सी को रोकने और प्रक्रिया से बाहर निकलने के लिए Ctrl+C का प्रयोग करें।
कमांड से बाहर निकलने के बाद, डैशबोर्ड कुबेरनेट्स क्लस्टर में चलता रहता है।
आप डैशबोर्ड तक पहुंचने और प्रॉक्सी बनाने के लिए फिर से dashboard कमांड चला सकते हैं।
यदि आप वेब ब्राउज़र नहीं खोलना चाहते हैं, तो URL प्राप्त करने के लिए url फ़्लैग के साथ dashboard कमांड चलाएँ:
minikube dashboard --url
अब, उस टर्मिनल पर वापस जाएँ जहाँ आपने मिनीक्यूब स्टार्ट चलाया था।
डेप्लॉयमेंट बनाएँ
कुबेरनेट्स पॉड एक या अधिक कंटेनरों का एक समूह है,
जो प्रशासन और नेटवर्किंग के उद्देश्यों के लिए एक साथ बंधे होते हैं। इस ट्यूटोरियल के
पॉड में केवल एक कंटेनर है। कुबेरनेट्स
डेप्लॉयमेंट आपके पॉड के स्वास्थ्य की
जाँच करता है और यदि पॉड बंद हो जाता है तो पॉड के कंटेनर को पुनः आरंभ करता है।
पॉड्स के निर्माण और स्केलिंग को प्रबंधित करने के लिए डेप्लॉयमेंट अनुशंसित तरीका है।
पॉड को प्रबंधित करने वाला डेप्लॉयमेंट बनाने के लिए kubectl create कमांड का उपयोग करें। पॉड
प्रदान की गई डॉकर इमेज के आधार पर एक कंटेनर चलाता है।
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 1/1 1 1 1m
पॉड देखें:
kubectl get pods
आउटपुट कुछ इस समान होगा:
NAME READY STATUS RESTARTS AGE
hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m
क्लस्टर इवेंट देखें:
kubectl get events
kubectl कॉन्फ़िगरेशन देखें:
kubectl config view
टिप्पणी:
kubectl कमांड के बारे में अधिक जानकारी के लिए kubectl अवलोकन देखें।
सर्विस बनाएं
आमतौर पर, पॉड कुबेरनेट्स क्लस्टर के भीतर अपने आंतरिक IP पते से ही पहुँचा जा सकता है।
hello-node कंटेनर को कुबेरनेट्स वर्चुअल नेटवर्क के
बाहर से सुलभ बनाने के लिए,पॉड को
कुबेरनेट्स सर्विस के रूप में बेनकाब करना होगा।
kubectl expose कमांड का उपयोग करके पॉड को सार्वजनिक इंटरनेट पर एक्सपोज़ करें:
--type=LoadBalancer फ्लैग इंगित करता है कि आप क्लस्टर के बाहर
अपने सर्विस को प्रदर्शित करना चाहते हैं।
इमेज के अंदर एप्लिकेशन कोड registry.k8s.io/echoserver केवल TCP पोर्ट 8080 पर सुनता है।
यदि आपने किसी भिन्न पोर्ट को एक्सपोज़ करने के लिए kubectl एक्सपोज़ का उपयोग किया है, तो क्लाइंट उस अन्य पोर्ट से जुड़ नहीं सकते।
आपके द्वारा बनाई गई सर्विस देखें:
kubectl get service
आउटपुट कुछ इस समान होगा:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m
लोड बैलेंसर्स का समर्थन करने वाले क्लाउड प्रदाताओं पर, सर्विस तक पहुंचने के
लिए एक बाहरी IP पते का प्रावधान किया जाएगा। मिनीक्यूब पर,
LoadBalancer टाइप minikube service कमांड से सर्विस को
पहुंच योग्य बनाता है।
इस कमांड को चलायें:
minikube service hello-node
यह कमांड एक ब्राउज़र विंडो खोलता है जो ऐप की प्रतिक्रिया दिखाती है।
ऐडऑन सक्षम करें
मिनीक्यूब टूल में बिल्ट-इन ऐडऑन (add on) का एक समूह
शामिल है जिसे स्थानीय कुबेरनेट्स वातावरण में सक्षम, अक्षम और खोला जा सकता है।
यह ट्यूटोरियल कुबेरनेट्स क्लस्टर ऑर्केस्ट्रेशन सिस्टम की मूल बातों का पूर्वाभ्यास प्रदान करता है। प्रत्येक मॉड्यूल में कुबेरनेट्स की प्रमुख विशेषताओं और अवधारणाओं पर कुछ जानकारी और एक इंटरैक्टिव ऑनलाइन ट्यूटोरियल शामिल होते हैं। ये इंटरेक्टिव ट्यूटोरियल आपको अपने लिए एक साधारण क्लस्टर और इसके कंटेनरीकृत एप्लीकेशन का प्रबंधन करने देते हैं।
इंटरैक्टिव ट्यूटोरियल का उपयोग करके, आप सीख सकते हैं:
एक क्लस्टर पर कंटेनरीकृत एप्लीकेशन डिप्लॉय करें।
डिप्लॉयमेंट को स्केल करें।
नए सॉफ़्टवेयर संस्करण के साथ कंटेनरीकृत एप्लिकेशन को अपडेट करें।
कंटेनरीकृत एप्लिकेशन को डीबग करें।
कुबेरनेट्स आपके लिए क्या कर सकता है?
आधुनिक वेब सेवाओं के साथ उपयोगकर्ता उम्मीद करते हैं कि एप्लिकेशन 24/7 उपलब्ध होंगे, और डेवलपर्स उन एप्लिकेशन के नए संस्करणों को दिन में कई बार डिप्लॉय करने की उम्मीद करते हैं। कंटेनरीकरण पैकेज सॉफ़्टवेयर को इन लक्ष्यों को पूरा करने में मदद करता है, जिससे एप्लिकेशन बिना डाउनटाइम के रिलीज़ और अपडेट किए जा सकते हैं। कुबेरनेट्स आपको यह सुनिश्चित करने में मदद करता है कि वे कंटेनरीकृत एप्लिकेशन जहां और जब आप चाहते हैं, चलते हैं, और उन्हें उन संसाधनों और उपकरणों को खोजने में मदद करते हैं जिनकी उन्हें काम करने के लिए आवश्यकता होती है। कुबेरनेट्स एक उत्पादन के लिए तैयार, ओपन सोर्स प्लेटफॉर्म है जिसे कंटेनर ऑर्केस्ट्रेशन में गूगल के संचित अनुभव के साथ डिज़ाइन किया गया है और समुदाय के उत्तम विचारों से संयुक्त है।
कुबेरनेट्स क्लस्टर के बारे में जानें और मिनिक्यूब का उपयोग करके एक सरल क्लस्टर बनाएं।
5.2.1.1 - Minikube का उपयोग कर क्लस्टर बनाना
उद्देश्य
जानें कुबेरनेट्स क्लस्टर क्या है।
जानें मिनिक्यूब क्या है।
अपने कंप्यूटर पर Kubernetes क्लस्टर प्रारंभ करें।
कुबेरनेट्स क्लस्टर
कुबेरनेट्स उन कंप्यूटरों के समूह को प्रबंधित करने में मदद करता है जो एक इकाई के रूप में काम करने के लिए जुड़े होते हैं। कुबेरनेट्स के एब्स्ट्रैक्शन आपको कंटेनरीकृत एप्लिकेशन को अलग-अलग मशीनों में चलाए बिना क्लस्टर डिप्लॉय करने की अनुमति देता है। डिप्लॉयमेंट के इस नए मॉडल का उपयोग करने के लिए, एप्लिकेशन को इस तरह से पैक किया जाना चाहिए जो उन्हें विभिन्न होस्ट से अलग करता है: उन्हें कंटेनरीकृत किया गया हो। कंटेनरीकृत एप्लिकेशन पिछले डिप्लॉयमेंट मॉडल की तुलना में अधिक लचीले और उपलब्ध हैं, जहां विभिन्न मशीनों पर सीधे एप्लिकेशन इंस्टॉल किए गए थे क्योंकि पैकेज को होस्ट में गहराई से एकीकृत किया गया था। कुबेरनेट्स एक क्लस्टर में एप्लिकेशन कंटेनरों के वितरण और शेड्यूलिंग को अधिक कुशल तरीके से स्वचालित करता है। कुबेरनेट्स एक ओपन सोर्स प्लेटफॉर्म है और उत्पादन के लिए तैयार है।
कुबेरनेट्स क्लस्टर में दो प्रकार के संसाधन होते हैं:
कंट्रोल प्लेन क्लस्टर का समन्वय करता है
नोड्स वे कर्मचारी हैं जो एप्लिकेशन चलाते हैं
सारांश:
कुबेरनेट्स क्लस्टर
मिनिक्यूब
कुबेरनेट्स एक प्रोडक्शन-ग्रेड, ओपन-सोर्स प्लेटफॉर्म है जो कंप्यूटर क्लस्टर के भीतर और उसके भीतर एप्लिकेशन कंटेनरों के प्लेसमेंट (शेड्यूलिंग) और निष्पादन को व्यवस्थित करता है।
क्लस्टर आरेख
कंट्रोल प्लेन क्लस्टर के प्रबंधन के लिए जिम्मेदार है। कंट्रोल प्लेन आपके क्लस्टर में सभी गतिविधियों का समन्वय करता है, जैसे एप्लिकेशन शेड्यूल करना, एप्लिकेशन की वांछित स्थिति को बनाए रखना, एप्लिकेशन को स्केल करना और नए अपडेट रोल आउट करना।
नोड एक VM या एक भौतिक कंप्यूटर है जो कुबेरनेट्स क्लस्टर में एक वर्कर मशीन के रूप में कार्य करता है। प्रत्येक नोड में एक kubelet होता है, जो नोड के प्रबंधन और कुबेरनेट्स नियंत्रण के साथ संचार करने के लिए एक एजेंट है। नोड में कंटेनर संचालन को संभालने के लिए उपकरण भी होने चाहिए, जैसे कि containerd या Docker। उत्पादन ट्रैफ़िक को संभालने वाले कुबेरनेट्स क्लस्टर में कम से कम तीन नोड होने चाहिए।
कंट्रोल प्लेन क्लस्टर और नोड्स को मैनेज करते हैं जिनका उपयोग रनिंग एप्लिकेशन को होस्ट करने के लिए किया जाता है।
जब आप कुबेरनेट्स पर एप्लिकेशन डिप्लॉयमेंट करते हैं, तो आप कंट्रोल प्लेन को एप्लिकेशन कंटेनर शुरू करने के लिए कहते हैं। नियंत्रण विमान कंटेनरों को क्लस्टर के नोड्स पर चलाने के लिए शेड्यूल करता है। नोड्स कुबेरनेट्स एपीआई का उपयोग करके कंट्रोल प्लेन के साथ संचार करते हैं, जिसे कंट्रोल प्लेन एक्सपोज करता है। अंतिम उपयोगकर्ता भी कुबेरनेट्स एपीआई का उपयोग सीधे क्लस्टर के साथ बातचीत करने के लिए कर सकते हैं।
कुबेरनेट्स क्लस्टर को भौतिक या वर्चुअल मशीनों पर तैनात किया जा सकता है। कुबेरनेट्स विकास के साथ आरंभ करने के लिए, आप मिनिक्यूब का उपयोग कर सकते हैं। मिनिक्यूब एक हल्का कुबेरनेट्स कार्यान्वयन है जो आपकी स्थानीय मशीन पर एक वीएम बनाता है और केवल एक नोड वाला एक साधारण क्लस्टर तैनात करता है। मिनिक्यूब Linux , MacOS और Windows सिस्टम के लिए उपलब्ध है। मिनिक्यूब CLI आपके क्लस्टर के साथ काम करने के लिए बुनियादी बूटस्ट्रैपिंग संचालन प्रदान करता है, जिसमें स्टार्ट, स्टॉप, स्टेटस और डिलीट शामिल हैं। हालांकि, इस ट्यूटोरियल के लिए, आप मिनीक्यूब के साथ पहले से इंस्टॉल किए गए ऑनलाइन टर्मिनल का उपयोग करेंगे।
अब जब आप कुबेरनेट्स के बारे में अधिक जान गए हैं, तो इसे अपने कंप्यूटर पर आज़माने के लिए हेलो मिनिक्यूब पर जाएं।
5.2.1.2 - इंटरएक्टिव ट्यूटोरियल - एक क्लस्टर बनाना
प्रलेखन अनुपलब्ध
क्लस्टर बनाने के तरीके पर इंटरैक्टिव ट्यूटोरियल उपलब्ध नहीं है।
अधिक जानकारी के लिए देखें काटाकोडा बंद करने की घोषणा.
5.2.2 - डिप्लॉय ऐप
5.2.2.1 - डिप्लॉयमेंट बनाने के लिए kubectl का उपयोग करना
उद्देश्यों
एप्लिकेशन डिप्लॉयमेंट के बारे में जानें।
कुबेरनेट्स पर kubectl के साथ अपना पहला ऐप डिप्लॉय करें।
कुबेरनेट्स डिप्लॉयमेंट
एक बार जब आपके पास कुबेरनेट्स क्लस्टर चल रहा हो, तो आप इसके ऊपर अपने कंटेनरीकृत एप्लीकेशन को तैनात कर सकते हैं। ऐसा करने के लिए, आप कुबेरनेट्स डिप्लॉयमेंट कॉन्फ़िगरेशन बनाते हैं। डिप्लॉयमेंट कुबेरनेट्स को निर्देश देता है कि आपके आवेदन के उदाहरण कैसे बनाएं और अपडेट करें। एक बार जब आप एक डिप्लॉयमेंट बना लेते हैं, तो कुबेरनेट्स कंट्रोल प्लेन उस डिप्लॉयमेंट में शामिल एप्लिकेशन इंस्टेंस को क्लस्टर में अलग-अलग नोड्स पर चलाने के लिए शेड्यूल करता है।
एक बार एप्लिकेशन इंस्टेंस बन जाने के बाद, कुबेरनेट्स डिप्लॉयमेंट कंट्रोलर लगातार उन इंस्टेंस की निगरानी करता है। यदि किसी इंस्टेंस को होस्ट करने वाला नोड बंद हो जाता है या हटा दिया जाता है, तो डिप्लॉयमेंट कंट्रोलर क्लस्टर में इंस्टेंस को किसी अन्य नोड के इंस्टेंस से बदल देता है। यह मशीन की विफलता या रख - रखाव को दूर करने के लिए एक स्व-उपचार तंत्र प्रदान करता है।
पूर्व-ऑर्केस्ट्रेशन की दुनिया में, इंस्टॉलेशन स्क्रिप्ट का उपयोग अक्सर एप्लीकेशन को शुरू करने के लिए किया जाता था, लेकिन वे मशीन की विफलता से पुनर्प्राप्ति की अनुमति नहीं देते हैं। कुबेरनेट्स डिप्लॉयमेंट आपके एप्लिकेशन इंस्टेंस को बनाकर और उन्हें नोड्स पर चालू रखते हुए, एप्लिकेशन प्रबंधन के लिए एक मौलिक रूप से अलग दृष्टिकोण प्रदान करता है।
सारांश:
डिप्लॉयमेंट
kubectl
आपके एप्लिकेशन के इंस्टेंस बनाने और अपडेट करने के लिए एक डिप्लॉयमेंट जिम्मेदार है
कुबेरनेट्स पर अपना पहला ऐप डिप्लॉय करें
आप कुबेरनेट्स कमांड लाइन इंटरफेस, kubectl का उपयोग करके डिप्लॉयमेंट बना और प्रबंधित कर सकते हैं। kubectl क्लस्टर के साथ बातचीत करने के लिए कुबेरनेट्स एपीआई का उपयोग करता है। इस मॉड्यूल में, आप कुबेरनेट्स क्लस्टर पर आपके एप्लिकेशन चलाने वाले डिप्लॉयमेंट बनाने के लिए आवश्यक सबसे सामान्य kubectl कमांड सीखेंगे।
जब आप कोई डिप्लॉयमेंट बनाते हैं, तो आपको अपने एप्लिकेशन के लिए कंटेनर इमेज और चलाने के लिए इच्छित प्रतिकृतियों की संख्या निर्दिष्ट करने की आवश्यकता होगी। आप अपने कामकाज को अपडेट करके बाद में उस जानकारी को बदल सकते हैं; बूटकैंप के मॉड्यूल 5 और 6 चर्चा करते हैं कि आप अपने डिप्लॉयमेंट को कैसे स्केल और अपडेट कर सकते हैं।
कुबेरनेट्स पर डिप्लॉयड होने के लिए एप्लीकेशन को समर्थित कंटेनर प्रारूपों में से एक में पैक करने की आवश्यकता है
अपने पहले डिप्लॉयमेंट के लिए, आप एक डॉकर कंटेनर में पैक किए गए हैलो-नोड एप्लिकेशन का उपयोग करेंगे जो सभी अनुरोधों को प्रतिध्वनित करने के लिए NGINX का उपयोग करता है। (यदि आपने पहले से हैलो-नोड एप्लिकेशन बनाने और कंटेनर का उपयोग करके इसे तैनात करने का प्रयास नहीं किया है, तो आप पहले हेलो Minikube ट्यूटोरियल के निर्देशों का पालन करके ऐसा कर सकते हैं)।
आपको kubectl भी इंस्टॉल करना होगा। यदि आपको इसे इंस्टॉल करने की आवश्यकता है, तो इंस्टॉल टूल्स पर जाएं।
अब जब आप जान गए हैं कि डिप्लॉयमेंट क्या हैं, तो आइए अपना पहला ऐप परिनियोजित करें!
kubectl की मूल बातें
कुबेक्टल कमांड का सामान्य प्रारूप है: kubectl action resource
यह निर्दिष्ट संसाधन (जैसे नोड या डिप्लॉयमेंट ) पर निर्दिष्ट क्रिया (जैसे बनाना, वर्णन करना या हटाना) करता है। आप संभावित मापदंडों के बारे में अतिरिक्त जानकारी प्राप्त करने के लिए उपकमांड के बाद --help का उपयोग कर सकते हैं (उदाहरण के लिए: kubectl get nodes --help)।
kubectl version कमांड चलाकर जांचें कि kubectl आपके क्लस्टर से बात करने के लिए कॉन्फ़िगर किया गया है।
जांचें कि kubectl स्थापित है और आप क्लाइंट और सर्वर दोनों संस्करण देख सकते हैं।
क्लस्टर में नोड्स देखने के लिए, kubectl get nodes कमांड चलाएँ।
आप उपलब्ध नोड्स देखते हैं। बाद में, Kubernetes नोड उपलब्ध संसाधनों के आधार पर हमारे एप्लिकेशन को कहां तैनात करना है इसका चयन करेगा।
एक ऐप तैनात करें
आइए अपना पहला ऐप कुबेरनेट्स पर kubectl create deployment कमांड के साथ तैनात करें। हमें डिप्लॉयमेंट नाम और ऐप छवि स्थान प्रदान करने की आवश्यकता है (डॉकर हब के बाहर होस्ट की गई छवियों के लिए पूर्ण रिपॉजिटरी यूआरएल शामिल करें)।
बहुत बढ़िया! आपने अभी-अभी एक डिप्लॉयमेंट बनाकर अपना पहला एप्लिकेशन डेप्लॉये किया है। इसने आपके लिए कुछ चीज़ें निष्पादित कीं:
एक उपयुक्त नोड की खोज की गई जहां एप्लिकेशन का एक उदाहरण चलाया जा सके (हमारे पास केवल 1 उपलब्ध नोड है)
एप्लिकेशन को उस नोड पर चलने के लिए शेड्यूल किया
आवश्यकता पड़ने पर नए नोड पर इंस्टेंस को पुनर्निर्धारित करने के लिए क्लस्टर को कॉन्फ़िगर किया गया
अपने डिप्लॉयमेंट को सूचीबद्ध करने के लिए kubectl get deployment कमांड का उपयोग करें:
kubectl get deployments
हम देखते हैं कि आपके ऐप का एक इंस्टेंस 1 डिप्लॉयमेंट चला रहा है। इंस्टेंस आपके नोड पर एक कंटेनर के अंदर चल रहा है।
ऐप देखें
कुबेरनेट्स के अंदर चलने वाले पॉड एक निजी, पृथक नेटवर्क पर चल रहे हैं।
डिफ़ॉल्ट रूप से वे उसी कुबेरनेट्स क्लस्टर के भीतर अन्य पॉड्स और सेवाओं से दिखाई देते हैं, लेकिन उस नेटवर्क के बाहर नहीं।
जब हम kubectl का उपयोग करते हैं, तो हम अपने एप्लिकेशन के साथ संचार करने के लिए एक एपीआई एंडपॉइंट के माध्यम से बातचीत कर रहे होते हैं।
हम बाद में मॉड्यूल 4 में कुबेरनेट्स क्लस्टर के बाहर आपके एप्लिकेशन को प्रदर्शित करने के अन्य विकल्पों पर चर्चा करेंगे।
kubectl proxy कमांड एक प्रॉक्सी बना सकता है जो संचार को क्लस्टर-वाइड, निजी नेटवर्क में अग्रेषित करेगा। प्रॉक्सी को कंट्रोल-सी दबाकर समाप्त किया जा सकता है और यह चलने के दौरान कोई आउटपुट नहीं दिखाएगा।
प्रॉक्सी चलाने के लिए आपको दूसरी टर्मिनल विंडो खोलनी होगी।
kubectl proxy
अब हमारे होस्ट (टर्मिनल) और कुबेरनेट्स क्लस्टर के बीच एक कनेक्शन है। प्रॉक्सी इन टर्मिनलों से एपीआई तक सीधी पहुंच सक्षम बनाता है।
आप प्रॉक्सी एंडपॉइंट के माध्यम से होस्ट किए गए सभी एपीआई देख सकते हैं। उदाहरण के लिए, हम curl कमांड का उपयोग करके सीधे API के माध्यम से संस्करण को क्वेरी कर सकते हैं:
curl http://localhost:8001/version
नोट: यदि पोर्ट 8001 पहुंच योग्य नहीं है, तो सुनिश्चित करें कि kubectl proxy जिसे आपने ऊपर शुरू किया है दूसरे टर्मिनल में चल रहा है.
एपीआई सर्वर स्वचालित रूप से पॉड नाम के आधार पर प्रत्येक पॉड के लिए एक एंडपॉइंट बनाएगा, जिसे प्रॉक्सी के माध्यम से भी एक्सेस किया जा सकता है।
सबसे पहले हमें पॉड नाम प्राप्त करने की आवश्यकता है, और हम पर्यावरण चर POD_NAME में संग्रहित करेंगे:
export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{ {end}}') echo पॉड का नाम: $POD_NAME
आप निम्न चलाकर प्रॉक्सी एपीआई के माध्यम से पॉड तक पहुंच सकते हैं:
किसी एप्लिकेशन को आपके क्लस्टर में कैसे नियुक्त किया जाए, इस पर इंटरैक्टिव ट्यूटोरियल उपलब्ध नहीं है।
अधिक जानकारी के लिए देखें काटाकोडा बंद करने की घोषणा.
5.2.3 - ऐप का अन्वेषण करें
5.2.3.1 - पॉड्स और नोड्स की जांच करना
उद्देश्य
कुबेरनेट्स पॉड्स के बारे में जानें।
कुबेरनेट्स नोड्स के बारे में जानें।
डिप्लॉयड एप्लीकेशन का समस्या निवारण करें।
कुबेरनेट्स पॉड्स
जब आपने मॉड्यूल 2 में एक एप्लीकेशन बनाया, तो कुबेरनेट्स ने आपके एप्लिकेशन इंस्टेंस को होस्ट करने के लिए एक पॉड बनाया। पॉड एक कुबेरनेट्स एब्स्ट्रैक्शन है जो एक या अधिक एप्लिकेशन कंटेनरों (जैसे डॉकर) के समूह और उन कंटेनरों के लिए कुछ साझा संसाधनों का प्रतिनिधित्व करता है। उन संसाधनों में शामिल हैं:
साझा स्टोरेज, वॉल्यूम के रूप में
नेटवर्किंग, एक अद्वितीय क्लस्टर IP पते के रूप में
प्रत्येक कंटेनर को चलाने के तरीके के बारे में जानकारी, जैसे कंटेनर इमेज संस्करण या उपयोग करने के लिए विशिष्ट पोर्ट
एक पॉड एक एप्लिकेशन-विशिष्ट "लॉजिकल होस्ट" मॉडल करता है और इसमें विभिन्न एप्लिकेशन कंटेनर हो सकते हैं जो अपेक्षाकृत कसकर युग्मित होते हैं। उदाहरण के लिए, एक पॉड में आपके Node.js ऐप के साथ-साथ एक अलग कंटेनर दोनों शामिल हो सकते हैं जो Node.js वेबसर्वर द्वारा प्रकाशित किए जाने वाले डेटा को फीड करता है। पॉड में कंटेनर एक IP एड्रेस और पोर्ट स्पेस साझा करते हैं जो हमेशा सह-स्थित और सह-अनुसूचित होते हैं, और एक ही नोड पर एक साझा संदर्भ में चलते हैं।
कुबेरनेट्स प्लेटफॉर्म पर पॉड्स सबसे छोटे इकाई हैं। जब हम कुबेरनेट्स पर एक डिप्लॉयमेंट बनाते हैं, तो वह डिप्लॉयमेंट अपने अंदर कंटेनरों के साथ पॉड बनाता है (नाकि सीधे कंटेनर)। प्रत्येक पॉड उस नोड से जुड़ा होता है जहां वह निर्धारित होता है, और समाप्ति (रीस्टार्ट नीति के अनुसार) या विलोपन तक वहीं रहता है। नोड की विफलता के मामले में, क्लस्टर में अन्य उपलब्ध नोड्स पर समान पॉड्स शेड्यूल किए जाते हैं।
सारांश:
पॉड्स
नोड्स
kubectl के मुख्य कमांड
एक पॉड एक या एक से अधिक एप्लिकेशन कंटेनरों (जैसे डॉकर) का एक समूह है और इसमें साझा स्टोरेज (वॉल्यूम), IP पता और उन्हें चलाने के तरीके के बारे में जानकारी शामिल होती है ।
पॉड्स अवलोकन
नोड्स
एक पॉड हमेशा एक नोड पर चलता है। कुबेरनेट्स में एक नोड एक कार्यकर्ता मशीन है और क्लस्टर के आधार पर वर्चुअल या भौतिक मशीन हो सकती है। प्रत्येक नोड को कण्ट्रोल प्लेन द्वारा प्रबंधित किया जाता है। एक नोड में कई पॉड हो सकते हैं, और कुबेरनेट्स कंट्रोल प्लेन स्वचालित रूप से क्लस्टर में नोड्स में पॉड्स को शेड्यूल करने का काम संभालता है। कंट्रोल प्लेन का स्वचालित शेड्यूलिंग प्रत्येक नोड पर उपलब्ध संसाधनों को ध्यान में रखता है।
प्रत्येक कुबेरनेट्स नोड पर कम से कम ये चलते हैं:
क्यूबलेट, कुबेरनेट्स कण्ट्रोल प्लेन और नोड के बीच संचार के लिए जिम्मेदार एक प्रक्रिया; यह पॉड्स और मशीन पर चलने वाले कंटेनरों का प्रबंधन करता है।
एक कंटेनर रनटाइम (जैसे डॉकर), एक रजिस्ट्री से कंटेनर इमेज को पुल करने, कंटेनर को अनपैक करने और एप्लिकेशन चलाने के लिए।
कंटेनरों को केवल एक ही पॉड में एक साथ शेड्यूल किया जाना चाहिए यदि वे कसकर युग्मित हैं और डिस्क जैसे संसाधनों को साझा करने की आवश्यकता है।
नोड अवलोकन
kubectl के साथ समस्या निवारण
मॉड्यूल 2 में, आपने कमांड लाइन इंटरफ़ेस का उपयोग किया है। डेप्लॉयड एप्लीकेशन और उनके एनवायरनमेंट के बारे में जानकारी प्राप्त करने के लिए आप मॉड्यूल 3 में इसका उपयोग करना जारी रखेंगे। सबसे आम ऑपरेशन निम्नलिखित kubectl कमांड के साथ किया जा सकता है:
kubectl get - संसाधनों की सूची बनाएं
kubectl describe - संसाधन के बारे में विस्तृत जानकारी दिखाएं
kubectl logs - पॉड में कंटेनर के लॉग प्रिंट करें
kubectl exec - पॉड में कंटेनर पर कमांड चलाए
आप इन कमांड का उपयोग यह देखने के लिए कर सकते हैं कि एप्लिकेशन कब डिप्लॉय किए गए थे, उनकी वर्तमान स्थिति क्या है, वे कहां चल रहे हैं और उनके कॉन्फ़िगरेशन क्या हैं।
अब जब हम अपने क्लस्टर कॉम्पोनेन्ट और कमांड लाइन के बारे में जानते हैं, तो आइए हमारे एप्लिकेशन को देखें।
कुबेरनेट्स में एक नोड एक कार्यकर्ता मशीन है और क्लस्टर के आधार पर एक वीएम या वर्चुअल मशीन हो सकती है। एक नोड पर कई पॉड चल सकते हैं।
एप्लिकेशन कॉन्फ़िगरेशन की जाँच करें
आइए सत्यापित करें कि पिछले परिदृश्य में हमने जो एप्लिकेशन तैनात किया था वह चल रहा है। हम kubectl get कमांड का उपयोग करेंगे और मौजूदा पॉड्स की तलाश करेंगे:
kubectl get pods
यदि कोई पॉड्स नहीं चल रहा है, तो कृपया कुछ सेकंड प्रतीक्षा करें और पॉड्स को फिर से सूचीबद्ध करें। एक बार जब आप एक पॉड को चलता हुआ देख लें तो आप जारी रख सकते हैं।
इसके बाद, यह देखने के लिए कि उस पॉड के अंदर कौन से कंटेनर हैं और उन कंटेनरों को बनाने के लिए कौन सी छवियों का उपयोग किया जाता है, हम kubectl describe pods कमांड चलाते हैं:
kubectl describe pods है
हम यहां पॉड के कंटेनर के बारे में विवरण देखते हैं: आईपी पता, उपयोग किए गए पोर्ट और पॉड के जीवनचक्र से संबंधित घटनाओं की एक सूची।
वर्णन उपकमांड का आउटपुट व्यापक है और इसमें कुछ अवधारणाएं शामिल हैं जिन्हें हमने अभी तक नहीं समझाया है, लेकिन चिंता न करें, वे इस बूटकैंप के अंत तक परिचित हो जाएंगे।
ध्यान दें :वर्णन उपकमांड का उपयोग नोड्स, पॉड्स और तैनाती सहित अधिकांश कुबेरनेट्स प्राइमेटिव्स के बारे में विस्तृत जानकारी प्राप्त करने के लिए किया जा सकता है। वर्णन आउटपुट को मानव पठनीय बनाने के लिए डिज़ाइन किया गया है, न कि इसके विरुद्ध स्क्रिप्ट किए जाने के लिए।
ऐप को टर्मिनल में दिखाएं
याद रखें कि पॉड्स एक अलग, निजी नेटवर्क में चल रहे हैं - इसलिए हमें प्रॉक्सी एक्सेस की आवश्यकता है
उनके लिए ताकि हम डिबग कर सकें और उनके साथ बातचीत कर सकें। ऐसा करने के लिए, हम दूसरे टर्मिनल में प्रॉक्सी चलाने के लिए kubectl proxy कमांड का उपयोग करेंगे। एक नई टर्मिनल विंडो खोलें, और उस नए टर्मिनल में, चलाएँ:
kubectl proxy
अब फिर से, हम पॉड नाम प्राप्त करेंगे और उस पॉड को सीधे प्रॉक्सी के माध्यम से क्वेरी करेंगे।
पॉड नाम प्राप्त करने और उसे POD_NAME पर्यावरण चर में संग्रहीत करने के लिए:
export POD_NAME='$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{'\n'}} {{end}}')" echo "Name of Pod: $POD_NAME"
हमारे एप्लिकेशन का आउटपुट देखने के लिए, curl अनुरोध चलाएँ:
कुछ भी जो एप्लिकेशन सामान्य रूप से मानक आउटपुट पर भेजता है वह पॉड के भीतर कंटेनर के लिए लॉग बन जाता है। हम kubectl logs कमांड का उपयोग करके इन लॉग्स को पुनः प्राप्त कर सकते हैं:
kubectl logs "$POD_NAME"
नोट : हमें कंटेनर नाम निर्दिष्ट करने की आवश्यकता नहीं है, क्योंकि हमारे पास पॉड के अंदर केवल एक कंटेनर है।
कंटेनर पर कमांड निष्पादित करना
पॉड चालू होने और चलने के बाद हम सीधे कंटेनर पर कमांड निष्पादित कर सकते हैं।
इसके लिए, हम exec उपकमांड का उपयोग करते हैं और एक पैरामीटर के रूप में पॉड के नाम का उपयोग करते हैं। आइए पर्यावरण चरों को सूचीबद्ध करें:
kubectl exec "$POD_NAME" -- env
फिर से, यह उल्लेख करने योग्य है कि कंटेनर का नाम स्वयं छोड़ा जा सकता है क्योंकि हमारे पास पॉड में केवल एक ही कंटेनर है।
आगे आइए पॉड के कंटेनर में एक बैश सत्र शुरू करें:
kubectl exec -ti $POD_NAME -- bash
अब हमारे पास कंटेनर पर एक खुला कंसोल है जहां हम अपना NodeJS एप्लिकेशन चलाते हैं। ऐप का सोर्स कोड server.js फ़ाइल में है:
cat server.js
आप curl कमांड चलाकर जांच सकते हैं कि एप्लिकेशन चालू है:
curl http://localhost:8080
ध्यान दें : यहां हमने localhost का उपयोग किया है क्योंकि हमने NodeJS पॉड के अंदर कमांड निष्पादित किया है। यदि आप localhost:8080 से कनेक्ट नहीं हो सकते हैं, तो यह सुनिश्चित करने के लिए जांचें कि आपने kubectl exec कमांड चलाया है और पॉड के भीतर से कमांड लॉन्च कर रहे हैं
अपना कंटेनर कनेक्शन बंद करने के लिए, exit टाइप करें।
5.2.3.2 - इंटरैक्टिव ट्यूटोरियल - अपने ऐप को अन्वेषण करना
प्रलेखन अनुपलब्ध
अपने ऐप को अन्वेषण करने के तरीके पर इंटरैक्टिव ट्यूटोरियल उपलब्ध नहीं है।
अधिक जानकारी के लिए देखें काटाकोडा बंद करने की घोषणा.
5.2.4 - अपने ऐप को सार्वजनिक रूप से एक्सपोस करें
5.2.4.1 - अपने ऐप को एक्सपोज़ करने के लिए किसी सर्विस का उपयोग करना
उद्देश्य
कुबेरनेट्स में सर्विस के बारे में जानें
समझें कि लेबल और लेबल चयनकर्ता ऑब्जेक्ट किसी सर्विस से कैसे संबंधित हैं
सर्विस का उपयोग करके कुबेरनेट्स क्लस्टर के बाहर किसी एप्लिकेशन को एक्सपोज़ करें
कुबेरनेट्स सर्विसों का अवलोकन
कुबेरनेट्स पॉड्स नश्वर हैं। पॉड में वास्तव में एक जीवनचक्र होता है। जब एक कार्यकर्ता नोड बंद हो जाता है, तो नोड पर चलने वाले पॉड भी खो जाते हैं। एक रेप्लिकासेट तब आपके एप्लिकेशन को चालू रखने के लिए नए पॉड्स के निर्माण करके क्लस्टर को वांछित स्थिति में वापस चला सकता है। एक अन्य उदाहरण के रूप में, 3 रेप्लिका के साथ एक इमेज प्रोसेसिंग बैकएंड पर विचार करें। वे रेप्लिका विनिमेय हैं; फ्रंट-एंड सिस्टम को बैकएंड रेप्लिका की परवाह नहीं करनी चाहिए या भले ही पॉड खो जाए और फिर से बनाया जाए। कुबेरनेट्स क्लस्टर में प्रत्येक पॉड का एक अद्वितीय IP पता होता है, यहां तक कि एक ही नोड पर पॉड्स के भी, इसलिए पॉड्स के बीच परिवर्तनों को स्वचालित रूप से समेटने का एक तरीका होना चाहिए ताकि आपके एप्लिकेशन कार्य करना जारी रखें।
कुबेरनेट्स में सर्विस एक अमूर्त है जो पॉड्स के तार्किक सेट और उन्हें एक्सेस करने के लिए एक निति परिभाषित करता है। सर्विस निर्भर पॉड्स के बीच एक युग्मन को सक्षम करती है। सभी कुबेरनेट्स ऑब्जेक्ट्स की तरह YAML (अधिमानित) या JSON का उपयोग करके एक सर्विस को परिभाषित किया जाता है। सर्विस द्वारा लक्षित पॉड्स का सेट आमतौर पर एक लेबल सेलेक्टर द्वारा निर्धारित किया जाता है (नीचे देखें कि आप selector शामिल किए बिना सर्विस क्यों उपयोग करना चाहेंगे।)
यद्यपि प्रत्येक पॉड का एक विशिष्ट आईपी पता होता है, लेकिन उन आईपी को सर्विस के बिना क्लस्टर के बाहर उजागर नहीं किया जाता है। सर्विस आपके एप्लिकेशन को ट्रैफ़िक प्राप्त करने देती हैं। ServiceSpec: में type निर्दिष्ट करके सर्विसों को अलग-अलग तरीकों से उजागर किया जा सकता है:
क्लस्टर IP (डिफ़ॉल्ट) - क्लस्टर में किसी आंतरिक IP पर सर्विस को एक्सपोज़ करें। यह प्रकार सर्विस को केवल क्लस्टर के भीतर से ही पहुंच योग्य बनाता है।
नोडपोर्ट - NAT का उपयोग करके क्लस्टर में प्रत्येक चयनित नोड के एक ही पोर्ट पर सेवा को प्रदर्शित करता है। <NodeIP>:<NodePort> का उपयोग करके किसी सेवा को क्लस्टर के बाहर से एक्सेस योग्य बनाता है। क्लस्टरआईपी का सुपरसेट।
लोड बैलेंसर - मौजूदा क्लाउड (यदि समर्थित हो) में एक बाहरी लोड बैलेंसर बनाता है और सर्विस को एक निश्चित, बाहरी आईपी असाइन करता है। नोडपोर्ट का सुपरसेट।
एक्सटर्नल-नाम - सेवा को externalName फ़ील्ड (जैसे foo.bar.example.com) की सामग्री से मैप करता है, एक लौटाकर CNAME अपने मान के साथ रिकॉर्ड करें। किसी भी प्रकार का कोई प्रॉक्सी सेट अप नहीं किया गया है। इस प्रकार के लिए v1.7 या उच्चतर kube-dns, या कोरडीएनएस संस्करण 0.0.8 या उच्चतर की आवश्यकता होती है।
इसके अतिरिक्त, ध्यान दें कि सर्विसओं के साथ कुछ उपयोग के मामले हैं जिनमें विनिर्देश में selector को परिभाषित नहीं करना शामिल है। selector के बिना बनाई गई सर्विस भी अनुरूप एंडपॉइन्ट ऑब्जेक्ट नहीं बनाएगी। यह उपयोगकर्ताओं को विशिष्ट एंडपॉइन्ट के लिए किसी सर्विस को मैन्युअल रूप से मैप करने की अनुमति देता है। एक और संभावना है कि कोई सलेक्टर क्यों नहीं हो सकता है, कि आप सख्ती से type: ExternalName का उपयोग कर रहे हैं।
सारांश
पॉड्स को बाहरी ट्रैफ़िक में एक्सपोज़ करना
एकाधिक पॉड्स में संतुलन ट्रैफ़िक लोड करें
लेबल का उपयोग
कुबेरनेट्स सर्विस एक अमूर्त परत है जो पॉड्स के तार्किक सेट को परिभाषित करती है और उन पॉड्स के लिए बाहरी ट्रैफ़िक एक्सपोज़र, लोड बैलेंसिंग और सर्विस डिस्कवरी को सक्षम बनाती है।
सेवाएं और लेबल
सेवा पॉड्स के एक सेट पर ट्रैफ़िक को रूट करती है। सेवाएँ अमूर्त हैं जो आपके एप्लिकेशन को प्रभावित किए बिना पॉड्स को कुबेरनेट्स में मरने और दोहराने की अनुमति देती हैं। निर्भर पॉड्स के बीच डिस्कवरी और रूटिंग (जैसे कि किसी एप्लिकेशन में फ्रंटएंड और बैकएंड कंपोनेंट्स) को कुबेरनेट्स सर्विसेज द्वारा नियंत्रित किया जाता है।
सर्विस लेबल और चयनकर्ताओं का उपयोग करके पॉड्स के एक सेट से मेल खाती हैं, एक समूहबद्ध आदिम जो Kubernetes में ऑब्जेक्ट पर तार्किक संचालन की अनुमति देता है . लेबल वस्तुओं से जुड़े कुंजी/मूल्य जोड़े होते हैं और इन्हें किसी भी तरह से उपयोग किया जा सकता है:
डिप्लॉयमेंट,परीक्षण और प्रोडक्शन के लिए वस्तुओं को नामित करें
संस्करण टैग जोड़ें
टैग का उपयोग करके ऑब्जेक्ट्स को वर्गीकृत करें
लेबल को निर्माण के समय या बाद में ऑब्जेक्ट्स से जोड़ा जा सकता है। उन्हें किसी भी समय परिवर्तित किया जा सकता है। आइए अब सर्विस का उपयोग करके हमारे ऐप को एक्सपोज़ करें और कुछ लेबल लागू करें।
एक नई सेवा बनाएं
आइए सत्यापित करें कि हमारा एप्लिकेशन चल रहा है। हम kubectl get कमांड का उपयोग करेंगे और मौजूदा पॉड्स की तलाश करेंगे:
kubectl get pods
यदि कोई पॉड्स नहीं चल रहा है तो इसका मतलब है कि पिछले ट्यूटोरियल के ऑब्जेक्ट साफ़ कर दिए गए हैं। इस मामले में, वापस जाएं और परिनियोजन बनाने के लिए kubectl का उपयोग करके परिनियोजन को फिर से बनाएं।
कृपया कुछ सेकंड प्रतीक्षा करें और पॉड्स को फिर से सूचीबद्ध करें। एक बार जब आप एक पॉड को चलता हुआ देख लें तो आप जारी रख सकते हैं।
इसके बाद, आइए अपने क्लस्टर से वर्तमान सेवाओं को सूचीबद्ध करें:
kubectl get services
हमारे पास kubernetes नामक एक सेवा है जो मिनीक्यूब के क्लस्टर शुरू करने पर डिफ़ॉल्ट रूप से बनाई जाती है।
एक नई सेवा बनाने और उसे बाहरी ट्रैफ़िक में उजागर करने के लिए हम पैरामीटर के रूप में नोडपोर्ट के साथ एक्सपोज़ कमांड का उपयोग करेंगे।
अब हमारे पास कुबेरनेट्स-बूटकैंप नामक एक चालू सेवा है। यहां हम देखते हैं कि सेवा को एक अद्वितीय क्लस्टर-आईपी, एक आंतरिक पोर्ट और एक बाहरी-आईपी (नोड का आईपी) प्राप्त हुआ।
यह पता लगाने के लिए कि कौन सा पोर्ट बाहरी रूप से खोला गया था (प्रकार: NodePort सेवा के लिए) हम describe service उपकमांड चलाएंगे:
kubectl describe services/kubernetes-bootcamp
NODE_PORT नामक एक पर्यावरण चर बनाएं जिसमें निर्दिष्ट नोड पोर्ट का मान हो:
अब हम curl, नोड के आईपी पते और बाहरी रूप से उजागर पोर्ट का उपयोग करके परीक्षण कर सकते हैं कि ऐप क्लस्टर के बाहर प्रदर्शित है:
कर्ल http://'$(minikube ip):$NODE_PORT'
टिप्पणी:
यदि आप कंटेनर ड्राइवर के रूप में डॉकर डेस्कटॉप के साथ मिनीक्यूब चला रहे हैं, तो एक मिनीक्यूब सुरंग की आवश्यकता है। ऐसा इसलिए है क्योंकि डॉकर डेस्कटॉप के अंदर के कंटेनर आपके होस्ट कंप्यूटर से अलग होते हैं।
एक अलग टर्मिनल विंडो में, निष्पादित करें: minikube services kubernetes-bootcamp --url
आउटपुट इस तरह दिखता है:
http://127.0.0.1:51082 ! क्योंकि आप डार्विन पर डॉकर ड्राइवर का उपयोग कर रहे हैं, इसे चलाने के लिए टर्मिनल का खुला होना आवश्यक है।
फिर ऐप तक पहुंचने के लिए दिए गए यूआरएल का उपयोग करें: कर्ल 127.0.0.1:51082
और हमें सर्वर से प्रतिक्रिया मिलती है। सेवा उजागर हो गई है.
लेबल का उपयोग करना
परिनियोजन ने स्वचालित रूप से हमारे पॉड के लिए एक लेबल बनाया। <कोड>परिनियोजन का वर्णन करें उपकमांड के साथ आप उस लेबल का नाम (कुंजी) देख सकते हैं:
kubectl describe deployments
आइए पॉड्स की हमारी सूची के बारे में पूछताछ करने के लिए इस लेबल का उपयोग करें। हम एक पैरामीटर के रूप में kubectl get pods कमांड का उपयोग -l के साथ करेंगे, जिसके बाद लेबल मान होंगे:
kubectl get pods -l app=kubernetes-bootcamp
मौजूदा सेवाओं को सूचीबद्ध करने के लिए आप ऐसा ही कर सकते हैं:
kubectl get services -l app=kubernetes-bootcamp
पॉड का नाम प्राप्त करें और इसे POD_NAME पर्यावरण चर में संग्रहीत करें:
export POD_NAME='$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{'\n'}} {{end}}')" echo "Name of Pod: $POD_NAME"
नया लेबल लागू करने के लिए हम label उपकमांड का उपयोग करते हैं, जिसके बाद ऑब्जेक्ट प्रकार, ऑब्जेक्ट का नाम और नया लेबल आता है:
kubectl label pods "$POD_NAME" version=v1
यह हमारे पॉड पर एक नया लेबल लागू करेगा (हमने एप्लिकेशन संस्करण को पॉड पर पिन किया है), और हम इसे डिस्क्रिप्शन पॉड कमांड के साथ जांच सकते हैं:
kubectl describe pods "$POD_NAME"
हम यहां देखते हैं कि लेबल अब हमारे पॉड से जुड़ा हुआ है। और अब हम नए लेबल का उपयोग करके पॉड्स की सूची क्वेरी कर सकते हैं:
kubectl get pods -l version=v1
और हम पॉड देखते हैं।
किसी सेवा को हटाना
सेवाओं को हटाने के लिए आप delete service उपकमांड का उपयोग कर सकते हैं। लेबल का उपयोग यहां भी किया जा सकता है:
kubectl delete service -l app=kubernetes-bootcamp
पुष्टि करें कि सेवा समाप्त हो गई है:
kubectl get services
यह पुष्टि करता है कि हमारी सेवा हटा दी गई थी। यह पुष्टि करने के लिए कि मार्ग अब उजागर नहीं हुआ है, आप पहले से उजागर आईपी और पोर्ट को curl कर सकते हैं:
curl http://'$(minikube ip):$NODE_PORT'
यह साबित करता है कि एप्लिकेशन अब क्लस्टर के बाहर से पहुंच योग्य नहीं है।
आप पुष्टि कर सकते हैं कि ऐप अभी भी पॉड के अंदर से curl के साथ चल रहा है:
हम यहां देखते हैं कि एप्लिकेशन चालू है। ऐसा इसलिए है क्योंकि परिनियोजन एप्लिकेशन का प्रबंधन कर रहा है। एप्लिकेशन को बंद करने के लिए, आपको परिनियोजन को भी हटाना होगा।
5.2.4.2 - इंटरएक्टिव ट्यूटोरियल - अपने ऐप को एक्सपोज़ करना
प्रलेखन अनुपलब्ध
आपके एप्लिकेशन को कैसे प्रदर्शित किया जाए, इस पर इंटरैक्टिव ट्यूटोरियल उपलब्ध नहीं है।
अधिक जानकारी के लिए देखें काटाकोडा बंद करने की घोषणा.
5.2.5 - अपने ऐप को स्केल करें
5.2.5.1 - अपने ऐप के कई इंस्टेंस चलाना
उद्देश्य
kubectl का उपयोग करके किसी ऐप को स्केल करें।
एक एप्लीकेशन को स्केल करना
पिछले मॉड्यूल में हमने एक डिप्लॉयमेंट बनाया और इसे सर्विस के माध्यम से सार्वजनिक रूप से प्रदर्शित किया। डिप्लॉयमेंट ने हमारे एप्लिकेशन को चलाने के लिए केवल एक पॉड बनाया। जब ट्रैफ़िक बढ़ता है, तो हमें उपयोगकर्ता की मांग को पूरा करने के लिए एप्लिकेशन को स्केल करना होता है।
डिप्लॉयमेंट में रेप्लिका की संख्या को बदलकर स्केलिंग को प्राप्त किया जाता है।
टिप्पणी:
यदि आप पिछले अनुभाग के बाद यह प्रयास कर रहे हैं, तो हो सकता है कि आपने डिप्लॉयमेंट को उजागर करने वाली सेवा को हटा दिया हो। उस स्थिति में, कृपया निम्नलिखित कमांड का उपयोग करके डिप्लॉयमेंट को फिर से उजागर करें:
एक डिप्लॉयमेंट को स्केल करना यह सुनिश्चित करेगा कि नए पॉड बनाए गए हैं और उपलब्ध संसाधनों के साथ नोड्स के लिए शेड्यूल किए गए हैं। स्केलिंग से पॉड्स की संख्या नई वांछित स्थिति में बढ़ जाएगी। कुबेरनेट्स पॉड्स के ऑटोस्केलिंग का भी समर्थन करता है, लेकिन यह इस ट्यूटोरियल के दायरे से बाहर है। शून्य पर स्केलिंग भी संभव है, और यह निर्दिष्ट डिप्लॉयमेंट के सभी पॉड्स को समाप्त कर देगा।
किसी एप्लिकेशन के कई इंस्टेंस को चलाने के लिए उन सभी को ट्रैफ़िक वितरित करने के तरीके की आवश्यकता होगी। सर्विसों में एक एकीकृत लोड-बैलेंसर होता है जो एक एक्सपोज्ड डिप्लॉयमेंट के सभी पॉड्स को नेटवर्क ट्रैफ़िक वितरित करेगा। सर्विसे एंडपॉइंट्स का उपयोग करते हुए रनिंग पॉड्स की लगातार निगरानी करेंगी यह सुनिश्चित करने के लिए कि ट्रैफ़िक केवल उपलब्ध पॉड्स को ही भेजा जाए।
डिप्लॉयमेंट में रेप्लिका की संख्या को बदलकर स्केलिंग को पूरा किया जाता है।
एक बार जब आपके पास किसी एप्लिकेशन के चलने के कई इंस्टेंस हैं, तो आप डाउनटाइम के बिना रोलिंग अपडेट करने में सक्षम होंगे। हम इसे अगले मॉड्यूल में करेंगे। अब, ऑनलाइन टर्मिनल पर चलते हैं और हमारे एप्लिकेशन को स्केल करते हैं।
डिप्लॉयमेंट को स्केल करना
अपनी तैनाती को सूचीबद्ध करने के लिए, get deployments उपकमांड का उपयोग करें:
kubectl get deployments
आउटपुट इसके समान होना चाहिए:
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 1/1 1 1 11m
हमारे पास 1 पॉड होना चाहिए। यदि नहीं, तो कमांड फिर से चलाएँ। इससे पता चलता है:
NAME क्लस्टर में परिनियोजन के नाम सूचीबद्ध करता है।
READY वर्तमान/वांछित प्रतिकृतियों का अनुपात दर्शाता है
UP-TO-DATE उन प्रतिकृतियों की संख्या प्रदर्शित करता है जिन्हें वांछित स्थिति प्राप्त करने के लिए अद्यतन किया गया है।
AVAILABLE प्रदर्शित करता है कि आपके उपयोगकर्ताओं के लिए एप्लिकेशन की कितनी प्रतिकृतियां उपलब्ध हैं।
AGE एप्लिकेशन के चलने की अवधि प्रदर्शित करता है।
परिनियोजन द्वारा बनाए गए रेप्लिकासेट को देखने के लिए, चलाएँ:
kubectl get rs
ध्यान दें कि रेप्लिकासेट का नाम हमेशा [DEPLOYMENT-NAME]-[RANDOM-STRING] के रूप में स्वरूपित होता है। यादृच्छिक स्ट्रिंग यादृच्छिक रूप से उत्पन्न होती है और बीज के रूप में पॉड-टेम्पलेट-हैश का उपयोग करती है।
इस आउटपुट के दो महत्वपूर्ण कॉलम हैं:
DESIRED एप्लिकेशन की प्रतिकृतियों की वांछित संख्या प्रदर्शित करता है, जिसे आप परिनियोजन बनाते समय परिभाषित करते हैं। यह वांछित स्थिति है.
CURRENT दर्शाता है कि वर्तमान में कितनी प्रतिकृतियां चल रही हैं।
इसके बाद, आइए परिनियोजन को 4 प्रतिकृतियों तक मापें। हम kubectl scale कमांड का उपयोग करेंगे, इसके बाद परिनियोजन प्रकार, नाम और उदाहरणों की वांछित संख्या का उपयोग करेंगे:
अपनी तैनाती को एक बार फिर से सूचीबद्ध करने के लिए, get deployment का उपयोग करें:
kubectl get deployments
जब परिवर्तन लागू किया गया था, उसकी वजह से हमारे पास अब एप्लिकेशन के 4 उदाहरण उपलब्ध हैं। इसके बाद, आइए देखें कि पॉड्स की संख्या बदली है या नहीं:
kubectl get pods -o wide
अब अलग-अलग ip पते के साथ 4 पॉड हैं। परिवर्तन परिनियोजन ईवेंट लॉग में दर्ज किया गया था। इसे जाँचने के लिए, डिस्क्रिप्शन उपकमांड का उपयोग करें:
kubectl describe deployments/kubernetes-bootcamp
आप इस कमांड के आउटपुट में यह भी देख सकते हैं कि अब 4 प्रतिकृतियां हैं।
लोड संतुलन
आइए जांचें कि सेवा ट्रैफ़िक को लोड-संतुलित कर रही है या नहीं। उजागर आईपी और पोर्ट का पता लगाने के लिए हम वर्णन सेवा का उपयोग कर सकते हैं जैसा कि हमने ट्यूटोरियल के पिछले भाग में सीखा था:
kubectl describe services/kubernetes-bootcamp
NODE_PORT नामक एक पर्यावरण चर बनाएं जिसका मान नोड पोर्ट के रूप में हो:
5.2.5.2 - इंटरएक्टिव ट्यूटोरियल - अपने ऐप को स्केल करना
प्रलेखन अनुपलब्ध
आपके क्लस्टर पर चल रहे किसी एप्लिकेशन को कैसे स्केल किया जाए, इस पर इंटरैक्टिव ट्यूटोरियल उपलब्ध नहीं है।
अधिक जानकारी के लिए देखें काटाकोडा बंद करने की घोषणा.
5.2.6 - अपना ऐप अपडेट करें
5.2.6.1 - रोलिंग अपडेट करना
उद्देश्य
kubectl का उपयोग करके रोलिंग अपडेट करें।
एप्लिकेशन को अपडेट करना
उपयोगकर्ता उम्मीद करते हैं कि एप्लिकेशन हर समय उपलब्ध रहेंगे और डेवलपर्स से दिन में कई बार उनके नए संस्करणों को डिप्लॉय करने की अपेक्षा की जाती है। कुबेरनेट्स में यह रोलिंग अपडेट के साथ किया जाता है। रोलिंग अपडेट पॉड को नए इंस्टेंस के साथ अपडेट करके शून्य डाउनटाइम के साथ डिप्लॉयमेंट अपडेट को सक्षम करता है। नए पॉड्स उपलब्ध संसाधनों के साथ नोड्स पर शेड्यूल किए जाएंगे।
पिछले मॉड्यूल में हमने कई इंस्टेंस चलाने के लिए अपने एप्लिकेशन को स्केल किया था। एप्लिकेशन की उपलब्धता को प्रभावित किए बिना अपडेट करने के लिए यह आवश्यक है। डिफ़ॉल्ट रूप से, अपदटेस के दौरान अनुपलब्ध पॉड्स की अधिकतम संख्या और बनाए जा सकने वाले नए पॉड्स की अधिकतम संख्या एक है। दोनों विकल्पों को या तो संख्या या (पॉड्स के) प्रतिशत में कॉन्फ़िगर किया जा सकता है।
कुबेरनेट्स में, अपदटेस को संस्करणबद्ध किया जाता है और किसी भी डिप्लॉयमेंट अपदटेस को पिछले (स्थिर) संस्करण में वापस लाया जा सकता है।
सारांश:
ऐप अपडेट करना
रोलिंग अपडेट पॉड्स को नए इंस्टेंस के साथ अपडेट करके डिप्लॉयमेंट के अपडेट को शून्य डाउनटाइम के साथ होने देता है।
एप्लिकेशन स्केलिंग के समान, यदि कोई डिप्लॉयमेंट सार्वजनिक रूप से एक्सपोज़ होता है, तो सर्विस केवल अपडेट के दौरान उपलब्ध पॉड्स पर ट्रैफ़िक को लोड-बैलेंस करेगी। उपलब्ध पॉड एक इंस्टेंस है जो एप्लिकेशन के उपयोगकर्ताओं के लिए उपलब्ध है।
रोलिंग अपडेट निम्नलिखित क्रियाओं की अनुमति देते हैं:
किसी एप्लिकेशन को एक एनवायरनमेंट से दूसरे एनवायरनमेंट में प्रचारित करें (कंटेनर इमेज अपडेट के माध्यम से)
पिछले संस्करणों में रोलबैक करें
शून्य डाउनटाइम के साथ एप्लीकेशन का निरंतर इंटीग्रेशन और निरंतर डिलीवरी
यदि कोई डिप्लॉयमेंट सार्वजनिक रूप से प्रकट होता है, तो सर्विस अपडेट के दौरान केवल उपलब्ध पॉड्स पर ट्रैफ़िक लोड-बैलेंस करेगी।
चलिए अगले भाग पर चलते हैं और अपने एप्लिकेशन को एक नए संस्करण में अपडेट और रोलबैक करते है।
ऐप का संस्करण अपडेट करें
अपनी तैनाती को सूचीबद्ध करने के लिए, get deployments उपकमांड चलाएँ:
kubectl get deployments
चल रहे पॉड्स को सूचीबद्ध करने के लिए, get pods उपकमांड चलाएँ:
kubectl get pods
ऐप का वर्तमान छवि संस्करण देखने के लिए, describe pod उपकमांड चलाएँ
और image फ़ील्ड देखें:
kubectl describe pods
एप्लिकेशन की छवि को संस्करण 2 में अद्यतन करने के लिए, set image उपकमांड का उपयोग करें, इसके बाद परिनियोजन नाम और नया छवि संस्करण लिखें:
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
कमांड ने आपके ऐप के लिए एक अलग छवि का उपयोग करने के लिए परिनियोजन को सूचित किया और एक रोलिंग अपडेट शुरू किया। नए पॉड्स की स्थिति जांचें, और पुराने पॉड्स को get pods उपकमांड के साथ समाप्त होते हुए देखें:
kubectl get pods
अपडेट सत्यापित करें
सबसे पहले, जांचें कि ऐप चल रहा है या नहीं। उजागर आईपी पते और पोर्ट को खोजने के लिए, describe service कमांड चलाएँ:
kubectl describe services/kubernetes-bootcamp
NODE_PORT नामक एक पर्यावरण चर बनाएं जिसमें निर्दिष्ट नोड पोर्ट का मान हो:
rollout undo कमांड परिनियोजन को पिछली ज्ञात स्थिति (छवि का v2) में वापस कर देता है। अद्यतन संस्करणित हैं और आप परिनियोजन की किसी भी पूर्व ज्ञात स्थिति पर वापस लौट सकते हैं।
पॉड्स को फिर से सूचीबद्ध करने के लिए get pods उपकमांड का उपयोग करें:
kubectl get pods
चार पॉड्स चल रहे हैं। इन पॉड्स पर तैनात छवि की जांच करने के लिए, <कोड>describe pods उपकमांड का उपयोग करें:
kubectl describe pods
परिनियोजन एक बार फिर ऐप के स्थिर संस्करण (v2) का उपयोग कर रहा है। रोलबैक सफल रहा.
5.2.6.2 - इंटरएक्टिव ट्यूटोरियल - अपने ऐप को अपडेट करना
प्रलेखन अनुपलब्ध
आपके क्लस्टर में किसी एप्लिकेशन को अपडेट करने के लिए इंटरैक्टिव ट्यूटोरियल उपलब्ध नहीं है।
अधिक जानकारी के लिए देखें काटाकोडा बंद करने की घोषणा.
5.3 - माइक्रोप्रोफाइल, कॉन्फिगमैप्स और सीक्रेट्स का उपयोग करके कॉन्फिगरेशन को बाह्यीकृत करना
इस ट्यूटोरियल में आप सीखेंगे कि अपने माइक्रोसर्विस के कॉन्फ़िगरेशन को कैसे और क्यों बाह्यीकृत करना है।
विशेष रूप से, आप सीखेंगे कि एनवायरमेंट वेरिएबल सेट करने के लिए कुबेरनेट्स कॉन्फिगमैप्स और सीक्रेट्स का
उपयोग कैसे करें और फिर माइक्रोप्रोफाइल कॉन्फिग का उपयोग करके उनका उपभोग करें।
शुरू करने से पहले
कुबेरनेट्स कॉन्फ़िगमैप्स और सीक्रेट बनाना
कुबेरनेट्स में डॉकर कंटेनर के लिए एनवायरमेंट वेरिएबल सेट करने के कई तरीके हैं, जिनमें शामिल हैं: Dockerfile,
kubernetes.yml, Kubernetes ConfigMaps, और Kubernetes Secrets। ट्यूटोरियल में, आप सीखेंगे कि अपने
एनवायरमेंट वेरिएबल सेट करने के लिए कुबेरनेट्स कॉन्फिगमैप्स और कुबेरनेट्स सीक्रेट्स का उपयोग कैसे करें, जिनके वैल्यू
आपके माइक्रोसर्विसेज में इंजेक्ट किए जाएंगे। कॉन्फिगमैप्स और सीक्रेट्स का उपयोग करने का एक लाभ यह है कि
उन्हें कई कंटेनरों में फिर से उपयोग किया जा सकता है, जिसमें विभिन्न कंटेनरों के लिए अलग-अलग एनवायरमेंट वेरिएबल
को सौंपा जाना भी शामिल है।
कॉन्फिगमैप्स एपीआई ऑब्जेक्ट हैं जो गैर-गोपनीय key-value जोड़े को संग्रहीत करते हैं।
इंटरएक्टिव ट्यूटोरियल में आप सीखेंगे कि एप्लिकेशन के नाम को संग्रहीत करने के लिए
कॉन्फिगमैप का उपयोग कैसे करना है। कॉन्फ़िगमैप्स के संबंध में अधिक जानकारी के लिए,
आप दस्तावेज़ यहाँ पा सकते हैं)।
हालाँकि सीक्रेट्स का उपयोग भी key-value जोड़े को संग्रहीत करने के लिए किया जाता है,
वे कॉन्फिगमैप्स से भिन्न होते हैं क्योंकि वे गोपनीय/संवेदनशील जानकारी के लिए होते हैं और Base64 एन्कोडिंग
का उपयोग करके संग्रहीत होते हैं। यह सीक्रेट को क्रेडेंशियल्स, keys और टोकन जैसी चीज़ों को संग्रहीत करने
के लिए उपयुक्त विकल्प बनाता है, जिनमें से पहला काम आप इंटरैक्टिव ट्यूटोरियल में करेंगे। सीक्रेट के बारे
में अधिक जानकारी के लिए, आप दस्तावेज़ यहाँ पा सकते हैं।
कोड से कॉन्फ़िग को बाह्यीकृत करना
बाह्यीकृत एप्लिकेशन कॉन्फ़िगरेशन उपयोगी है क्योंकि कॉन्फ़िगरेशन आमतौर पर आपके वातावरण के आधार पर
बदलता है। इसे पूरा करने के लिए, हम Java के Contexts and Dependency Injection (CDI) और माइक्रोप्रोफाइल
कॉन्फ़िगरेशन का उपयोग करेंगे। माइक्रोप्रोफाइल कॉन्फिग माइक्रोप्रोफाइल की एक विशेषता है, जो क्लाउड-नेटिव
माइक्रोसर्विसेज को विकसित करने और डेप्लॉय करने के लिए open Java प्रौद्योगिकियों का एक सेट है।
सीडीआई (CDI) एक स्टैंडर्ड तरीका है जो एप्लिकेशन में डिपेंडेंसी इंजेक्शन (dependency injection) को आसान बनाता है।
इसकी मदद से, एप्लिकेशन को अलग-अलग हिस्सों (beans) से मिलाकर बनाया जा सकता है जो एक-दूसरे से कम जुड़े होते हैं।
इससे एप्लिकेशन को बनाना और सुधारना आसान हो जाता है। माइक्रोप्रोफाइल कॉन्फिग ऐप्स और माइक्रोसर्विसेज को एप्लिकेशन,
रनटाइम और एनवायरमेंट सहित विभिन्न स्रोतों से कॉन्फिग के गुण प्राप्त करने का एक मानक तरीका प्रदान करता है। स्रोत की
परिभाषित प्राथमिकता के आधार पर, गुणों को स्वचालित रूप से गुणों के एक सेट में संयोजित किया जाता है जिसे
एप्लिकेशन एपीआई के माध्यम से एक्सेस कर सकता है। साथ में, सीडीआई और माइक्रोप्रोफाइल का उपयोग कुबेरनेट्स
कॉन्फिगमैप्स और सीक्रेट्स से बाहरी रूप से प्रदान की गई संपत्तियों को पुनः प्राप्त करने और आपके एप्लिकेशन कोड
में इंजेक्ट करने के लिए इंटरएक्टिव ट्यूटोरियल में किया जाएगा।
कई ओपन सोर्स फ्रेमवर्क और रनटाइम माइक्रोप्रोफाइल कॉन्फ़िगरेशन को लागू और समर्थ करते हैं। पूरे इंटरैक्टिव
ट्यूटोरियल के दौरान, आप ओपन लिबर्टी का उपयोग करेंगे, जो क्लाउड-नेटिव ऐप्स और माइक्रोसर्विसेज को बनाने
और चलाने के लिए एक फ्लेक्सिबल ओपन-सोर्स Java रनटाइम है। हालाँकि, इसके बजाय किसी भी माइक्रोप्रोफाइल
संगत रनटाइम का उपयोग किया जा सकता है।
उद्देश्य
एक कुबेरनेट्स कॉन्फ़िगमैप और सीक्रेट बनाएं
माइक्रोप्रोफाइल कॉन्फ़िगरेशन का उपयोग करके माइक्रोसर्विस कॉन्फ़िगरेशन इंजेक्ट करें
उदाहरण: माइक्रोप्रोफाइल, कॉन्फिगमैप्स और सीक्रेट्स का उपयोग करके कॉन्फिगरेशन को बाह्यीकृत करना
kubeadm - एक सुरक्षित कुबेरनेट्स क्लस्टर का आसानी से प्रावधान करने के लिए CLI टूल।
अवयव
kubelet - प्राथमिक प्रतिनिधि(एजेंट) जो प्रत्येक नोड पर चलता है। क्यूबलेट पॉडस्पेक्स का एक सेट लेता है
और यह सुनिश्चित करता है कि वर्णित कंटेनर चल रहे हैं और स्वस्थ हैं।
kube-apiserver -
REST API जो API वस्तु जैसे पॉड्स, सेवाएं, प्रतिकृति नियंत्रक के लिए डेटा को मान्य और कॉन्फ़िगर करता है।
kube-controller-manager - डेमॉन जो कुबेरनेट्स के साथ भेजे गए कोर कंट्रोल लूप्स को एम्बेड करता है।
kube-proxy - बैक-एंड के एक सेट में साधारण TCP/UDP स्ट्रीम फॉरवर्डिंग (आगे भेजना) या राउंड-रॉबिन TCP/UDP फॉरवर्डिंग कर सकते हैं।
kube-scheduler -
अनुसूचक जो उपलब्धता, प्रदर्शन और क्षमता का प्रबंधन करता है।
इस खंड में "अप्रकाशित" API के लिए दस्तावेज़ शामिल हैं जिनका उपयोग कुबेरनेट्स घटकों या उपकरणों को कॉन्फ़िगर करने के लिए किया जाता है। इनमें से अधिकांश APIs, RESTful तरीके से API सर्वर द्वारा उजागर नहीं होते हैं हालांकि वे एक उपयोगकर्ता या क्लस्टर के उपयोगकर्ता या प्रबंधक के लिए आवश्यक हैं।
कुबेरनेट्स सिस्टम के साथ काम करने में आपकी सहायता के लिए कुबेरनेट्स में कई उपकरण शामिल हैं।
crictl
crictlCRI-संगत कंटेनर रनटाइम के
निरीक्षण और डिबगिंग के लिए एक कमांड-लाइन इंटरफ़ेस है।
Dashboard
कुबेरनेट्स का
वेब डैशबोर्ड आपको क्लस्टर में कंटेनरीकृत अनुप्रयोगों को तैनात करने,
उनकी समस्या का निवारण करने और क्लस्टर के संसाधनों को प्रबंधित करने की अनुमति देता है।
Helm
🛇 यह वस्तु कोई अन्य पक्ष की परियोजना या उत्पाद से जुड़ा है जो कुबेरनेट्स का हिस्सा नहीं हैं। अधिक जानकारी के लिए पढ़ें
हेल्म पूर्व-कॉन्फ़िगर कुबेरनेट्स संसाधनों के पैकेजों के प्रबंधन के लिए एक उपकरण है।
इन पैकेजों को हेल्म चार्ट के रूप में जाना जाता है।
हेल्म का उपयोग करें:
कुबेरनेट्स चार्ट के रूप में पैक किए गए लोकप्रिय सॉफ़्टवेयर को ढूंढें और उपयोग करें।
अपने ख़ुद के एप्लिकेशन को कुबेरनेट्स चार्ट के रूप में साझा करें।
बुद्धिमत्ता से अपने कुबेरनेट्स मैनिफ़ेस्ट फ़ाइलों को प्रबंधित करें।
हेल्म पैकेजों के रिलीज़ प्रबंधित करें।
Kompose
कॉम्पोज़ एक उपकरण है, जो डॉकर कंपोज़ उपयोगकर्ताओं
को कुबेरनेट्स पर जाने में मदद करता है।
कॉम्पोज़ का उपयोग करें:
डॉकर कंपोज़ फ़ाइल को कुबेरनेट्स ऑब्जेक्ट्स में अनुवाद करें।
स्थानीय डॉकर डेवलपमेंट से कुबेरनेट्स एप्लीकेशनों को प्रबंधित करें।
Kui एक GUI उपकरण है, जो आपके सामान्य kubectl
कमांड लाइन अनुरोधों को लेकर ग्राफिक्स के साथ प्रतिक्रिया देता है।
Kui सामान्य kubectl कमांड लाइन अनुरोधों को लेकर ग्राफिक्स के साथ प्रतिक्रिया देता है। ASCII टेबल्स के बजाय,
Kui उन टेबल्स के साथ एक GUI प्रदान करता है, जिन्हें आप सॉर्ट कर सकते हैं।
Kui आपको देता है:
कॉपी और पेस्ट करने के बजाय सीधे लंबे स्वचालित रूप से जेनरेटेड किए गए संसाधनों के नामों पर क्लिक करें।
Kubectl कमांड टाइप करें और उन्हें निष्पादन होते हुए देखें, यहां तक कि कभी-कभी Kubectl से भी तेज।
एक जॉब क्वेरी करें और इसके निष्पादन को
वॉटरफॉल के डायग्राम के रूप में देखें।
एक टैब्ड UI का उपयोग करके अपने क्लस्टर में संसाधनों पर क्लिक करें।
Minikube
मिनीक्यूब एक उपकरण है, जो डेवलपमेंट और परीक्षण जैसे उद्देश्यों
के लिए आपके वर्कस्टेशन पर स्थानीय रूप से एक-नोड वाले कुबेरनेट्स क्लस्टर को चलाता है।
7 - कुबेरनेटेस डॉक्स में योगदान दे
कुबेरनेटस सभी योगदानकर्ताओ से सुधार का स्वागत करता है चाहे वो नए हो या अनुभवी!
टिप्पणी:
कुबेरनेटस मे योगदान करने के बारे मे अधिक जानकारी के लिए
योगदानकर्ता प्रलेखन देखें।
कुबेरनेटस रिलीज चक्र मे प्रलेखन की देख रेख और प्रकाशन करते हैं
शुरू करना
कोई भी प्रलेखन के बारे मे इशू खोल सकता है या कुबेरनेटस वेबसाइट
kubernetes/website GitHub रिपॉजिटरी
मे बदलाव पुल अनुरोध (PR) द्वारा कर सकता है।
आपको Git और
Github
की जानकारी होनी चाहिए ताकि आप कुबेरनेटेस समुदाय मे प्रभावी रूप से काम कर सकें।
आकृति - नए योगदानकर्ताओं के लिए योगदान शुरू करने का रास्ता
ऊपर दी गई आकृति नए योगदानकर्ता के लिए दिशानिर्देश हैं। Sign up या review के लिए आप इनमे से कुछ या सभी निर्देशों का पालन कर सकते हैं। अब आप PR ओपन करने के लिए तैयार हैं जो आपके योगदान के उद्देश को पूरा करे जो Open PR खंड मे सूचीबद्ध हैं। आपके सभी प्रश्नों का सदैव स्वागत है।
कुबेरनेटस समुदाय मे कुछ कार्यों के लिए अधिक विश्वास और अभिगम की आवश्यकता होती है।
भूमिका और अनुमति के बारे मे ज्यादा जानकारी के लिए SIG Docs मे भाग लेना को देखें।
आपका पहला योगदान
आप अपने पहले योगदान की तैयारी के लिए दिए गए दिशानिर्देश को देख सकते हैं। नीचे दिया हुआ चित्र दिशानिर्देश और उसकी विस्तार मे जानकारी देता है।
आकृति - आपके पहले योगदान की तैयारी
योगदान करने के विभिन्न तरीकों को जानने के लिए योगदानकर्ता अवलोकन को पढ़ें।
SIG Docs योगदानकर्ताओ का एक समूह है
जो कुबेरनेटेस प्रलेखन और वेबसाईट की देख रेख और उसे प्रकाशित करता है।
SIG Docs मे शामिल होना कुबेरनेटस योगदानकर्ताओ (फीचर विकास या उससे अन्यथा) के लिए
कुबेरनेटस परियोजना पर प्रभाव डालने का बेहतरीन तरीका है।
SIG Docs विडिओ बैठक मे शामिल हो जो हर दो सप्ताह मे होती है। बैठक की घोषणा हमेशा #sig-docs पर की जाती है और कुबेरनेटेस समुदाय बैठक कैलंडर में जोड़ दिया जाता है। आपको Zoom client डाउनलोड करने की जरूरत पड़ेगी या फोन की मदद से भी डायल कर सकते हैं।
जिन सप्ताह मे Zoom बैठक नहीं हुई हो तब SIG Docs अतुल्यकालिक बैठक को जॉइन करे जो Slack पर होती है। बैठक की घोषणा हमेशा #sig-docs पर होती है। बैठक की घोषणा के बाद आप किसी भी सूत्र मे 24 घंटे तक योगदान कर सकते है।
योगदान करने के अन्य तरीके
कुबेरनेटस समुदाय साइट पर जाए। Twitter या Slack Overflow मैं भाग ले, कुबेरनेटस स्थानीय आयोजन और मिलन के बारे मे जाने ।
यह डैशबोर्ड Google Data Studio का उपयोग करके बनाया गया है और Google Analytics का उपयोग करके Kubernetes.io पर एकत्रित जानकारी दिखाता है।
डैशबोर्ड का उपयोग करना
डिफ़ॉल्ट रूप से, डैशबोर्ड पिछले 30 दिनों के सभी एकत्रित विश्लेषण दिखाता है। विभिन्न दिनांक सीमा मे आने वाला डेटा देखने के लिए date selector का उपयोग करें। अन्य फ़िल्टरिंग विकल्प आपको उपयोगकर्ता का स्थान, साइट तक पहुंचने के लिए उपयोग किए जाने वाले उपकरण, उपयोग किए गए दस्तावेज़ों के अनुवाद, और बहुत से चीज़ों का डेटा देखने की अनुमति देते हैं।
यदि आप इस डैशबोर्ड में कोई समस्या देखते हैं, या किसी सुधार का अनुरोध करना चाहते हैं, तो कृपया एक इशू बनाएं।