This is the multi-page printable view of this section. Click here to print.
प्रलेखन
- 1: कुबेरनेट्स प्रलेखन
- 2: शुरू करना
- 2.1: सीखने का माहौल
- 2.2: उत्पादन वातावरण
- 2.2.1: कंटेनर रनटाइम
- 2.2.2: Turnkey Cloud Solutions
- 2.2.3: परिनियोजन टूल के साथ कुबेरनेट्स स्थापित करे
- 2.2.4: कुबेरनेट्स में Windows
- 2.3: उत्तम प्रथाएं
- 3: अवधारणाएँ
- 3.1: अवलोकन
- 3.2: सर्विसेज, लोड बैलेंसिंग और नेटवर्किंग
- 3.3: नीतियाँ
- 4: कार्य
- 4.1: उपकरण स्थापित करें
- 4.1.1: Linux पर kubectl इंस्टॉल और सेट अप करें
- 4.1.2: macOS पर kubectl इंस्टॉल और सेटअप करें
- 4.1.3: Windows पर kubectl इंस्टॉल और सेटअप करें
- 4.2: नेटवर्क पॉलिसी प्रोवाइडर इंस्टॉल करें
- 4.3: जॉब चलाएं
- 4.3.1: क्रॉनजॉब के साथ स्वचालित कार्य चलाना
- 4.3.2: वर्क क्यू का उपयोग करके मोटे समानांतर प्रसंस्करण
- 4.3.3: वर्क क्यू का उपयोग करके सूक्ष्म समानांतर प्रसंस्करण
- 4.3.4: स्थिर कार्य असाइनमेंट के साथ समानांतर प्रसंस्करण के लिए अनुक्रमित जॉब
- 4.3.5: पॉड-टू-पॉड कम्युनिकेशन के साथ जॉब
- 4.3.6: समानांतर प्रसंस्करण विस्तार
- 4.3.7: पॉड फेलियर पॉलिसी
- 4.4: TLS
- 5: ट्यूटोरियल
- 5.1: हेलो मिनीक्यूब
- 5.2: बुनियादी कुबेरनेट्स सीखें
- 5.2.1: एक क्लस्टर बनाएं
- 5.2.1.1: Minikube का उपयोग कर क्लस्टर बनाना
- 5.2.2: डिप्लॉय ऐप
- 5.2.3: ऐप का अन्वेषण करें
- 5.2.3.1: पॉड्स और नोड्स की जांच करना
- 5.2.4: अपने ऐप को सार्वजनिक रूप से एक्सपोस करें
- 5.2.5: अपने ऐप को स्केल करें
- 5.2.5.1: अपने ऐप के कई इंस्टेंस चलाना
- 5.2.6: अपना ऐप अपडेट करें
- 5.2.6.1: रोलिंग अपडेट करना
- 6: संदर्भ
- 6.1: शब्दकोष
- 6.2: शेडुलिंग
- 6.3: अन्य उपकरण
- 7: कुबेरनेटेस डॉक्स में योगदान दे
- 7.1: प्रलेखन शैली अवलोकन
- 7.2: साइट विश्लेषिकी देखना
- 8: डॉक्स स्मोक टेस्ट पेज
1 - कुबेरनेट्स प्रलेखन
1.1 - प्रलेखन के उपलब्ध संस्करण
इस वेबसाइट में कुबेरनेट्स के वर्तमान और चार पिछले संस्करण के प्रलेखन शामिल हैं।
2 - शुरू करना
यह भाग कुबेरनेट्स को सेटअप करने और चलाने के विभिन्न तरीकों को सूचीबद्ध करता है। जब आप कुबेरनेट्स सेटअप करते हैं, तो इसके आधार पर एक इंस्टॉलेशन प्रकार चुनें: रखरखाव में आसानी, सुरक्षा, नियंत्रण, उपलब्ध संसाधन और क्लस्टर के संचालन और प्रबंधन के लिए आवश्यक विशेषज्ञता।
कुबेरनेट्स क्लस्टर को स्थानीय मशीन पर, क्लाउड में, या अपने स्वयं के डेटासेंटर में डिप्लॉय करने के लिए आप कुबेरनेट्स डाउनलोड कर सकते हैं।
यदि आप कुबेरनेट्स क्लस्टर को स्वयं संभालना नहीं चाहते हैं, तो आप एक संचालन सेवा चुन सकते हैं, जैसे ये प्रमाणित प्लेटफॉर्म। क्लाउड की विस्तृत श्रृंखला और बेयर मेटल वातावरण के लिए अन्य मानकीकृत और कस्टम समाधान भी उपलब्ध हैं।
सीखने का वातावरण
यदि आप कुबेरनेट्स सीख रहे हैं, तो कुबेरनेट्स समुदाय द्वारा समर्थित टूल का उपयोग करें, या स्थानीय मशीन पर कुबेरनेट्स क्लस्टर सेटअप करने के लिए इकोसिस्टम में उपलब्ध टूल का उपयोग करें। इंस्टॉल टूल्स देखें।
प्रोडक्शन वातावरण
प्रोडक्शन वातावरण के लिए समाधान का मूल्यांकन करते समय, विचार करें कि कुबेरनेट्स क्लस्टर के किन पहलुओं (या abstractions) का संचालन आप स्वयं प्रबंधित करना चाहते हैं और किसे आप एक प्रदाता को सौंपना पसंद करते हैं।
स्वयं प्रबंधित कर रहे कुबेरनेट्स क्लस्टर डिप्लॉय करने के लिए kubeadm आधिकारिक टूल है।
आगे क्या है
- कुबेरनेट्स डाउनलोड करें
kubectl
सहित डाउनलोड और टूल इंस्टॉल करें।- अपने नए क्लस्टर के लिए कंटेनर रनटाइम चुनें।
- क्लस्टर सेटअप के लिए सर्वोत्तम प्रक्रियाओं के बारे में जानें।
कुबेरनेट्स के कण्ट्रोल प्लेन को Linux पर चलाने के लिए डिज़ाइन किया गया है। अपने क्लस्टर के अंदर आप Linux या अन्य ऑपरेटिंग सिस्टम पर एप्लिकेशन चला सकते हैं, जिसमें windows भी शामिल हैं।
2.1 - सीखने का माहौल
2.2 - उत्पादन वातावरण
उत्पादन-गुणवत्ता वाले कुबेरनेट्स क्लस्टर के लिए योजना और तैयारी की आवश्यकता होती है। यदि आपका कुबेरनेट्स क्लस्टर महत्वपूर्ण कार्यभार चलाने के लिए है, तो इसे लचीला होने के लिए कॉन्फ़िगर किया जाना चाहिए। यह पेज उन चरणों के बारे में बताता है जो आप उत्पादन के लिए तैयार क्लस्टर सेटअप करने के लिए, या उत्पादन के उपयोग के लिए मौजूदा क्लस्टर को अपग्रेड करने के लिए उठा सकते हैं। यदि आप पहले से ही उत्पादन सेटअप से परिचित हैं और लिंक चाहते हैं, तो आगे जाएं।
उत्पादन विचार
आमतौर पर, उत्पादन कुबेरनेट्स क्लस्टर वातावरण में व्यक्तिगत सीखने, विकास या परीक्षण वातावरण कुबेरनेट्स की तुलना में अधिक आवश्यकताएं होती हैं। एक उत्पादन वातावरण की आवश्यकता ये हो सकती है, जैसे: कई उपयोगकर्ताओं द्वारा सुरक्षित पहुंच, लगातार उपलब्धता, और बदलती मांगों के लिए संसाधनों को अनुकूलित करना।
जैसा कि आप तय करते हैं कि आप अपने उत्पादन कुबेरनेट्स वातावरण को कहाँ रखना चाहते हैं (परिसर या क्लाउड में) और प्रबंधन की मात्रा जिसे आप दूसरों को देना या सौंपना चाहते हैं, विचार करें कि कुबेरनेट्स क्लस्टर के लिए आपकी आवश्यकताएं निम्नलिखित मुद्दों से कैसे प्रभावित होती हैं:
-
उपलब्धता: सिंगल-मशीन कुबेरनेट्स सीखने का माहौल में विफलता का एक बिंदु है। अत्यधिक उपलब्ध क्लस्टर बनाने का अर्थ है:
- कण्ट्रोल प्लेन को वर्कर नोड्स से अलग करना।
- कई नोड्स पर कण्ट्रोल प्लेन घटकों की प्रतिकृति।
- क्लस्टर के लिए संतुलन यातायात लोड करेंAPI server.
- पर्याप्त वर्कर नोड्स उपलब्ध होना, या जल्दी से उपलब्ध होने में सक्षम होना, क्योंकि बदलते वर्कलोड इसे वारंट करते हैं।
-
स्केल: यदि आप उम्मीद करते हैं कि आपके उत्पादन कुबेरनेट्स पर्यावरण को मांग की एक स्थिर मात्रा प्राप्त होगी, तो आप उस क्षमता के लिए सेटअप करने में सक्षम हो सकते हैं जिसकी आपको आवश्यकता है और किया जा सकता है। हालाँकि, यदि आप समय के साथ मांग बढ़ने की उम्मीद करते हैं या मौसम या विशेष घटनाओं जैसी चीजों के आधार पर अचानक से बदलते हैं, तो आपको योजना बनाने की आवश्यकता है कि कण्ट्रोल प्लेन और वर्कर नोड्स के लिए अधिक अनुरोधों से बढ़े दबाव को कैसे दूर किया जाए या अप्रयुक्त संसाधनों को कम करने के लिए स्केल किया जाए।
-
सुरक्षा और एक्सेस मैनेजमेंट: आपके अपने कुबेरनेट्स लर्निंग क्लस्टर पर पूर्ण व्यवस्थापकीय विशेषाधिकार हैं। लेकिन महत्वपूर्ण कार्यभार के साथ साझा क्लस्टर, और एक या दो से अधिक उपयोगकर्ता, को क्लस्टर संसाधनों तक कौन और क्या एक्सेस कर सकता है, इसके लिए अधिक परिष्कृत दृष्टिकोण की आवश्यकता होती है। आप यह सुनिश्चित करने के लिए (भूमिका-आधारित एक्सेस कण्ट्रोल) और अन्य सुरक्षा तंत्रों का उपयोग कर सकते हैं कि उपयोगकर्ता और कार्यभार उन संसाधनों तक पहुँच प्राप्त कर सकते हैं जिनकी उन्हें आवश्यकता है, साथ ही में कार्यभार और क्लस्टर को साथ में सुरक्षित रख सके। आप नीतियों और कंटेनर संसाधन को प्रबंधित करके उन संसाधनों की सीमा निर्धारित कर सकते हैं जिन तक उपयोगकर्ता और कार्यभार पहुंच सकते हैं।
कुबेरनेट्स उत्पादन वातावरण को स्वयं बनाने से पहले, इस कार्य में से कुछ या सभी को सौंपने पर विचार करें टर्नकी क्लाउड सॉल्यूशंस प्रदाता या अन्य कुबेरनेट्स पार्टनर्स विकल्पों में शामिल हैं:
- सर्वरलेस: किसी क्लस्टर को प्रबंधित किए बिना केवल तृतीय-पक्ष उपकरण पर कार्यभार चलाएं। आपसे सीपीयू उपयोग, मेमोरी और डिस्क अनुरोध जैसी चीज़ों के लिए शुल्क लिया जाएगा।
- व्यवस्थित कण्ट्रोल प्लेन: प्रदाता को क्लस्टर के कण्ट्रोल प्लेन के पैमाने और उपलब्धता का प्रबंधन करने दें, साथ ही पैच और अपग्रेड को भी संभालें।
- व्यवस्थित वर्कर नोड्स: अपनी आवश्यकताओं को पूरा करने के लिए नोड्स के पूल को कॉन्फ़िगर करें, फिर प्रदाता सुनिश्चित करता है कि वे नोड उपलब्ध हैं और जरूरत पड़ने पर अपग्रेड को लागू करने के लिए तैयार हैं।
- एकीकरण: ऐसे प्रदाता हैं जो कुबेरनेट्स को अन्य सेवाओं के साथ एकीकृत करते हैं जिनकी आपको आवश्यकता हो सकती है, जैसे भंडारण, कंटेनर रजिस्ट्रियां, प्रमाणीकरण तरीके, और विकास उपकरण।
चाहे आप कुबेरनेट्स क्लस्टर का निर्माण स्वयं करें या भागीदारों के साथ काम करें, अपनी आवश्यकताओं का मूल्यांकन करने के लिए निम्नलिखित अनुभागों की समीक्षा करें क्योंकि वे आपके क्लस्टर से संबंधित हैं कण्ट्रोल प्लेन, वर्कर नोड्स, यूज़र एक्सेस, और वर्कलोड रिसोर्सस.
उत्पादन क्लस्टर सेटअप
उत्पादन-गुणवत्ता वाले कुबेरनेट्स क्लस्टर में, कण्ट्रोल प्लेन क्लस्टर को उन सेवाओं से प्रबंधित करता है जिन्हें विभिन्न तरीकों से कई कंप्यूटरों में फैलाया जा सकता है। हालाँकि, प्रत्येक वर्कर नोड एक एकल इकाई का प्रतिनिधित्व करता है जिसे कुबेरनेट्स पॉड चलाने के लिए कॉन्फ़िगर किया गया है।
उत्पादन कण्ट्रोल प्लेन
सबसे सरल कुबेरनेट्स क्लस्टर में एक ही मशीन पर चलने वाले संपूर्ण कण्ट्रोल प्लेन और वर्कर नोड सेवाएं होती हैं। आप वर्कर नोड्स को जोड़कर उस वातावरण को विकसित कर सकते हैं, जैसा कि कुबेरनेट्स कंपोनेंट्स के डायग्राम में दर्शाया गया है। यदि क्लस्टर थोड़े समय के लिए उपलब्ध होने के लिए है, या अगर कुछ गंभीर रूप से गलत हो जाता है, तो इसे छोड़ दिया जा सकता है, यह आपकी आवश्यकताओं को पूरा कर सकता है।
यदि आपको अधिक स्थायी, अत्यधिक उपलब्ध क्लस्टर की आवश्यकता है, तो आपको कण्ट्रोल प्लेन को विस्तारित करने के तरीकों पर विचार करना चाहिए। डिजाइन के अनुसार, एक मशीन पर चलने वाली एक-मशीन कण्ट्रोल प्लेन सेवाएं अत्यधिक उपलब्ध नहीं हैं। यदि क्लस्टर को चालू रखना और यह सुनिश्चित करना कि कुछ गलत होने पर इसकी मरम्मत की जा सकती है, महत्वपूर्ण है, तो इन चरणों पर विचार करें:
- डिप्लॉयमेंट टूल्स चुनें: आप kubeadm, kops, और kubespray जैसे टूल का उपयोग करके एक कण्ट्रोल प्लेन को तैनात कर सकते हैं। उनमें से प्रत्येक डिप्लॉयमेंट विधियों का उपयोग करके उत्पादन-गुणवत्ता डिप्लॉयमेंट के लिए युक्तियों को जानने के लिए डिप्लॉयमेंट टूल्स के साथ कुबेरनेट्स स्थापित करना देखें। आपके डिप्लॉयमेंट के साथ उपयोग करने के लिए विभिन्न कंटेनर रनटाइम उपलब्ध हैं।
- सर्टिफ़िकेट प्रबंधित करे: कण्ट्रोल प्लेन सेवाओं के बीच सुरक्षित संचार सर्टिफ़िकेटस का उपयोग करके कार्यान्वित किया जाता है। डिप्लॉयमेंट के दौरान सर्टिफ़िकेट स्वचालित रूप से उत्पन्न होते हैं या आप अपने स्वयं के सर्टिफ़िकेट अथॉरिटी का उपयोग करके उन्हें उत्पन्न कर सकते हैं। विवरण के लिए PKI सर्टिफ़िकेटस और आवश्यकताएं देखें।
- एपिसर्वर के लिए लोड बैलेंसर कॉन्फ़िगर करें: विभिन्न नोड्स पर चल रहे एपिसर्वर सर्विस इंस्टेंस के लिए बाहरी एपीआई अनुरोधों को वितरित करने के लिए लोड बैलेंसर को कॉन्फ़िगर करें। विवरण के लिए एक बाहरी लोड बैलेंसर बनाना देखें।
- अलग और बैकअप etcd सेवा: अतिरिक्त सुरक्षा और उपलब्धता के लिए etcd सेवाएं या तो अन्य कंट्रोल प्लेन सेवाओं के समान मशीनों पर चल सकती हैं या अलग मशीनों पर चल सकती हैं। क्योंकि etcd क्लस्टर कॉन्फ़िगरेशन डेटा संग्रहीत करता है, etcd डेटाबेस का बैकअप नियमित रूप से किया जाना चाहिए ताकि यह सुनिश्चित हो सके कि यदि आवश्यक हो तो आप उस डेटाबेस की मरम्मत कर सकते हैं। etcd को कॉन्फ़िगर करने और उपयोग करने के विवरण के लिए etcd अक्सर पूछे जाने वाले प्रश्न देखें। विवरण के लिए कुबेरनेट्स के लिए ऑपरेटिंग etcd क्लस्टर और क्यूबएडीएम के साथ एक उच्च उपलब्धता etcd क्लस्टर स्थापित करें देखें।
- मल्टीपल कण्ट्रोल प्लेन सिस्टम बनाएं: उच्च उपलब्धता के लिए, कण्ट्रोल प्लेन एक मशीन तक सीमित नहीं होना चाहिए। यदि कण्ट्रोल प्लेन सेवाएं एक init सेवा (जैसे systemd) द्वारा चलाई जाती हैं, तो प्रत्येक सेवा को कम से कम तीन मशीनों पर चलना चाहिए। हालाँकि, कुबेरनेट्स में पॉड्स के रूप में कण्ट्रोल प्लेन सेवाएं चलाना सुनिश्चित करता है कि आपके द्वारा अनुरोधित सेवाओं की प्रतिकृति संख्या हमेशा उपलब्ध रहेगी। अनुसूचक फॉल्ट सहने वाला होना चाहिए, लेकिन अत्यधिक उपलब्ध नहीं होना चाहिए। कुबेरनेट्स सेवाओं के नेता चुनाव करने के लिए कुछ डिप्लॉयमेंट उपकरण राफ्ट सर्वसम्मति एल्गोरिथ्म की स्थापना करते हैं। यदि प्राथमिक चला जाता है, तो दूसरी सेवा स्वयं को चुनती है और कार्यभार संभालती है।
- कई क्षेत्रों में विस्तार करना: यदि अपने क्लस्टर को हर समय उपलब्ध रखना महत्वपूर्ण है, तो एक ऐसा क्लस्टर बनाने पर विचार करें, जो कई डेटा केंद्रों पर चलता हो, जिसे क्लाउड वातावरण में ज़ोन के रूप में संदर्भित किया जाता है। ज़ोन(zone) के समूहों को रीजन(region) कहा जाता है। एक ही क्षेत्र में कई क्षेत्रों में एक क्लस्टर फैलाकर, यह इस संभावना में सुधार कर सकता है कि एक क्षेत्र अनुपलब्ध होने पर भी आपका क्लस्टर कार्य करना जारी रखेगा। विवरण के लिए एक से अधिक ज़ोन मे चलाना देखें।
- चल रही सुविधाओं का प्रबंधन: यदि आप अपने क्लस्टर को समय के साथ रखने की योजना बनाते हैं, तो इसके स्वास्थ्य और सुरक्षा को बनाए रखने के लिए आपको कुछ कार्य करने होंगे। उदाहरण के लिए, यदि आपने क्यूबएडीएम के साथ स्थापित किया है, तो आपको सर्टिफिकेट प्रबंधन और क्यूबएडीएम क्लस्टर्स को अपग्रेड करने में मदद करने के लिए निर्देश दिए गए हैं, कुबेरनेट्स प्रशासनिक कार्यों की लंबी सूची के लिए क्लस्टर का एडमिनिस्टर देखें।
जब आप कण्ट्रोल प्लेन सेवाएं चलाते हैं, तो उपलब्ध विकल्पों के बारे में जानने के लिए, kube-apiserver, क्यूब-कंट्रोलर-मैनेजर, देखें। और क्यूब-शेड्यूलर कॉम्पोनेन्ट पेज। अत्यधिक उपलब्ध कंट्रोल प्लेन उदाहरणों के लिए अत्यधिक उपलब्ध टोपोलॉजी के लिए विकल्प, kubeadm के साथ अत्यधिक उपलब्ध क्लस्टर बनाना, और कुबेरनेट्स के लिए ऑपरेटिंग etcd क्लस्टर। etcd बैकअप योजना बनाने के बारे में जानकारी के लिए etcd क्लस्टर का बैकअप लेना देखें।
उत्पादन वर्कर नोड्स
उत्पादन-गुणवत्ता वाले कार्यभार को लचीला होने की आवश्यकता है और वे जिस चीज पर भरोसा करते हैं वह लचीला होना चाहिए (जैसे कि 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 जैसी सुविधाओं के लिए उच्च उपलब्धता सेट करें। और एपीआई सर्वर।
- kubeadm, kops या kubespray डिप्लॉयमेंट विधियों में से चुनें।
- अपना निर्धारित करके उपयोगकर्ता प्रबंधन को कॉन्फ़िगर करें प्रमाणीकरण और प्राधिकरण विधियां।
- सेटअप करके एप्लिकेशन वर्कलोड की तैयारी करें संसाधन सीमाएं, DNS ऑटोस्केलिंग और सेवा खाते।
2.2.1 - कंटेनर रनटाइम
आपको क्लस्टर में प्रत्येक नोड में एक कंटेनर रनटाइम इंस्टॉल करना होगा ताकि पॉड वहां चल सकें। यह पृष्ठ बताता है कि क्या शामिल है और नोड्स की स्थापना के लिए संबंधित कार्यों का वर्णन करता है।
कुबेरनेट्स 1.33 के लिए आवश्यक है कि आप एक रनटाइम का उपयोग करें जो कंटेनर रनटाइम इंटरफ़ेस (CRI) के अनुरूप है।
अधिक जानकारी के लिए CRI version support देखें।
यह पृष्ठ Linux पर कुबेरनेट्स के साथ कई सामान्य कंटेनर रनटाइम का उपयोग करने के विवरण सूचीबद्ध करता है:
टिप्पणी:
अन्य ऑपरेटिंग सिस्टम के लिए, अपने प्लेटफ़ॉर्म के अनुसार विशिष्ट प्रलेखन देखें।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.33 डिफ़ॉल्ट रूप से CRI API के v1 का उपयोग करता है। यदि कंटेनर रनटाइम v1 API का समर्थन नहीं करता है, तो क्यूबलेट वापस आ जाता है इसके बजाय (बहिष्कृत) v1alpha2 API का उपयोग करना।
कंटेनर रनटाइम
कंटेनरडी
यह खंड कंटेनरडी को CRI रनटाइम के रूप में उपयोग करने के लिए आवश्यक कदम है।
अपने सिस्टम पर containerd इंस्टॉल करने के लिए निम्नलिखित कमांड का उपयोग करें:
पूर्वापेक्षाएँ इंस्टॉल और कॉन्फ़िगर करें:
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo 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
पैकेज इंस्टॉल करने के निर्देश यहां देखे जा सकते हैं डॉकर इंजन इंस्टॉल करें. -
कंटेनरडी कॉन्फ़िगर करें:
sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml
-
कंटेनरडी को पुनरारंभ करें:
sudo systemctl restart containerd
Powershell सत्र प्रारंभ करें, $Version
को वांछित संस्करण पर सेट करें (उदाहरण: $Version=1.4.3
), और फिर निम्न आदेश चलाएँ:
-
कंटेनरडी डाउनलोड करें:
curl.exe -L https://github.com/containerd/containerd/releases/download/v$Version/containerd-$Version-windows-amd64.tar.gz -o containerd-windows-amd64.tar.gz tar.exe xvf .\containerd-windows-amd64.tar.gz
-
एक्सट्रेक्ट एंड कॉन्फ़िगर:
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"
-
कंटेनरडी शुरू करें:
.\containerd.exe --register-service Start-Service containerd
systemd` cgroup ड्राइवर का उपयोग करें
systemd
cgroup ड्राइवर {#containerd-systemd} का उपयोग करना
runc
के साथ /etc/containerd/config.toml
में systemd
cgroup ड्राइवर का उपयोग करने के लिए, सेट करें
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
यदि आप इस परिवर्तन को लागू करते हैं,तो सुनिश्चित करें कि आप फिर से कंटेनरडी को पुनरारंभ करें:
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
EOF
sudo 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
sudo 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` सेट करें।
कृपया यह करें
cat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /
EOF
cat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /
EOF
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -
sudo apt-get update
sudo apt-get install cri-o cri-o-runc
निम्नलिखित ऑपरेटिंग सिस्टम पर स्थापित करने के लिए, एनवायरनमेंट वेरिएबल 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` सेट करें।
कृपया यह करें
cat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /
EOF
cat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /
EOF
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers-cri-o.gpg add -
sudo apt-get update
sudo apt-get install cri-o cri-o-runc
निम्नलिखित ऑपरेटिंग सिस्टम पर स्थापित करने के लिए, एनवायरनमेंट वे वेरिएबल
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` सेट करें।
कृपया यह करें
sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/devel:kubic:libcontainers:stable.repo
sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo
sudo yum install cri-o
sudo zypper install cri-o
$VERSION
को CRI-O संस्करण में सेट करें जो आपके Kubernetes संस्करण से मेल खाता हो।
उदाहरण के लिए, यदि आप CRI-O 1.20, VERSION=1.20
स्थापित करना चाहते हैं।
आप इसके साथ उपलब्ध संस्करण पा सकते हैं:
sudo dnf module list cri-o
CRI-O फेडोरा पर विशिष्ट रिलीज के लिए पिनिंग का समर्थन नहीं करता है।
तब इसे करें:
sudo dnf module enable cri-o:$VERSION
sudo dnf install cri-o
CRI-O शुरू करें :
sudo systemctl daemon-reload
sudo systemctl enable crio --now
अधिक जानकारी के लिए CRI-O इंस्टॉलेशन गाइड देखें।
cgroup ड्राइवर
CRI-O डिफ़ॉल्ट रूप से systemd cgroup ड्राइवर का उपयोग करता है।
cgroupfs
cgroup ड्राइवर पर स्विच करने के लिए, या तो /etc/crio/crio.conf
संपादित करें या /etc/crio/crio.conf.d/02-cgroup-manager.conf
में ड्रॉप-इन कॉन्फ़िगरेशन रखें। उदाहरण के लिए:
[crio.runtime]
conmon_cgroup = "pod"
cgroup_manager = "cgroupfs"
कृपया बदले हुए conmon_cgroup
पर भी ध्यान दें, जिसे cgroupfs
के साथ CRI-O का उपयोग करते समय पॉड
मान पर सेट करना होगा।
आमतौर पर क्यूबलेट के cgroup ड्राइवर कॉन्फ़िगरेशन (आमतौर पर kubeadm के माध्यम से किया जाता है) और CRI-O को सिंक में रखना आवश्यक है।
डॉकर इंजन
डॉकर इंजन कंटेनर रनटाइम है जिसने यह सब शुरू किया। पूर्व में सिर्फ डॉकर के रूप में जाना जाता था,यह कंटेनर रनटाइम विभिन्न रूपों में उपलब्ध है। डॉकर इंजन इंस्टॉल करें आपके विकल्पों की व्याख्या करता है इस रनटाइम को इंस्टॉल करने के लिए।
डॉकर इंजन कुबेरनेट्स 1.33 के साथ सीधे संगत है, जो कि बहिष्कृत dockershim
घटक का उपयोग करता है। अधिक जानकारी के लिए
और संदर्भ, Dockershim deprecation FAQ देखें।
आप तृतीय-पक्ष एडेप्टर भी पा सकते हैं जो आपको कुबेरनेट्स के साथ डॉकर इंजन का उपयोग करने देता है, समर्थित Container Runtime Interface के माध्यम से (CRI)।
निम्नलिखित CRI एडेप्टर डॉकर इंजन के साथ काम करने के लिए डिज़ाइन किए गए हैं:
cri-dockerd
Mirantis से
मिरांटिस कंटेनर रनटाइम
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)। इसके विपरीत, कुबेरनेट्स में स्वतंत्र, कंपोज़ेबल नियंत्रण प्रक्रियाओं का एक सेट शामिल है जो वर्तमान स्थिति को प्रदान की गई वांछित स्थिति की ओर लगातार चलता है। इससे कोई फर्क नहीं पड़ता कि आप ए से सी कैसे प्राप्त करते हैं। केंद्रीकृत नियंत्रण की भी आवश्यकता नहीं है। इसका परिणाम एक ऐसी प्रणाली में होता है जो उपयोग में आसान और अधिक शक्तिशाली, मजबूत, लचीला और एक्स्टेंसिबल है।
आगे क्या है
- कुबेरनेट्स के घटक पर एक नज़र डालें ।
- क्या आप शुरू करने के लिए तैयार हैं?
3.2 - सर्विसेज, लोड बैलेंसिंग और नेटवर्किंग
कुबेर्नेट्स नेटवर्क मॉडल
कुबेर्नेट्स नेटवर्क मॉडल कई हिस्सों से बना है:
- क्लस्टर में प्रत्येक पॉड को अपना विशिष्ट क्लस्टर-व्यापी IP एड्रेस मिलता है।
क्लस्टर में प्रत्येक पॉड को अपना विशिष्ट क्लस्टर-व्यापी IP एड्रेस मिलता है।
-
एक पॉड का अपना निजी नेटवर्क नेमस्पेस होता है जिसे उस पॉड के सभी कंटेनर आपस में साझा करते हैं। एक ही पॉड में अलग-अलग कंटेनरों में चलने वाले प्रोसेस
localhost
के माध्यम से एक-दूसरे से बात कर सकते हैं। -
पॉड नेटवर्क (जिसे क्लस्टर नेटवर्क भी कहा जाता है) पॉड्स के बीच संचार को संभालता है। यह सुनिश्चित करता है कि (जानबूझकर नेटवर्क विभाजन को छोड़कर):
-
सभी पॉड्स सभी अन्य पॉड्स से बात कर सकते हैं, चाहे वे एक ही नोड पर हों या अलग-अलग नोड्स पर। पॉड्स सीधे एक-दूसरे से बिना किसी प्रॉक्सी या एड्रेस ट्रांसलेशन (NAT) के बात कर सकते हैं।
Windows पर, यह नियम होस्ट-नेटवर्क पॉड्स पर लागू नहीं होता।
-
नोड पर एजेंट (जैसे सिस्टम डेमॉन या kubelet) उस नोड पर सभी पॉड्स से बात कर सकते हैं।
-
-
सर्विस API आपको एक स्थायी IP एड्रेस या होस्टनेम प्रदान करता है जो एक या अधिक बैकएंड पॉड्स द्वारा चलाई जा रही सर्विस के लिए होता है। सर्विस बनाने वाले पॉड्स समय के साथ बदल सकते हैं।
-
कुबेर्नेट्स अपने आप एंडपॉइंटस्लाइस ऑब्जेक्ट्स को मैनेज करता है ताकि सर्विस के वर्तमान पॉड्स की जानकारी उपलब्ध रहे।
-
एक सर्विस प्रॉक्सी इम्प्लीमेंटेशन Service और EndpointSlice ऑब्जेक्ट्स के सेट की निगरानी करता है और डेटा प्लेन को प्रोग्राम करता है ताकि सर्विस ट्रैफिक को उसके बैकएंड्स तक रूट किया जा सके। यह ऑपरेटिंग सिस्टम या क्लाउड प्रोवाइडर के API का उपयोग करके पैकेट्स को इंटरसेप्ट या रीराइट करता है।
-
-
गेटवे API (या इसका पहले का वर्जन, इंग्रेस) आपको क्लस्टर के बाहर के क्लाइंट्स के लिए सर्विसेज को एक्सेस करने की सुविधा देता है।
- क्लस्टर में बाहर से एक्सेस के लिए एक सरल, लेकिन कम कॉन्फ़िगर करने योग्य तरीका सर्विस API के
type: LoadBalancer
के माध्यम से उपलब्ध है, जब एक सपोर्टेड क्लाउड प्रदाता (Cloud Provider) का उपयोग किया जाता है।
- क्लस्टर में बाहर से एक्सेस के लिए एक सरल, लेकिन कम कॉन्फ़िगर करने योग्य तरीका सर्विस API के
-
नेटवर्क पॉलिसी एक बिल्ट-इन Kubernetes API है जो आपको पॉड्स के बीच या पॉड्स और बाहरी दुनिया के बीच ट्रैफ़िक को नियंत्रित करने की अनुमति देता है।
पुराने कंटेनर सिस्टम में, विभिन्न होस्ट्स पर कंटेनरों के बीच स्वचालित कनेक्टिविटी नहीं होती थी, इसलिए कंटेनरों के बीच स्पष्ट लिंक बनाना या अन्य होस्ट्स पर कंटेनरों द्वारा उन्हें सुलभ बनाने के लिए कंटेनर पोर्ट्स को होस्ट पोर्ट्स पर मैप करना अक्सर आवश्यक होता था। Kubernetes में यह आवश्यक नहीं है; Kubernetes का मॉडल है कि पॉड्स को VMs या भौतिक होस्ट्स की तरह माना जा सकता है, पोर्ट आवंटन, नामकरण, सर्विस डिस्कवरी, लोड बैलेंसिंग, एप्लिकेशन कॉन्फ़िगरेशन और माइग्रेशन के दृष्टिकोण से।
इस मॉडल के केवल कुछ हिस्से ही Kubernetes द्वारा स्वयं लागू किए जाते हैं। अन्य भागों के लिए, Kubernetes API को परिभाषित करता है, लेकिन संबंधित कार्यक्षमता बाहरी घटकों द्वारा प्रदान की जाती है, जिनमें से कुछ वैकल्पिक हैं:
-
पॉड नेटवर्क नेमस्पेस सेटअप कंटेनर रनटाइम इंटरफ़ेस को लागू करने वाले सिस्टम-स्तरीय सॉफ़्टवेयर द्वारा संभाला जाता है।
-
पॉड नेटवर्क का प्रबंधन एक पॉड नेटवर्क कार्यान्वयन द्वारा किया जाता है। Linux पर, अधिकांश कंटेनर रनटाइम्स पॉड नेटवर्क कार्यान्वयन के साथ इंटरैक्ट करने के लिए कंटेनर नेटवर्किंग इंटरफ़ेस (CNI) का उपयोग करते हैं, इसलिए इन कार्यान्वयनों को अक्सर CNI प्लगइन्स कहा जाता है।
-
Kubernetes सर्विस प्रॉक्सींग का एक डिफ़ॉल्ट कार्यान्वयन प्रदान करता है, जिसे kube-proxy कहा जाता है, लेकिन कुछ पॉड नेटवर्क कार्यान्वयन इसके बजाय अपने स्वयं के सर्विस प्रॉक्सी का उपयोग करते हैं जो शेष कार्यान्वयन के साथ अधिक दृढ़ता से एकीकृत होता है।
-
NetworkPolicy आमतौर पर पॉड नेटवर्क कार्यान्वयन द्वारा भी लागू की जाती है। (कुछ सरल पॉड नेटवर्क कार्यान्वयन NetworkPolicy को लागू नहीं करते हैं, या एक व्यवस्थापक पॉड नेटवर्क को NetworkPolicy समर्थन के बिना कॉन्फ़िगर करना चुन सकता है। इन मामलों में, API अभी भी मौजूद होगा, लेकिन उसका कोई प्रभाव नहीं होगा।)
-
गेटवे API के कई कार्यान्वयन हैं, जिनमें से कुछ विशेष क्लाउड ए
आगे क्या है
सर्विसेज के साथ अनुप्रयोगों को कनेक्ट करना ट्यूटोरियल आपको एक व्यावहारिक उदाहरण के साथ सर्विसेज और Kubernetes नेटवर्किंग के बारे में सीखने में मदद करता है।
क्लस्टर नेटवर्किंग बताता है कि अपने क्लस्टर के लिए नेटवर्किंग कैसे सेटअप करें, और शामिल प्रौद्योगिकियों का एक समीक्षा भी प्रदान करता है।
3.3 - नीतियाँ
Kubernetes नीतियाँ वे कॉन्फ़िगरेशन होती हैं जो अन्य कॉन्फ़िगरेशन या रनटाइम व्यवहारों को प्रबंधित करती हैं। Kubernetes विभिन्न प्रकार की नीतियाँ प्रदान करता है, जो नीचे दी गई हैं:
API ऑब्जेक्ट्स का उपयोग करके नीतियाँ लागू करें
कुछ API ऑब्जेक्ट्स नीतियों के रूप में कार्य करते हैं। यहाँ कुछ उदाहरण दिए गए हैं:
- NetworkPolicies का उपयोग किसी वर्कलोड के लिए इनग्रेस और एग्रेस ट्रैफिक को प्रतिबंधित करने के लिए किया जा सकता है।
- LimitRanges विभिन्न ऑब्जेक्ट प्रकारों के बीच संसाधन आवंटन सीमाओं का प्रबंधन करते हैं।
- ResourceQuotas किसी नेमस्पेस के लिए संसाधन खपत को सीमित करती हैं।
Admission Controllers का उपयोग करके नीतियाँ लागू करें
एक admission controller API सर्वर में चलता है और API अनुरोधों को सत्यापित या बदल सकता है। कुछ admission controllers नीतियों को लागू करने के लिए कार्य करते हैं। उदाहरण के लिए, AlwaysPullImages admission controller प्रत्येक नए Pod में इमेज पुल नीति को Always
पर सेट करने के लिए सक्षम करता है।
Kubernetes के पास कई अंतर्निहित admission controllers हैं जिन्हें API सर्वर --enable-admission-plugins
फ्लैग के माध्यम से कॉन्फ़िगर किया जा सकता है।
Admission controllers के बारे में विस्तृत जानकारी, उपलब्ध admission controllers की पूरी सूची के साथ, एक समर्पित अनुभाग में प्रलेखित है:
ValidatingAdmissionPolicy का उपयोग करके नीतियाँ लागू करें
Validating admission policies, API सर्वर में कॉन्फ़िगर करने योग्य सत्यापन जांचों को लागू करने की अनुमति देती हैं, जो Common Expression Language (CEL) का उपयोग करती हैं। उदाहरण के लिए, एक ValidatingAdmissionPolicy
का उपयोग latest
इमेज टैग के उपयोग को अस्वीकृत करने के लिए किया जा सकता है।
एक ValidatingAdmissionPolicy
एक API अनुरोध पर कार्य करता है और गैर-अनुपालन कॉन्फ़िगरेशनों के बारे में उपयोगकर्ताओं को ब्लॉक, ऑडिट, और चेतावनी देने के लिए उपयोग किया जा सकता है।
ValidatingAdmissionPolicy
API के बारे में विवरण, उदाहरणों सहित, एक समर्पित अनुभाग में प्रलेखित है:
Dynamic admission control का उपयोग करके नीतियाँ लागू करें
Dynamic admission controllers (या admission webhooks) API सर्वर के बाहर एक अलग एप्लिकेशन के रूप में चलते हैं जो API अनुरोधों के सत्यापन या संशोधन के लिए वेबहुक अनुरोधों को प्राप्त करने के लिए पंजीकृत होते हैं।
Dynamic admission controllers का उपयोग API अनुरोधों पर नीतियाँ लागू करने और अन्य नीति-आधारित वर्कफ़्लोज़ को ट्रिगर करने के लिए किया जा सकता है। एक dynamic admission controller ऐसी जटिल जांच कर सकता है, जिसमें अन्य क्लस्टर संसाधनों और बाहरी डेटा की पुनर्प्राप्ति की आवश्यकता होती है। उदाहरण के लिए, एक इमेज सत्यापन जांच OCI रजिस्ट्रियों से डेटा प्राप्त करके कंटेनर इमेज हस्ताक्षर और प्रमाणपत्रों को मान्य करने के लिए उपयोग की जा सकती है।
Dynamic admission control के बारे में विवरण एक समर्पित अनुभाग में प्रलेखित है:
Implementations
Dynamic admission controllers जो फ्लेक्सिबल नीति इंजन के रूप में कार्य करते हैं, उन्हें कुबेरनेट्स इकोसिस्टम में विकसित किया जा रहा है, जैसे की:
Kubelet कॉन्फ़िगरेशनों का उपयोग करके नीतियाँ लागू करें
Kubernetes प्रत्येक वर्कर नोड पर Kubelet को कॉन्फ़िगर करने की अनुमति देता है। कुछ Kubelet कॉन्फ़िगरेशन नीतियों के रूप में कार्य करते हैं:
- Process ID limits and reservations का उपयोग आवंटन योग्य PIDs को सीमित और आरक्षित करने के लिए किया जाता है।
- Node Resource Managers उच्च-प्रदर्शन और विलंब-संवेदनशील वर्कलोड्स के लिए कंप्यूट, मेमोरी, और डिवाइस संसाधनों का प्रबंधन कर सकते हैं।
4 - कार्य
कुबेरनेट्स प्रलेखन के इस खंड के पृष्ठ एकल कार्य करने का तरीका दिखाते हैं। आमतौर पर, कार्य पृष्ठ दिखाता है कि किसी एक काम को कई छोटे चरणों में विभाजित करके कैसे करना है।
यदि आप एक कार्य पृष्ठ लिखना चाहते हैं, तो देखें प्रलेखन के लिए एक पुल अनुरोध (Pull Request) बनाएं.
4.1 - उपकरण स्थापित करें
kubectl
कुबेरनेट्स कमांड-लाइन टूल, kubectl, आपको कुबेरनेट्स क्लस्टर पर कमांड चलाने की अनुमति देता है।
आप एप्लिकेशन को डिप्लॉय करने, क्लस्टर संसाधनों का निरीक्षण और प्रबंधन करने और लॉग देखने के लिए kubectl का उपयोग कर सकते हैं।
kubectl संचालन की पूरी सूची सहित अधिक जानकारी के लिए, देखें
kubectl
संदर्भ प्रलेखन.
kubectl विभिन्न प्रकार के Linux प्लेटफॉर्म, macOS और Windows पर इंस्टॉल करने योग्य है। नीचे अपना उपयुक्त ऑपरेटिंग सिस्टम खोजें।
kind
kind
आपको अपने कंप्यूटर पर कुबेरनेट्स चलाने देता है।
इस उपकरण के लिए आवश्यक है कि आपके पास
Docker इंस्टॉल और कॉन्फ़िगर किया गया हो।
kind क्विक स्टार्ट पृष्ठ आपको दिखाता है कि kind चलाने के लिए आपको क्या करने की आवश्यकता है।
minikube
kind
की तरह, minikube
एक उपकरण
है जो आपको स्थानीय स्तर पर कुबेरनेट्स चलाने देता है। minikube आपके कंप्यूटर
(windows, macOS और linux पीसी सहित) पर सिंगल-नोड कुबेरनेट्स क्लस्टर चलाता
है ताकि आप कुबेरनेट्स सीख सकें या डेवलपमेंट कर सकें।
यदि आपका ध्यान उपकरण को इंस्टॉल करने पर है तो आप मुख्य आरंभ करें! गाइड का अनुसरण कर सकते हैं।
minikube क्विक स्टार्ट गाइड देखें
एक बार जब आपके पास minikube काम कर रहा हो, तो आप इसका उपयोग नमूना एप्लिकेशन चलाने के लिए कर सकते हैं।
kubeadm
कुबेरनेट्स क्लस्टर बनाने और प्रबंधित करने के लिए आप kubeadm टूल का उपयोग कर सकते हैं। यह उपयोगकर्ता के अनुकूल तरीके से न्यूनतम व्यवहार्य, सुरक्षित क्लस्टर बनाने और चलाने के लिए आवश्यक कार्य करता है।
kubeadm इंस्टॉल करना आपको दिखाता है कि kubeadm को कैसे इंस्टॉल किया जाए। एक बार इंस्टॉल होने के बाद, आप इसका उपयोग क्लस्टर बनाने के लिए कर सकते हैं।
4.1.1 - Linux पर kubectl इंस्टॉल और सेट अप करें
शुरू करने से पहले
आप kubectl संस्करण का उपयोग करे जो आपके क्लस्टर के एक माइनर संस्करण के भीतर हो। उदाहरण के लिए, v1.33 क्लाइंट v1.32, v1.33 और v1.34 कण्ट्रोल प्लेन के साथ संवाद कर सकते हैं। kubectl के नवीनतम संस्करण का उपयोग करने से अप्रत्याशित मुद्दों से बचने में मदद मिलती है।
Linux पर kubectl इंस्टॉल करें
Linux पर kubectl संस्थापित करने के लिए निम्नलिखित विधियाँ मौजूद हैं:
- Linux पर curl के माध्यम से kubectl बाइनरी इंस्टॉल करें
- नेटिव पैकेज मैनेजमेंट के माध्यम से इंस्टॉल करें
- अन्य पैकेज मैनेजमेंट के माध्यम से इंस्टॉल करें
Linux पर curl के माध्यम से kubectl बाइनरी इंस्टॉल करें
-
कमांड से नवीनतम रिलीज डाउनलोड करें:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
टिप्पणी:
एक विशिष्ट संस्करण डाउनलोड करने के लिए, कमांड के
$(curl -L -s https://dl.k8s.io/release/stable.txt)
हिस्से को विशिष्ट संस्करण से बदलें।उदाहरण के लिए, लिनक्स पर 1.33.0 संस्करण डाउनलोड करने के लिए, टाइप करें:
curl -LO https://dl.k8s.io/release/v1.33.0/bin/linux/amd64/kubectl
-
बाइनरी को मान्य करें (वैकल्पिक)
kubectl चेकसम फाइल डाउनलोड करें:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
चेकसम फ़ाइल से kubectl बाइनरी को मान्य करें:
echo "$(<kubectl.sha256) kubectl" | sha256sum --check
यदि मान्य है, तो आउटपुट है:
kubectl: OK
अगर चेक फेल हो जाता है, तो sha256
nonzero स्थिति के साथ बाहर निकलता है और इस आउटपुट के समान प्रिंट करता है:
kubectl: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match
टिप्पणी:
बाइनरी और चेकसम का एक ही संस्करण डाउनलोड करें।-
kubectl इंस्टॉल करें
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
टिप्पणी:
यदि आपके पास टारगेट सिस्टम पर रुट एक्सेस नहीं है, आप तब भी kubectl को
~/.local/bin
डायरेक्टरी में इंस्टॉल कर सकते हैं:chmod +x kubectl mkdir -p ~/.local/bin/kubectl mv ./kubectl ~/.local/bin/kubectl # and then add ~/.local/bin/kubectl to $PATH
-
यह सुनिश्चित करने के लिए परीक्षण करें कि आपके द्वारा इंस्टॉल किया गया संस्करण उप-टू-डेट है:
kubectl version --client
नेटिव पैकेज मैनेजमेंट के माध्यम से इंस्टॉल करें
-
apt
पैकेज इंडेक्स को अपडेट करे और कुबेरनेट्सapt
रिपॉजिटरी का उपयोग करने के लिए आवश्यक पैकेज इंस्टॉल करें:sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
-
गूगल क्लाउड पब्लिक साइनिंग कुंजी (key) डाउनलोड करें:
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
-
कुबेरनेट्स
apt
रिपॉजिटरी को जोड़े:echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
-
नए रिपॉजिटरी के साथ
apt
पैकेज इंडेक्स अपडेट करें और kubectl इंस्टॉल करें:sudo apt-get update sudo apt-get install -y kubectl
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
yum install -y 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
फ़ाइल में समापन स्क्रिप्ट सॉर्स करें:echo 'source <(kubectl completion bash)' >>~/.bashr
-
समापन स्क्रिप्ट को
/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 संस्करण में मैनिफेस्ट को माइग्रेट करने में सहायक हो सकता है।
अधिक जानकारी के लिए, गैर पदावनत एपिस में विस्थापित करें पर जाएं।
-
कमांड से नवीनतम रिलीज डाउनलोड करें:
curl -LO https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl-convert
-
बाइनरी को मान्य करें (वैकल्पिक)
kubectl-convert चेकसम फ़ाइल डाउनलोड करें:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl-convert.sha256"
चेकसम फ़ाइल से kubectl-convert बाइनरी को मान्य करें:
echo "$(<kubectl-convert.sha256) kubectl-convert" | sha256sum --check
यदि मान्य है, तो आउटपुट है:
kubectl-convert: OK
अगर चेक फेल हो जाता है, तो
sha256
nonzero स्थिति के साथ बाहर निकलता है और इस आउटपुट के समान प्रिंट करता है:kubectl-convert: FAILED sha256sum: WARNING: 1 computed checksum did NOT match
टिप्पणी:
बाइनरी और चेकसम का एक ही संस्करण डाउनलोड करें। -
kubectl-convert इंस्टॉल करें
sudo install -o root -g root -m 0755 kubectl-convert /usr/local/bin/kubectl-convert
-
सत्यापित करें कि प्लगइन सफलतापूर्वक इंस्टॉल है
kubectl convert --help
यदि आपको कोई त्रुटि नहीं दिखाई देती है, तो इसका मतलब है कि प्लगइन सफलतापूर्वक इंस्टॉल हो गया है।
आगे क्या है
- मिनीक्यूब (Minikube) इंस्टॉल करें
- क्लस्टर बनाने के बारे में अधिक जानकारी के लिए आरंभ करने की मार्गदर्शिका देखें।
- अपने एप्लिकेशन को लॉन्च और एक्सपोज़ करने का तरीका जानें।
- यदि आपको किसी ऐसे क्लस्टर को उपयोग करने की आवश्यकता है जिसे आपने नहीं बनाया है, तो क्लस्टर एक्सेस दस्तावेज़ साझा करना देखें।
- kubectl संदर्भ प्रलेखन पढ़ें।
4.1.2 - macOS पर kubectl इंस्टॉल और सेटअप करें
शुरू करने से पहले
आप kubectl संस्करण का उपयोग करे जो आपके क्लस्टर के एक माइनर संस्करण भीतर हो। उदाहरण के लिए, v1.33 क्लाइंट v1.32, v1.33 और v1.34 कण्ट्रोल प्लेन के साथ कम्युनिकेट कर सकते हैं। kubectl के नए संस्करण का उपयोग करने से समस्या से बचत हो सकती है।
macOS पर kubectl इंस्टॉल करें
macOS पर kubectl संस्थापित करने के लिए निम्नलिखित विधियाँ मौजूद हैं:
- macOS पर curl के माध्यम से kubectl बाइनरी इंस्टॉल करें
- Homebrew के माध्यम से macOS पर इंस्टॉल करें
- Macports के माध्यम से macOS पर इंस्टॉल करें
macOS पर curl के माध्यम से kubectl बाइनरी इंस्टॉल करें
-
नवीनतम रिलीज़ डाउनलोड करें:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
टिप्पणी:
एक विशिष्ट संस्करण डाउनलोड करने के लिए, कमांड के इस हिस्से
$(curl -L -s https://dl.k8s.io/release/stable.txt)
को विशिष्ट संस्करण से बदलें।उदाहरण के लिए, Intel macOS पर 1.33.0 संस्करण डाउनलोड करने के लिए, टाइप करें:
curl -LO "https://dl.k8s.io/release/v1.33.0/bin/darwin/amd64/kubectl"
और Apple Silicon macOS के लिए, टाइप करें:
curl -LO "https://dl.k8s.io/release/v1.33.0/bin/darwin/arm64/kubectl"
-
बाइनरी को मान्य करें (वैकल्पिक))
kubectl चेकसम फाइल डाउनलोड करें:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl.sha256"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl.sha256"
चेकसम फ़ाइल से kubectl बाइनरी को मान्य करें:
echo "$(<kubectl.sha256) kubectl" | shasum -a 256 --check
यदि मान्य है, तो आउटपुट है:
kubectl: OK
अगर चेक फेल हो जाता है, तो
shasum
nonzero स्थिति के साथ बाहर निकलता है और इस आउटपुट के समान प्रिंट करता है:kubectl: FAILED shasum: WARNING: 1 computed checksum did NOT match
टिप्पणी:
बाइनरी और चेकसम का एक ही संस्करण डाउनलोड करें। -
kubectl बाइनरी को एक्सेक्यूट करने योग्य बनायें।
chmod +x ./kubectl
-
kubectl बाइनरी को अपने सिस्टम
PATH
के फ़ाइल स्थान पर ले जाएँ।sudo mv ./kubectl /usr/local/bin/kubectl sudo chown root: /usr/local/bin/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
फ़ाइल में निम्नलिखित जोड़ें:
export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"
अपने शेल को पुनः लोड करें और type_init_completion
से सत्यापित करें कि bash-completion v2 सही ढंग से इनस्टॉल है।
kubectl ऑटोकम्पलीशन सक्षम करें
अब आपको यह सुनिश्चित करने की आवश्यकता है कि kubectl समापन स्क्रिप्ट आपके सभी शेल सत्रों (sourced) में प्राप्त हो जाए। इसे हासिल करने के कई तरीके हैं:
-
अपने कम्पलीशन स्क्रिप्ट को
~/.bash_profile
में सोर्स करें:echo 'source <(kubectl completion bash)' >>~/.bash_profile
-
कम्पलीशन स्क्रिप्ट को
/usr/local/etc/bash_completion.d
डायरेक्टरी में जोड़ें:kubectl completion bash >/usr/local/etc/bash_completion.d/kubectl
-
यदि आपके पास 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
डायरेक्टरी में सोर्स कर देता है। इसलिए आखरी दो तरीके काम करते हैं।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 संस्करण में मैनिफेस्ट को माइग्रेट करने में सहायक हो सकता है।
अधिक जानकारी के लिए, गैर पदावनत एपिस में विस्थापित करें पर जाएं।
-
इस कमांड से नवीनतम रिलीज डाउनलोड करें:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl-convert"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl-convert"
-
बाइनरी को मान्य करें (वैकल्पिक)
kubectl-convert चेकसम फ़ाइल डाउनलोड करें:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl-convert.sha256"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl-convert.sha256"
चेकसम फ़ाइल से kubectl-convert बाइनरी को मान्य करें:
echo "$(<kubectl-convert.sha256) kubectl-convert" | shasum -a 256 --check
यदि मान्य है, तो आउटपुट है:
kubectl-convert: OK
अगर चेक फेल हो जाता है, तो
sha256
nonzero स्थिति के साथ बाहर निकलता है और इस आउटपुट के समान प्रिंट करता है:kubectl-convert: FAILED shasum: WARNING: 1 computed checksum did NOT match
टिप्पणी:
बाइनरी और चेकसम का एक ही संस्करण डाउनलोड करें। -
Kubectl-कन्वर्ट बाइनरी को एक्सेक्यूट करने योग्य बनाएं
chmod +x ./kubectl-convert
-
kubectl-convert binary बाइनरी को अपने सिस्टम
PATH
के फ़ाइल स्थान पर ले जाएँ।sudo mv ./kubectl-convert /usr/local/bin/kubectl-convert sudo chown root: /usr/local/bin/kubectl-convert
टिप्पणी:
सुनिश्चित करें कि/usr/local/bin
आपके पाथ एनवायरनमेंट वेरिएबल में है। -
सत्यापित करें कि प्लगइन सफलतापूर्वक इंस्टॉल हो गया है
kubectl convert --help
यदि आपको कोई त्रुटि नहीं दिखाई देती है, तो इसका मतलब है कि प्लगइन सफलतापूर्वक इंस्टॉल हो गया है।
आगे क्या है
- मिनीक्यूब (Minikube) इंस्टॉल करें
- क्लस्टर बनाने के बारे में अधिक जानकारी के लिए आरंभ करने की मार्गदर्शिका देखें।
- अपने एप्लिकेशन को लॉन्च और एक्सपोज़ करने का तरीका जानें।
- यदि आपको किसी ऐसे क्लस्टर को उपयोग करने की आवश्यकता है जिसे आपने नहीं बनाया है, तो क्लस्टर एक्सेस दस्तावेज़ साझा करना देखें।
- kubectl संदर्भ प्रलेखन पढ़ें।
4.1.3 - Windows पर kubectl इंस्टॉल और सेटअप करें
शुरू करने से पहले
आप kubectl संस्करण का उपयोग करे जो आपके क्लस्टर के एक माइनर संस्करण भीतर हो। उदाहरण के लिए, v1.33 क्लाइंट v1.32, v1.33 और v1.34 कण्ट्रोल प्लेन के साथ कम्युनिकेट कर सकते हैं। kubectl के नए संस्करण का उपयोग करने से समस्या से बचत हो सकती है।
Windows पर kubectl इंस्टॉल करें
Windows पर kubectl संस्थापित करने के लिए निम्नलिखित विधियाँ मौजूद हैं:
- Windows पर curl के माध्यम से kubectl बाइनरी इंस्टॉल करें
- Chocolatey या Scoop का उपयोग करके Windows पर इंस्टॉल करें
Windows पर curl के माध्यम से kubectl बाइनरी इंस्टॉल करें
-
latest release 1.33.0 डाउनलोड करें।
या यदि आपके पास
curl
है, तो इस कमांड का उपयोग करें:curl -LO https://dl.k8s.io/release/v1.33.0/bin/windows/amd64/kubectl.exe
टिप्पणी:
नवीनतम स्थिर संस्करण का पता लगाने के लिए (जैसे, स्क्रिप्टिंग के लिए), https://dl.k8s.io/release/stable.txt पर एक नज़र डालें। -
बाइनरी को मान्य करें (वैकल्पिक)
kubectl चेकसम फाइल डाउनलोड करें:
curl -LO https://dl.k8s.io/v1.33.0/bin/windows/amd64/kubectl.exe.sha256
चेकसम फ़ाइल से kubectl बाइनरी को मान्य करें:
-
मैन्युअल रूप से कमांड प्रॉम्प्ट का उपयोग करके
CertUtil
के आउटपुट की तुलना डाउनलोडेड चेकसम फ़ाइल से करें:CertUtil -hashfile kubectl.exe SHA256 type kubectl.exe.sha256
-
True
याFalse
परिणाम प्राप्त करने के लिए-eq
ऑपरेटर का उपयोग करके सत्यापन को ऑटोमेट करने के लिए powershell का उपयोग करें:$(Get-FileHash -Algorithm SHA256 .\kubectl.exe).Hash -eq $(Get-Content .\kubectl.exe.sha256)
-
-
अपने
PATH
में बाइनरी जोड़ें। -
यह सुनिश्चित करने के लिए परीक्षण करें कि
kubectl
संस्करण डाउनलोड के समान है:kubectl version --client
टिप्पणी:
Windows के लिए Docker Desktopkubectl
का अपना संस्करण PATH
में जोड़ता है।
यदि आपने पहले Docker Desktop स्थापित किया है, तो आपको Docker Desktop इंस्टॉलर द्वारा जोड़े गए एक PATH
से पहले अपनी PATH
प्रविष्टि डालने की आवश्यकता हो सकती है या Docker Desktop के kubectl
को हटा दें।Chocolatey या Scoop का उपयोग करके Windows पर इंस्टॉल करें
-
Windows पर kubectl इंस्टॉल करने के लिए आप या तो Chocolatey पैकेज मैनेजर अथवा Scoop कमांड-लाइन इंस्टॉलर का उपयोग कर सकते हैं।
choco install kubernetes-cli
scoop install kubectl
-
यह सुनिश्चित करने के लिए परीक्षण करें कि आपके द्वारा इंस्टॉल किया गया संस्करण उप-टू-डेट है:
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 संस्करण में मैनिफेस्ट को माइग्रेट करने में सहायक हो सकता है।
अधिक जानकारी के लिए, गैर पदावनत एपिस में विस्थापित करें पर जाएं।
-
इस कमांड से नवीनतम रिलीज डाउनलोड करें:
curl -LO https://dl.k8s.io/release/v1.33.0/bin/windows/amd64/kubectl-convert.exe
-
बाइनरी को मान्य करें (वैकल्पिक)
kubectl-convert चेकसम फ़ाइल डाउनलोड करें:
curl -LO https://dl.k8s.io/v1.33.0/bin/windows/amd64/kubectl-convert.exe.sha256
चेकसम फ़ाइल से kubectl-convert बाइनरी को मान्य करें:
-
मैन्युअल रूप से कमांड प्रॉम्प्ट का उपयोग करके
CertUtil
के आउटपुट की तुलना डाउनलोड किये गये चेकसम फ़ाइल से करें:CertUtil -hashfile kubectl-convert.exe SHA256 type kubectl-convert.exe.sha256
-
True
याFalse
परिणाम प्राप्त करने और-eq
ऑपरेटर का उपयोग करके सत्यापन को ऑटोमेट करने के लिए Powershell का उपयोग करें:$($(CertUtil -hashfile .\kubectl-convert.exe SHA256)[1] -replace " ", "") -eq $(type .\kubectl-convert.exe.sha256)
-
-
अपने
PATH
में बाइनरी जोड़ें। -
सत्यापित करें कि प्लगइन सफलतापूर्वक इंस्टॉल हो गया है।
kubectl convert --help
यदि आपको कोई त्रुटि नहीं दिखाई देती है, तो इसका मतलब है कि प्लगइन सफलतापूर्वक इंस्टॉल हो गया है।
आगे क्या है
- मिनीक्यूब (Minikube) इंस्टॉल करें
- क्लस्टर बनाने के बारे में अधिक जानकारी के लिए आरंभ करने की मार्गदर्शिका देखें।
- अपने एप्लिकेशन को लॉन्च और एक्सपोज़ करने का तरीका जानें।
- यदि आपको किसी ऐसे क्लस्टर को उपयोग करने की आवश्यकता है जिसे आपने नहीं बनाया है, तो क्लस्टर एक्सेस दस्तावेज़ साझा करना देखें।
- kubectl संदर्भ प्रलेखन पढ़ें।
4.2 - नेटवर्क पॉलिसी प्रोवाइडर इंस्टॉल करें
4.2.1 - नेटवर्कपॉलिसी के लिए Antrea का उपयोग करें
यह पेज कुबेरनेट्स पर Antrea CNI प्लगइन को कैसे इंस्टॉल और उपयोग करें, यह दिखाता है। प्रोजेक्ट Antrea की पृष्ठभूमि के लिए, Antrea का परिचय पढ़ें।
शुरू करने से पहले
आपके पास एक कुबेरनेट्स क्लस्टर होना चाहिए। एक क्लस्टर को बूटस्ट्रैप करने के लिए kubeadm आरंभ करने की गाइड का पालन करें।
kubeadm के साथ Antrea को डिप्लॉय करना
kubeadm के लिए Antrea को डिप्लॉय करने के लिए आरंभ करने की गाइड का पालन करें।
आगे क्या है
एक बार जब आपका क्लस्टर चल रहा हो, तो आप कुबेरनेट्स नेटवर्कपॉलिसी को आज़माने के लिए नेटवर्क पॉलिसी घोषित करें का पालन कर सकते हैं।
4.3 - जॉब चलाएं
4.3.1 - क्रॉनजॉब के साथ स्वचालित कार्य चलाना
यह पेज दिखाता है कि कैसे Kubernetes CronJob ऑब्जेक्ट का उपयोग करके स्वचालित कार्य चलाए जाते हैं।
शुरू करने से पहले
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप minikube की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
क्रॉनजॉब बनाना
क्रॉन जॉब्स को एक कॉन्फ़िग फ़ाइल की आवश्यकता होती है। यहाँ एक क्रॉनजॉब के लिए मैनिफेस्ट है जो हर मिनट एक साधारण डेमो कार्य चलाता है:
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "* * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox:1.28
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
इस कमांड का उपयोग करके उदाहरण क्रॉनजॉब चलाएं:
kubectl create -f https://k8s.io/examples/application/job/cronjob.yaml
आउटपुट इस तरह का होगा:
cronjob.batch/hello created
क्रॉनजॉब बनाने के बाद, इस कमांड का उपयोग करके इसकी स्थिति प्राप्त करें:
kubectl get cronjob hello
आउटपुट इस तरह का होगा:
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * False 0 <none> 10s
जैसा कि आप कमांड के परिणामों से देख सकते हैं, क्रॉन जॉब ने अभी तक कोई जॉब शेड्यूल या चलाया नहीं है। लगभग एक मिनट में जॉब के बनने के लिए देखें:
kubectl get jobs --watch
आउटपुट इस तरह का होगा:
NAME COMPLETIONS DURATION AGE
hello-4111706356 0/1 0s
hello-4111706356 0/1 0s 0s
hello-4111706356 1/1 5s 5s
अब आपने "hello" क्रॉन जॉब द्वारा शेड्यूल किया गया एक चलता हुआ जॉब देखा है। आप जॉब को देखना बंद कर सकते हैं और क्रॉन जॉब को फिर से देख सकते हैं यह देखने के लिए कि इसने जॉब को शेड्यूल किया:
kubectl get cronjob hello
आउटपुट इस तरह का होगा:
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * False 0 50s 75s
आपको दिखाई देगा कि क्रॉन जॉब hello
ने LAST SCHEDULE
में निर्दिष्ट समय पर सफलतापूर्वक एक जॉब शेड्यूल किया। वर्तमान में 0 सक्रिय जॉब हैं, जिसका अर्थ है कि जॉब पूरा हो गया है या विफल हो गया है।
अब, पिछले शेड्यूल किए गए जॉब द्वारा बनाए गए पॉड्स को ढूंढें और एक पॉड का स्टैंडर्ड आउटपुट देखें।
टिप्पणी:
जॉब का नाम पॉड के नाम से अलग है।# "hello-4111706356" को अपने सिस्टम में जॉब नाम से बदलें
pods=$(kubectl get pods --selector=job-name=hello-4111706356 --output=jsonpath={.items[*].metadata.name})
पॉड लॉग दिखाएं:
kubectl logs $pods
आउटपुट इस तरह का होगा:
Fri Feb 22 11:02:09 UTC 2019
Hello from the Kubernetes cluster
क्रॉनजॉब हटाना
जब आपको क्रॉन जॉब की और आवश्यकता नहीं होती है, तो इसे kubectl delete cronjob <cronjob name>
के साथ हटा दें:
kubectl delete cronjob hello
क्रॉन जॉब को हटाने से इसके द्वारा बनाए गए सभी जॉब और पॉड हट जाते हैं और यह अतिरिक्त जॉब बनाना बंद कर देता है। आप गारबेज कलेक्शन में जॉब हटाने के बारे में और पढ़ सकते हैं।
4.3.2 - वर्क क्यू का उपयोग करके मोटे समानांतर प्रसंस्करण
इस उदाहरण में, आप कई समानांतर वर्कर प्रोसेस के साथ एक Kubernetes जॉब चलाएंगे।
इस उदाहरण में, जैसे ही प्रत्येक पॉड बनाया जाता है, यह कार्य कतार से एक कार्य इकाई लेता है, इसे पूरा करता है, इसे कतार से हटा देता है, और बाहर निकल जाता है।
यहाँ इस उदाहरण में चरणों का एक सिंहावलोकन है:
- एक मैसेज क्यू सेवा शुरू करें। इस उदाहरण में, आप RabbitMQ का उपयोग करते हैं, लेकिन आप कोई अन्य भी उपयोग कर सकते हैं। व्यवहार में आप एक मैसेज क्यू सेवा एक बार सेट करेंगे और इसका उपयोग कई जॉब्स के लिए करेंगे।
- एक क्यू बनाएं, और इसे संदेशों से भरें। प्रत्येक संदेश एक कार्य का प्रतिनिधित्व करता है जो किया जाना है। इस उदाहरण में, एक संदेश एक पूर्णांक है जिस पर हम एक लंबी गणना करेंगे।
- क्यू से कार्यों पर काम करने वाला एक जॉब शुरू करें। जॉब कई पॉड शुरू करता है। प्रत्येक पॉड मैसेज क्यू से एक कार्य लेता है, इसे संसाधित करता है, और बाहर निकल जाता है।
शुरू करने से पहले
आपको पहले से ही Job के बुनियादी, गैर-समानांतर उपयोग से परिचित होना चाहिए।
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप minikube की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
आपको एक कंटेनर इमेज रजिस्ट्री की आवश्यकता होगी जहां आप अपने क्लस्टर में चलाने के लिए इमेज अपलोड कर सकते हैं।
यह कार्य उदाहरण यह भी मानता है कि आपने Docker को स्थानीय रूप से स्थापित किया है।
मैसेज क्यू सेवा शुरू करना
यह उदाहरण RabbitMQ का उपयोग करता है, हालांकि, आप उदाहरण को किसी अन्य AMQP-प्रकार की मैसेज सेवा का उपयोग करने के लिए अनुकूलित कर सकते हैं।
व्यवहार में आप एक क्लस्टर में एक बार मैसेज क्यू सेवा सेट कर सकते हैं और इसका पुन: उपयोग कई जॉब्स के साथ-साथ लंबे समय तक चलने वाली सेवाओं के लिए कर सकते हैं।
RabbitMQ को निम्नानुसार शुरू करें:
# StatefulSet के उपयोग के लिए एक सेवा बनाएं
kubectl create -f https://kubernetes.io/examples/application/job/rabbitmq/rabbitmq-service.yaml
service "rabbitmq-service" created
kubectl create -f https://kubernetes.io/examples/application/job/rabbitmq/rabbitmq-statefulset.yaml
statefulset "rabbitmq" created
मैसेज क्यू सेवा का परीक्षण
अब, हम मैसेज क्यू तक पहुंचने का प्रयोग कर सकते हैं। हम एक अस्थायी इंटरैक्टिव पॉड बनाएंगे, इस पर कुछ टूल स्थापित करेंगे, और क्यू के साथ प्रयोग करेंगे।
पहले एक अस्थायी इंटरैक्टिव पॉड बनाएं।
# एक अस्थायी इंटरैक्टिव कंटेनर बनाएं
kubectl run -i --tty temp --image ubuntu:22.04
Waiting for pod default/temp-loe07 to be running, status is Pending, pod ready: false
... [ पिछली लाइन कई बार दोहराई जाती है .. जब यह रुक जाए तो रिटर्न दबाएं ] ...
ध्यान दें कि आपका पॉड नाम और कमांड प्रॉम्प्ट अलग होंगे।
अगला amqp-tools
स्थापित करें ताकि आप मैसेज क्यू के साथ काम कर सकें।
अगले कमांड दिखाते हैं कि आपको उस पॉड में इंटरैक्टिव शेल के अंदर क्या चलाने की आवश्यकता है:
apt-get update && apt-get install -y curl ca-certificates amqp-tools python3 dnsutils
बाद में, आप एक कंटेनर इमेज बनाएंगे जिसमें ये पैकेज शामिल हैं।
अगला, आप जांचेंगे कि आप RabbitMQ के लिए सेवा का पता लगा सकते हैं:
# इन कमांड को पॉड के अंदर चलाएं
# ध्यान दें कि rabbitmq-service में एक DNS नाम है, जो Kubernetes द्वारा प्रदान किया गया है:
nslookup rabbitmq-service
Server: 10.0.0.10
Address: 10.0.0.10#53
Name: rabbitmq-service.default.svc.cluster.local
Address: 10.0.147.152
(IP पते अलग-अलग होंगे)
यदि kube-dns एडऑन सही ढंग से सेट नहीं किया गया है, तो पिछला चरण आपके लिए काम नहीं कर सकता है। आप उस सेवा के लिए IP पता एक पर्यावरण चर में भी पा सकते हैं:
# यह जांच पॉड के अंदर चलाएं
env | grep RABBITMQ_SERVICE | grep HOST
RABBITMQ_SERVICE_SERVICE_HOST=10.0.147.152
(IP पता अलग होगा)
अगला आप सत्यापित करेंगे कि आप एक क्यू बना सकते हैं, और संदेशों को प्रकाशित और उपभोग कर सकते हैं।
# इन कमांड को पॉड के अंदर चलाएं
# अगली लाइन में, rabbitmq-service वह होस्टनाम है जहां rabbitmq-service
# तक पहुंचा जा सकता है। 5672 rabbitmq के लिए मानक पोर्ट है।
export BROKER_URL=amqp://guest:guest@rabbitmq-service:5672
# यदि आप पिछले चरण में "rabbitmq-service" को रिज़ॉल्व नहीं कर सके,
# तो इसके बजाय इस कमांड का उपयोग करें:
BROKER_URL=amqp://guest:guest@$RABBITMQ_SERVICE_SERVICE_HOST:5672
# अब एक क्यू बनाएं:
/usr/bin/amqp-declare-queue --url=$BROKER_URL -q foo -d
foo
क्यू में एक संदेश प्रकाशित करें:
/usr/bin/amqp-publish --url=$BROKER_URL -r foo -p -b Hello
# और इसे वापस प्राप्त करें।
/usr/bin/amqp-consume --url=$BROKER_URL -q foo -c 1 cat && echo 1>&2
Hello
अंतिम कमांड में, amqp-consume
टूल ने क्यू से एक संदेश (-c 1
) लिया,
और उस संदेश को एक मनमाने कमांड के मानक इनपुट में पास किया।
इस मामले में, प्रोग्राम cat
मानक इनपुट से पढ़े गए अक्षरों को प्रिंट करता है, और
echo एक कैरिज रिटर्न जोड़ता है ताकि उदाहरण पढ़ने योग्य हो।
क्यू को कार्यों से भरें
अब, क्यू को कुछ सिमुलेटेड कार्यों से भरें। इस उदाहरण में, कार्य प्रिंट किए जाने वाले स्ट्रिंग्स हैं।
अभ्यास में, संदेशों की सामग्री हो सकती है:
- फ़ाइलों के नाम जिन्हें संसाधित करने की आवश्यकता है
- प्रोग्राम के लिए अतिरिक्त फ्लैग
- डेटाबेस टेबल में कुंजियों की सीमाएं
- सिमुलेशन के लिए कॉन्फ़िगरेशन पैरामीटर
- रेंडर किए जाने वाले दृश्य के फ्रेम नंबर
यदि बड़ा डेटा है जिसे जॉब के सभी पॉड द्वारा केवल पढ़ने के मोड में आवश्यकता है, तो आप आमतौर पर उसे NFS जैसी साझा फ़ाइल सिस्टम में डालते हैं और उसे सभी पॉड पर केवल पढ़ने के लिए माउंट करते हैं, या पॉड में प्रोग्राम को इस तरह लिखते हैं कि यह क्लस्टर फ़ाइल सिस्टम से डेटा को मूल रूप से पढ़ सके (उदाहरण के लिए: HDFS)।
इस उदाहरण के लिए, आप AMQP कमांड लाइन टूल का उपयोग करके क्यू बनाएंगे और इसे भरेंगे। व्यवहार में, आप AMQP क्लाइंट लाइब्रेरी का उपयोग करके क्यू को भरने के लिए एक प्रोग्राम लिख सकते हैं।
# इसे अपने कंप्यूटर पर चलाएं, पॉड में नहीं
/usr/bin/amqp-declare-queue --url=$BROKER_URL -q job1 -d
job1
क्यू में आइटम जोड़ें:
for f in apple banana cherry date fig grape lemon melon
do
/usr/bin/amqp-publish --url=$BROKER_URL -r job1 -p -b $f
done
आपने क्यू में 8 संदेश जोड़े हैं।
एक कंटेनर इमेज बनाएं
अब आप एक इमेज बनाने के लिए तैयार हैं जिसे आप एक जॉब के रूप में चलाएंगे।
जॉब क्यू से संदेश पढ़ने और वास्तविक कार्य करने के लिए amqp-consume
उपयोगिता का उपयोग करेगा।
यहाँ एक बहुत ही सरल उदाहरण प्रोग्राम है:
4.3.3 - वर्क क्यू का उपयोग करके सूक्ष्म समानांतर प्रसंस्करण
इस उदाहरण में, आप एक Kubernetes जॉब चलाएंगे जो कई समानांतर कार्यों को वर्कर प्रोसेस के रूप में चलाता है, जहां प्रत्येक कार्य एक अलग पॉड के रूप में चलता है।
इस उदाहरण में, जैसे-जैसे प्रत्येक पॉड बनाया जाता है, यह कार्य कतार से एक कार्य इकाई लेता है, उसे प्रोसेस करता है, और कतार के अंत तक पहुंचने तक इसे दोहराता है।
यहाँ इस उदाहरण के चरणों का एक सिंहावलोकन है:
- कार्य कतार को संग्रहित करने के लिए एक स्टोरेज सेवा शुरू करें। इस उदाहरण में, आप कार्य आइटम को स्टोर करने के लिए Redis का उपयोग करेंगे। पिछले उदाहरण में, आपने RabbitMQ का उपयोग किया था। इस उदाहरण में, आप Redis और एक कस्टम वर्क-क्यू क्लाइंट लाइब्रेरी का उपयोग करेंगे; यह इसलिए है क्योंकि AMQP क्लाइंट्स को यह पता लगाने का कोई अच्छा तरीका प्रदान नहीं करता कि एक सीमित-लंबाई वाली कार्य कतार खाली है या नहीं। व्यवहार में आप Redis जैसा स्टोर एक बार सेट करेंगे और इसका पुन: उपयोग कई जॉब्स की कार्य कतारों और अन्य चीजों के लिए करेंगे।
- एक कतार बनाएं, और इसे संदेशों से भरें। प्रत्येक संदेश एक कार्य को दर्शाता है जो किया जाना है। इस उदाहरण में, एक संदेश एक पूर्णांक है जिस पर हम एक लंबी गणना करेंगे।
- कतार से कार्यों पर काम करने वाला एक जॉब शुरू करें। जॉब कई पॉड्स शुरू करता है। प्रत्येक पॉड संदेश कतार से एक कार्य लेता है, उसे प्रोसेस करता है, और कतार के अंत तक पहुंचने तक इसे दोहराता है।
शुरू करने से पहले
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप minikube की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
आपको एक कंटेनर इमेज रजिस्ट्री की आवश्यकता होगी जहां आप अपने क्लस्टर में चलाने के लिए इमेज अपलोड कर सकते हैं। उदाहरण Docker Hub का उपयोग करता है, लेकिन आप इसे किसी अन्य कंटेनर इमेज रजिस्ट्री के लिए अनुकूलित कर सकते हैं।
यह कार्य उदाहरण यह भी मानता है कि आपने Docker को स्थानीय रूप से इंस्टॉल किया है। आप कंटेनर इमेज बनाने के लिए Docker का उपयोग करते हैं।
Job के बुनियादी, गैर-समानांतर उपयोग से परिचित हों।
Redis शुरू करना
इस उदाहरण के लिए, सरलता के लिए, आप Redis का एक एकल इंस्टेंस शुरू करेंगे। Redis को स्केलेबल और रिडंडेंट तरीके से डिप्लॉय करने के उदाहरण के लिए Redis उदाहरण देखें।
आप निम्नलिखित फ़ाइलों को सीधे भी डाउनलोड कर सकते हैं:
Redis का एक एकल इंस्टेंस शुरू करने के लिए, आपको redis पॉड और redis सेवा बनाने की आवश्यकता है:
kubectl apply -f https://k8s.io/examples/application/job/redis/redis-pod.yaml
kubectl apply -f https://k8s.io/examples/application/job/redis/redis-service.yaml
कतार को कार्यों से भरना
अब चलिए कतार को कुछ "कार्यों" से भरें। इस उदाहरण में, कार्य प्रिंट किए जाने वाले स्ट्रिंग्स हैं।
Redis CLI चलाने के लिए एक अस्थायी इंटरैक्टिव पॉड शुरू करें।
kubectl run -i --tty temp --image redis --command "/bin/sh"
Waiting for pod default/redis2-c7h78 to be running, status is Pending, pod ready: false
Hit enter for command prompt
अब एंटर दबाएं, Redis CLI शुरू करें, और इसमें कुछ कार्य आइटम्स के साथ एक सूची बनाएं।
redis-cli -h redis
redis:6379> rpush job2 "apple"
(integer) 1
redis:6379> rpush job2 "banana"
(integer) 2
redis:6379> rpush job2 "cherry"
(integer) 3
redis:6379> rpush job2 "date"
(integer) 4
redis:6379> rpush job2 "fig"
(integer) 5
redis:6379> rpush job2 "grape"
(integer) 6
redis:6379> rpush job2 "lemon"
(integer) 7
redis:6379> rpush job2 "melon"
(integer) 8
redis:6379> rpush job2 "orange"
(integer) 9
redis:6379> lrange job2 0 -1
1) "apple"
2) "banana"
3) "cherry"
4) "date"
5) "fig"
6) "grape"
7) "lemon"
8) "melon"
9) "orange"
इस प्रकार, job2
कुंजी वाली सूची कार्य कतार होगी।
नोट: यदि आपका Kube DNS सही ढंग से सेटअप नहीं है, तो आपको उपरोक्त ब्लॉक के पहले चरण को redis-cli -h $REDIS_SERVICE_HOST
में बदलना पड़ सकता है।
एक कंटेनर इमेज बनाएं
अब आप एक ऐसी इमेज बनाने के लिए तैयार हैं जो उस कतार में कार्य को प्रोसेस करेगी।
आप संदेश कतार से संदेश पढ़ने के लिए Redis क्लाइंट के साथ एक Python वर्कर प्रोग्राम का उपयोग करने जा रहे हैं।
एक सरल Redis कार्य कतार क्लाइंट लाइब्रेरी प्रदान की गई है,
जिसे rediswq.py
कहा जाता है (डाउनलोड)।
जॉब के प्रत्येक पॉड में "वर्कर" प्रोग्राम कार्य प्राप्त करने के लिए कार्य कतार क्लाइंट लाइब्रेरी का उपयोग करता है। यहाँ यह है:
#!/usr/bin/env python
import time
import rediswq
host="redis"
# Uncomment next two lines if you do not have Kube-DNS working.
# import os
# host = os.getenv("REDIS_SERVICE_HOST")
q = rediswq.RedisWQ(name="job2", host=host)
print("Worker with sessionID: " + q.sessionID())
print("Initial queue state: empty=" + str(q.empty()))
while not q.empty():
item = q.lease(lease_secs=10, block=True, timeout=2)
if item is not None:
itemstr = item.decode("utf-8")
print("Working on " + itemstr)
time.sleep(10) # Put your actual work here instead of sleep.
q.complete(item)
else:
print("Waiting for work")
print("Queue empty, exiting")
आप worker.py
,
rediswq.py
, और
Dockerfile
फ़ाइलें भी डाउनलोड कर सकते हैं, फिर
कंटेनर इमेज बना सकते हैं। यहाँ Docker का उपयोग करके इमेज बनाने का एक उदाहरण दिया गया है:
docker build -t job-wq-2 .
इमेज को पुश करें
Docker Hub के लिए, अपनी ऐप इमेज को अपने
उपयोगकर्ता नाम के साथ टैग करें और नीचे दिए गए कमांड्स के साथ Hub पर पुश करें। <username>
को अपने Hub उपयोगकर्ता नाम से बदलें।
docker tag job-wq-2 <username>/job-wq-2
docker push <username>/job-wq-2
आपको एक सार्वजनिक रिपॉजिटरी में पुश करना होगा या अपने क्लस्टर को अपनी निजी रिपॉजिटरी तक पहुंच प्राप्त करने के लिए कॉन्फ़िगर करना होगा।
एक जॉब को परिभाषित करना
यहाँ आपके द्वारा बनाए जाने वाले जॉब के लिए एक मैनिफेस्ट है:
apiVersion: batch/v1
kind: Job
metadata:
name: job-wq-2
spec:
parallelism: 2
template:
metadata:
name: job-wq-2
spec:
containers:
- name: c
image: gcr.io/myproject/job-wq-2
restartPolicy: OnFailure
टिप्पणी:
मैनिफेस्ट को संपादित करकेgcr.io/myproject
को अपने स्वयं के पथ में बदलना सुनिश्चित करें।इस उदाहरण में, प्रत्येक पॉड कतार से कई आइटम्स पर काम करता है और फिर कोई और आइटम नहीं होने पर बाहर निकल जाता है। चूंकि वर्कर्स स्वयं पता लगाते हैं कि वर्कक्यू खाली है, और जॉब कंट्रोलर को वर्कक्यू के बारे में पता नहीं है, यह वर्कर्स पर निर्भर करता है कि वे संकेत दें कि वे काम करना समाप्त कर चुके हैं। वर्कर्स कतार के खाली होने का संकेत सफलतापूर्वक बाहर निकलकर देते हैं। इसलिए, जैसे ही कोई भी वर्कर सफलतापूर्वक बाहर निकलता है, कंट्रोलर को पता चल जाता है कि काम पूरा हो गया है, और यह कि पॉड्स जल्द ही बाहर निकल जाएंगे। इसलिए, आपको जॉब की पूर्णता गिनती को अनसेट छोड़ना होगा। जॉब कंट्रोलर अन्य पॉड्स के पूरा होने की प्रतीक्षा करेगा।
जॉब को चलाना
तो, अब जॉब चलाएं:
# यह मानता है कि आपने मैनिफेस्ट को पहले ही डाउनलोड और संपादित कर लिया है
kubectl apply -f ./job.yaml
अब थोड़ी देर प्रतीक्षा करें, फिर जॉब की जांच करें:
kubectl describe jobs/job-wq-2
Name: job-wq-2
Namespace: default
Selector: controller-uid=b1c7e4e3-92e1-11e7-b85e-fa163ee3c11f
Labels: controller-uid=b1c7e4e3-92e1-11e7-b85e-fa163ee3c11f
job-name=job-wq-2
Annotations: <none>
Parallelism: 2
Completions: <unset>
Start Time: Mon, 11 Jan 2022 17:07:59 +0000
Pods Statuses: 1 Running / 0 Succeeded / 0 Failed
Pod Template:
Labels: controller-uid=b1c7e4e3-92e1-11e7-b85e-fa163ee3c11f
job-name=job-wq-2
Containers:
c:
Image: container-registry.example/exampleproject/job-wq-2
Port:
Environment: <none>
Mounts: <none>
Volumes: <none>
Events:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
33s 33s 1 {job-controller } Normal SuccessfulCreate Created pod: job-wq-2-lglf8
आप टाइमआउट के साथ जॉब के सफल होने की प्रतीक्षा कर सकते हैं:
# कंडीशन नाम की जांच केस-इनसेंसिटिव है
kubectl wait --for=condition=complete --timeout=300s job/job-wq-2
kubectl logs pods/job-wq-2-7r7b2
Worker with sessionID: bbd72d0a-9e5c-4dd6-abf6-416cc267991f
Initial queue state: empty=False
Working on banana
Working on date
Working on lemon
जैसा कि आप देख सकते हैं, इस जॉब के लिए एक पॉड ने कई कार्य इकाइयों पर काम किया।
विकल्प
यदि एक कतार सेवा चलाना या अपने कंटेनरों को कार्य कतार का उपयोग करने के लिए संशोधित करना असुविधाजनक है, तो आप अन्य जॉब पैटर्न्स में से एक पर विचार करना चाह सकते हैं।
यदि आपके पास चलाने के लिए पृष्ठभूमि प्रसंस्करण कार्य की एक निरंतर धारा है, तो अपने पृष्ठभूमि वर्कर्स को ReplicaSet के साथ चलाने पर विचार करें, और https://github.com/resque/resque जैसी पृष्ठभूमि प्रसंस्करण लाइब्रेरी चलाने पर विचार करें।
4.3.4 - स्थिर कार्य असाइनमेंट के साथ समानांतर प्रसंस्करण के लिए अनुक्रमित जॉब
Kubernetes v1.24 [stable]
इस उदाहरण में, आप एक Kubernetes जॉब चलाएंगे जो कई समानांतर वर्कर प्रोसेस का उपयोग करता है। प्रत्येक वर्कर अपने स्वयं के पॉड में चलने वाला एक अलग कंटेनर है। पॉड्स में एक अनुक्रमणिका संख्या होती है जो कंट्रोल प्लेन स्वचालित रूप से सेट करता है, जो प्रत्येक पॉड को समग्र कार्य के किस भाग पर काम करना है यह पहचानने की अनुमति देता है।
पॉड अनुक्रमणिका एनोटेशन batch.kubernetes.io/job-completion-index
में इसके दशमलव मान का प्रतिनिधित्व करने वाली स्ट्रिंग के रूप में उपलब्ध है। कंटेनरीकृत कार्य प्रक्रिया को यह अनुक्रमणिका प्राप्त करने के लिए, आप डाउनवर्ड API तंत्र का उपयोग करके एनोटेशन के मान को प्रकाशित कर सकते हैं।
सुविधा के लिए, कंट्रोल प्लेन स्वचालित रूप से डाउनवर्ड API को अनुक्रमणिका को JOB_COMPLETION_INDEX
पर्यावरण चर में प्रकट करने के लिए सेट करता है।
यहाँ इस उदाहरण में चरणों का एक सिंहावलोकन है:
- अनुक्रमित पूर्णता का उपयोग करते हुए एक जॉब मैनिफेस्ट को परिभाषित करें। डाउनवर्ड API आपको पॉड अनुक्रमणिका एनोटेशन को एक पर्यावरण चर या फ़ाइल के रूप में कंटेनर में पास करने की अनुमति देता है।
- उस मैनिफेस्ट के आधार पर एक
अनुक्रमित
जॉब शुरू करें।
शुरू करने से पहले
आपको पहले से ही Job के बुनियादी, गैर-समानांतर उपयोग से परिचित होना चाहिए।
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप minikube की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
आपका कुबेरनेट्स सर्वर इसपर या इसके बाद के संस्करण पर होना चाहिए v1.21.संस्करण की जांच करने के लिए, लिखें kubectl version
.
एक दृष्टिकोण चुनें
वर्कर प्रोग्राम से कार्य आइटम तक पहुंचने के लिए, आपके पास कुछ विकल्प हैं:
JOB_COMPLETION_INDEX
पर्यावरण चर पढ़ें। जॉब कंट्रोलर स्वचालित रूप से इस चर को पूर्णता अनुक्रमणिका वाले एनोटेशन से जोड़ता है।- पूर्णता अनुक्रमणिका वाली एक फ़ाइल पढ़ें।
- यह मानते हुए कि आप प्रोग्राम को संशोधित नहीं कर सकते, आप इसे एक स्क्रिप्ट के साथ रैप कर सकते हैं जो ऊपर दी गई किसी भी विधि का उपयोग करके अनुक्रमणिका पढ़ती है और इसे कुछ ऐसे में परिवर्तित करती है जिसे प्रोग्राम इनपुट के रूप में उपयोग कर सकता है।
इस उदाहरण के लिए, कल्पना करें कि आपने विकल्प 3 चुना है और आप rev उपयोगिता चलाना चाहते हैं। यह प्रोग्राम एक फ़ाइल को आर्गुमेंट के रूप में स्वीकार करता है और इसकी सामग्री को उल्टा करके प्रिंट करता है।
rev data.txt
आप busybox
कंटेनर इमेज से rev
टूल का उपयोग करेंगे।
चूंकि यह केवल एक उदाहरण है, प्रत्येक पॉड केवल एक छोटा सा काम करता है (एक छोटी स्ट्रिंग को उल्टा करना)। एक वास्तविक वर्कलोड में आप, उदाहरण के लिए, एक जॉब बना सकते हैं जो दृश्य डेटा के आधार पर 60 सेकंड का वीडियो बनाने के कार्य का प्रतिनिधित्व करता है। वीडियो रेंडरिंग जॉब में प्रत्येक कार्य आइटम उस वीडियो क्लिप का एक विशेष फ्रेम रेंडर करना होगा। अनुक्रमित पूर्णता का मतलब होगा कि जॉब में प्रत्येक पॉड जानता है कि क्लिप की शुरुआत से फ्रेम की गिनती करके किस फ्रेम को रेंडर और प्रकाशित करना है।
एक अनुक्रमित जॉब को परिभाषित करें
यहाँ एक नमूना जॉब मैनिफेस्ट है जो अनुक्रमित
पूर्णता मोड का उपयोग करता है:
apiVersion: batch/v1
kind: Job
metadata:
name: 'indexed-job'
spec:
completions: 5
parallelism: 3
completionMode: Indexed
template:
spec:
restartPolicy: Never
initContainers:
- name: 'input'
image: 'docker.io/library/bash'
command:
- "bash"
- "-c"
- |
items=(foo bar baz qux xyz)
echo ${items[$JOB_COMPLETION_INDEX]} > /input/data.txt
volumeMounts:
- mountPath: /input
name: input
containers:
- name: 'worker'
image: 'docker.io/library/busybox'
command:
- "rev"
- "/input/data.txt"
volumeMounts:
- mountPath: /input
name: input
volumes:
- name: input
emptyDir: {}
उपरोक्त उदाहरण में, आप जॉब कंट्रोलर द्वारा सभी कंटेनर के लिए सेट किए गए बिल्ट-इन JOB_COMPLETION_INDEX
पर्यावरण चर का उपयोग करते हैं। एक इनिट कंटेनर अनुक्रमणिका को एक स्थिर मान में मैप करता है और इसे एक फ़ाइल में लिखता है जो emptyDir वॉल्यूम के माध्यम से वर्कर चलाने वाले कंटेनर के साथ साझा की जाती है।
वैकल्पिक रूप से, आप डाउनवर्ड API के माध्यम से अपना स्वयं का पर्यावरण चर परिभाषित कर सकते हैं कंटेनर में अनुक्रमणिका प्रकाशित करने के लिए। आप ConfigMap से एक पर्यावरण चर या फ़ाइल के रूप में मानों की एक सूची लोड करना भी चुन सकते हैं।
वैकल्पिक रूप से, आप सीधे डाउनवर्ड API का उपयोग कर सकते हैं एनोटेशन मान को एक वॉल्यूम फ़ाइल के रूप में पास करने के लिए, जैसा कि निम्नलिखित उदाहरण में दिखाया गया है:
apiVersion: batch/v1
kind: Job
metadata:
name: 'indexed-job'
spec:
completions: 5
parallelism: 3
completionMode: Indexed
template:
spec:
restartPolicy: Never
containers:
- name: 'worker'
image: 'docker.io/library/busybox'
command:
- "rev"
- "/input/data.txt"
volumeMounts:
- mountPath: /input
name: input
volumes:
- name: input
downwardAPI:
items:
- path: "data.txt"
fieldRef:
fieldPath: metadata.annotations['batch.kubernetes.io/job-completion-index']
जॉब चलाना
अब जॉब चलाएं:
# यह पहले दृष्टिकोण का उपयोग करता है ($JOB_COMPLETION_INDEX पर निर्भर)
kubectl apply -f https://kubernetes.io/examples/application/job/indexed-job.yaml
जब आप यह जॉब बनाते हैं, तो कंट्रोल प्लेन प्रत्येक अनुक्रमणिका के लिए एक पॉड की एक श्रृंखला बनाता है जो आपने निर्दिष्ट की है। .spec.parallelism
का मान निर्धारित करता है कि एक साथ कितने चल सकते हैं जबकि .spec.completions
निर्धारित करता है कि जॉब कुल कितने पॉड बनाता है।
चूंकि .spec.parallelism
.spec.completions
से कम है, कंट्रोल प्लेन उनमें से अधिक शुरू करने से पहले पहले कुछ पॉड के पूरा होने की प्रतीक्षा करता है।
आप जॉब के सफल होने की प्रतीक्षा कर सकते हैं, टाइमआउट के साथ:
# स्थिति नाम की जांच केस-असंवेदनशील है
kubectl wait --for=condition=complete --timeout=300s job/indexed-job
अब, जॉब का विवरण करें और जांचें कि यह सफल था।
kubectl describe jobs/indexed-job
आउटपुट इस तरह का होता है:
Name: indexed-job
Namespace: default
Selector: controller-uid=bf865e04-0b67-483b-9a90-74cfc4c3e756
Labels: controller-uid=bf865e04-0b67-483b-9a90-74cfc4c3e756
job-name=indexed-job
Annotations: <none>
Parallelism: 3
Completions: 5
Start Time: Thu, 11 Mar 2021 15:47:34 +0000
Pods Statuses: 2 Running / 3 Succeeded / 0 Failed
Completed Indexes: 0-2
Pod Template:
Labels: controller-uid=bf865e04-0b67-483b-9a90-74cfc4c3e756
job-name=indexed-job
Init Containers:
input:
Image: docker.io/library/bash
Port: <none>
Host Port: <none>
Command:
bash
-c
items=(foo bar baz qux xyz)
echo ${items[$JOB_COMPLETION_INDEX]} > /input/data.txt
Environment: <none>
Mounts:
/input from input (rw)
Containers:
worker:
Image: docker.io/library/busybox
Port: <none>
Host Port: <none>
Command:
rev
/input/data.txt
Environment: <none>
Mounts:
/input from input (rw)
Volumes:
input:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 4s job-controller Created pod: indexed-job-njkjj
Normal SuccessfulCreate 4s job-controller Created pod: indexed-job-9kd4h
Normal SuccessfulCreate 4s job-controller Created pod: indexed-job-qjwsz
Normal SuccessfulCreate 1s job-controller Created pod: indexed-job-fdhq5
Normal SuccessfulCreate 1s job-controller Created pod: indexed-job-ncslj
इस उदाहरण में, आप प्रत्येक अनुक्रमणिका के लिए कस्टम मानों के साथ जॉब चलाते हैं। आप पॉड्स में से एक का आउटपुट निरीक्षण कर सकते हैं:
kubectl logs indexed-job-fdhq5 # इसे उस जॉब के एक पॉड के नाम से बदलें
आउटपुट इस तरह का होता है:
xuq
4.3.5 - पॉड-टू-पॉड कम्युनिकेशन के साथ जॉब
इस उदाहरण में, आप एक जॉब चलाएंगे जो इंडेक्स्ड कम्प्लीशन मोड में कॉन्फ़िगर किया गया है, जिससे जॉब द्वारा बनाए गए पॉड्स पॉड IP एड्रेस के बजाय पॉड होस्टनाम का उपयोग करके एक-दूसरे के साथ कम्युनिकेट कर सकते हैं।
जॉब के भीतर पॉड्स को एक-दूसरे के साथ कम्युनिकेट करने की आवश्यकता हो सकती है। प्रत्येक पॉड में चल रहा यूजर वर्कलोड Kubernetes API सर्वर से अन्य पॉड्स के IPs जानने के लिए क्वेरी कर सकता है, लेकिन Kubernetes के बिल्ट-इन DNS रेजोल्यूशन पर भरोसा करना बहुत आसान है।
इंडेक्स्ड कम्प्लीशन मोड में जॉब्स स्वचालित रूप से पॉड्स के होस्टनाम को ${jobName}-${completionIndex}
फॉर्मेट में सेट करते हैं। आप इस फॉर्मेट का उपयोग पॉड होस्टनाम को निर्धारित रूप से बनाने और पॉड कम्युनिकेशन को सक्षम करने के लिए कर सकते हैं, बिना Kubernetes कंट्रोल प्लेन के साथ क्लाइंट कनेक्शन बनाए बिना API रिक्वेस्ट के माध्यम से पॉड होस्टनाम/IPs प्राप्त करने की आवश्यकता के।
यह कॉन्फ़िगरेशन उन उपयोग के मामलों के लिए उपयोगी है जहां पॉड नेटवर्किंग की आवश्यकता होती है लेकिन आप Kubernetes API सर्वर के साथ नेटवर्क कनेक्शन पर निर्भर नहीं करना चाहते हैं।
शुरू करने से पहले
आपको पहले से ही Job के बुनियादी उपयोग से परिचित होना चाहिए।
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप minikube की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
आपका कुबेरनेट्स सर्वर इसपर या इसके बाद के संस्करण पर होना चाहिए v1.21.संस्करण की जांच करने के लिए, लिखें kubectl version
.
नोट:
यदि आप minikube या इसी तरह के टूल का उपयोग कर रहे हैं, तो आपको यह सुनिश्चित करने के लिए अतिरिक्त कदम उठाने की आवश्यकता हो सकती है कि आपके पास DNS है।
पॉड-टू-पॉड कम्युनिकेशन के साथ जॉब शुरू करना
जॉब में पॉड होस्टनाम का उपयोग करके पॉड-टू-पॉड कम्युनिकेशन को सक्षम करने के लिए, आपको निम्नलिखित करना होगा:
- आपके जॉब द्वारा बनाए गए पॉड्स के लिए एक वैध लेबल सेलेक्टर के साथ एक हेडलेस सर्विस सेटअप करें। हेडलेस सर्विस जॉब के समान नेमस्पेस में होनी चाहिए। इसे करने का एक आसान तरीका
job-name: <your-job-name>
सेलेक्टर का उपयोग करना है, क्योंकिjob-name
लेबल स्वचालित रूप से Kubernetes द्वारा जोड़ा जाएगा। यह कॉन्फ़िगरेशन DNS सिस्टम को आपके जॉब को चलाने वाले पॉड्स के होस्टनाम के रिकॉर्ड बनाने के लिए ट्रिगर करेगा। - निम्नलिखित मान को अपने जॉब टेम्पलेट स्पेक में शामिल करके जॉब पॉड्स के लिए हेडलेस सर्विस को सबडोमेन सर्विस के रूप में कॉन्फ़िगर करें:
subdomain: <headless-svc-name>
उदाहरण
नीचे पॉड होस्टनाम के माध्यम से पॉड-टू-पॉड कम्युनिकेशन के साथ एक जॉब का एक कार्यशील उदाहरण है। जॉब तभी पूरा होता है जब सभी पॉड्स होस्टनाम का उपयोग करके एक-दूसरे को सफलतापूर्वक पिंग करते हैं।
नोट:
नीचे दिए गए उदाहरण में प्रत्येक पॉड पर निष्पादित बैश स्क्रिप्ट में, यदि पॉड को नेमस्पेस के बाहर से पहुंचने की आवश्यकता है तो पॉड होस्टनाम को नेमस्पेस द्वारा भी प्रीफिक्स किया जा सकता है।
apiVersion: v1
kind: Service
metadata:
name: headless-svc
spec:
clusterIP: None # clusterIP को हेडलेस सर्विस बनाने के लिए None होना चाहिए
selector:
job-name: example-job # जॉब नाम से मेल खाना चाहिए
---
apiVersion: batch/v1
kind: Job
metadata:
name: example-job
spec:
completions: 3
parallelism: 3
completionMode: Indexed
template:
spec:
subdomain: headless-svc # सर्विस नाम से मेल खाना चाहिए
restartPolicy: Never
containers:
- name: example-workload
image: bash:latest
command:
- bash
- -c
- |
for i in 0 1 2
do
gotStatus="-1"
wantStatus="0"
while [ $gotStatus -ne $wantStatus ]
do
ping -c 1 example-job-${i}.headless-svc > /dev/null 2>&1
gotStatus=$?
if [ $gotStatus -ne $wantStatus ]; then
echo "Failed to ping pod example-job-${i}.headless-svc, retrying in 1 second..."
sleep 1
fi
done
echo "Successfully pinged pod: example-job-${i}.headless-svc"
done
उपरोक्त उदाहरण को लागू करने के बाद, नेटवर्क पर एक-दूसरे तक पहुंचें: <pod-hostname>.<headless-service-name>
। आपको निम्नलिखित के समान आउटपुट दिखाई देना चाहिए:
kubectl logs example-job-0-qws42
Failed to ping pod example-job-0.headless-svc, retrying in 1 second...
Successfully pinged pod: example-job-0.headless-svc
Successfully pinged pod: example-job-1.headless-svc
Successfully pinged pod: example-job-2.headless-svc
नोट:
ध्यान रखें कि इस उदाहरण में उपयोग किया गया <pod-hostname>.<headless-service-name>
नाम फॉर्मेट DNS पॉलिसी को None
या Default
पर सेट करने के साथ काम नहीं करेगा। पॉड की DNS पॉलिसी देखें।
4.3.6 - समानांतर प्रसंस्करण विस्तार
इस उदाहरण में, आप एक जॉब चलाएंगे जो कई समानांतर वर्कर प्रोसेस का उपयोग करता है। प्रत्येक वर्कर अपने स्वयं के पॉड में चलने वाला एक अलग कंटेनर है।
इस उदाहरण में, जैसे-जैसे प्रत्येक पॉड बनाया जाता है, यह कार्य कतार से एक कार्य इकाई लेता है, इसे प्रोसेस करता है, और बाहर निकल जाता है।
यहाँ इस उदाहरण में चरणों का एक सिंहावलोकन है:
- एक मैसेज क्यू सेवा शुरू करें। इस उदाहरण में, आप RabbitMQ का उपयोग करते हैं, लेकिन आप कोई अन्य भी उपयोग कर सकते हैं। व्यवहार में आप एक मैसेज क्यू सेवा एक बार सेट करेंगे और इसका उपयोग कई जॉब्स के लिए करेंगे।
- एक क्यू बनाएं, और इसे संदेशों से भरें। प्रत्येक संदेश एक कार्य का प्रतिनिधित्व करता है जो किया जाना है। इस उदाहरण में, एक संदेश एक पूर्णांक है जिस पर हम एक लंबी गणना करेंगे।
- क्यू से कार्यों पर काम करने वाला एक जॉब शुरू करें। जॉब कई पॉड शुरू करता है। प्रत्येक पॉड मैसेज क्यू से एक कार्य लेता है, इसे संसाधित करता है, और बाहर निकल जाता है।
शुरू करने से पहले
आपको पहले से ही Job के बुनियादी, गैर-समानांतर उपयोग से परिचित होना चाहिए।
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप minikube की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
आपको एक कंटेनर इमेज रजिस्ट्री की आवश्यकता होगी जहां आप अपने क्लस्टर में चलाने के लिए इमेज अपलोड कर सकते हैं।
यह कार्य उदाहरण यह भी मानता है कि आपने Docker को स्थानीय रूप से स्थापित किया है।
मैसेज क्यू सेवा शुरू करना
यह उदाहरण RabbitMQ का उपयोग करता है, हालांकि, आप उदाहरण को किसी अन्य AMQP-प्रकार की मैसेज सेवा का उपयोग करने के लिए अनुकूलित कर सकते हैं।
व्यवहार में आप एक क्लस्टर में एक बार मैसेज क्यू सेवा सेट कर सकते हैं और इसका पुन: उपयोग कई जॉब्स के साथ-साथ लंबे समय तक चलने वाली सेवाओं के लिए कर सकते हैं।
RabbitMQ को निम्नानुसार शुरू करें:
# StatefulSet के उपयोग के लिए एक सेवा बनाएं
kubectl create -f https://kubernetes.io/examples/application/job/rabbitmq/rabbitmq-service.yaml
service "rabbitmq-service" created
kubectl create -f https://kubernetes.io/examples/application/job/rabbitmq/rabbitmq-statefulset.yaml
statefulset "rabbitmq" created
मैसेज क्यू सेवा का परीक्षण
अब, हम मैसेज क्यू तक पहुंचने का प्रयोग कर सकते हैं। हम एक अस्थायी इंटरैक्टिव पॉड बनाएंगे, इस पर कुछ टूल स्थापित करेंगे, और क्यू के साथ प्रयोग करेंगे।
पहले एक अस्थायी इंटरैक्टिव पॉड बनाएं।
# एक अस्थायी इंटरैक्टिव कंटेनर बनाएं
kubectl run -i --tty temp --image ubuntu:22.04
Waiting for pod default/temp-loe07 to be running, status is Pending, pod ready: false
... [ पिछली लाइन कई बार दोहराई जाती है .. जब यह रुक जाए तो रिटर्न दबाएं ] ...
ध्यान दें कि आपका पॉड नाम और कमांड प्रॉम्प्ट अलग होंगे।
अगला amqp-tools
स्थापित करें ताकि आप मैसेज क्यू के साथ काम कर सकें।
अगले कमांड दिखाते हैं कि आपको उस पॉड में इंटरैक्टिव शेल के अंदर क्या चलाने की आवश्यकता है:
apt-get update && apt-get install -y curl ca-certificates amqp-tools python3 dnsutils
बाद में, आप एक कंटेनर इमेज बनाएंगे जिसमें ये पैकेज शामिल हैं।
अगला, आप जांचेंगे कि आप RabbitMQ के लिए सेवा का पता लगा सकते हैं:
# इन कमांड को पॉड के अंदर चलाएं
# ध्यान दें कि rabbitmq-service में एक DNS नाम है, जो Kubernetes द्वारा प्रदान किया गया है:
nslookup rabbitmq-service
Server: 10.0.0.10
Address: 10.0.0.10#53
Name: rabbitmq-service.default.svc.cluster.local
Address: 10.0.147.152
(IP पते अलग-अलग होंगे)
यदि kube-dns एडऑन सही ढंग से सेट नहीं किया गया है, तो पिछला चरण आपके लिए काम नहीं कर सकता है। आप उस सेवा के लिए IP पता एक पर्यावरण चर में भी पा सकते हैं:
# यह जांच पॉड के अंदर चलाएं
env | grep RABBITMQ_SERVICE | grep HOST
RABBITMQ_SERVICE_SERVICE_HOST=10.0.147.152
(IP पता अलग होगा)
अगला आप सत्यापित करेंगे कि आप एक क्यू बना सकते हैं, और संदेशों को प्रकाशित और उपभोग कर सकते हैं।
# इन कमांड को पॉड के अंदर चलाएं
# अगली लाइन में, rabbitmq-service वह होस्टनाम है जहां rabbitmq-service
# तक पहुंचा जा सकता है। 5672 rabbitmq के लिए मानक पोर्ट है।
export BROKER_URL=amqp://guest:guest@rabbitmq-service:5672
# यदि आप पिछले चरण में "rabbitmq-service" को रिज़ॉल्व नहीं कर सके,
# तो इसके बजाय इस कमांड का उपयोग करें:
BROKER_URL=amqp://guest:guest@$RABBITMQ_SERVICE_SERVICE_HOST:5672
# अब एक क्यू बनाएं:
/usr/bin/amqp-declare-queue --url=$BROKER_URL -q foo -d
foo
क्यू में एक संदेश प्रकाशित करें:
/usr/bin/amqp-publish --url=$BROKER_URL -r foo -p -b Hello
# और इसे वापस प्राप्त करें।
/usr/bin/amqp-consume --url=$BROKER_URL -q foo -c 1 cat && echo 1>&2
Hello
अंतिम कमांड में, amqp-consume
टूल ने क्यू से एक संदेश (-c 1
) लिया,
और उस संदेश को एक मनमाने कमांड के मानक इनपुट में पास किया।
इस मामले में, प्रोग्राम cat
मानक इनपुट से पढ़े गए अक्षरों को प्रिंट करता है, और
echo एक कैरिज रिटर्न जोड़ता है ताकि उदाहरण पढ़ने योग्य हो।
क्यू को कार्यों से भरें
अब, क्यू को कुछ सिमुलेटेड कार्यों से भरें। इस उदाहरण में, कार्य प्रिंट किए जाने वाले स्ट्रिंग्स हैं।
अभ्यास में, संदेशों की सामग्री हो सकती है:
- फ़ाइलों के नाम जिन्हें संसाधित करने की आवश्यकता है
- प्रोग्राम के लिए अतिरिक्त फ्लैग
- डेटाबेस टेबल में कुंजियों की सीमाएं
- सिमुलेशन के लिए कॉन्फ़िगरेशन पैरामीटर
- रेंडर किए जाने वाले दृश्य के फ्रेम नंबर
यदि बड़ा डेटा है जिसे जॉब के सभी पॉड द्वारा केवल पढ़ने के मोड में आवश्यकता है, तो आप आमतौर पर उसे NFS जैसी साझा फ़ाइल सिस्टम में डालते हैं और उसे सभी पॉड पर केवल पढ़ने के लिए माउंट करते हैं, या पॉड में प्रोग्राम को इस तरह लिखते हैं कि यह क्लस्टर फ़ाइल सिस्टम से डेटा को मूल रूप से पढ़ सके (उदाहरण के लिए: HDFS)।
इस उदाहरण के लिए, आप AMQP कमांड लाइन टूल का उपयोग करके क्यू बनाएंगे और इसे भरेंगे। व्यवहार में, आप AMQP क्लाइंट लाइब्रेरी का उपयोग करके क्यू को भरने के लिए एक प्रोग्राम लिख सकते हैं।
# इसे अपने कंप्यूटर पर चलाएं, पॉड में नहीं
/usr/bin/amqp-declare-queue --url=$BROKER_URL -q job1 -d
job1
क्यू में आइटम जोड़ें:
for f in apple banana cherry date fig grape lemon melon
do
/usr/bin/amqp-publish --url=$BROKER_URL -r job1 -p -b $f
done
आपने क्यू में 8 संदेश जोड़े हैं।
एक कंटेनर इमेज बनाएं
अब आप एक इमेज बनाने के लिए तैयार हैं जिसे आप एक जॉब के रूप में चलाएंगे।
जॉब क्यू से संदेश पढ़ने और वास्तविक कार्य करने के लिए amqp-consume
उपयोगिता का उपयोग करेगा।
यहाँ एक बहुत ही सरल उदाहरण प्रोग्राम है:
4.3.7 - पॉड फेलियर पॉलिसी
पॉड फेलियर पॉलिसी आपको निम्नलिखित में मदद कर सकती है:
- कम्प्यूटेशनल संसाधनों का बेहतर उपयोग करके अनावश्यक पॉड रिट्राइज से बचें।
- पॉड डिसरप्शन (जैसे प्रीम्प्शन, API-इनिशिएटेड एविक्शन या टेंट-बेस्ड एविक्शन) के कारण जॉब फेलियर से बचें।
शुरू करने से पहले
आपको पहले से ही Job के बुनियादी उपयोग से परिचित होना चाहिए।
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप minikube की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
आपका कुबेरनेट्स सर्वर इसपर या इसके बाद के संस्करण पर होना चाहिए v1.25.संस्करण की जांच करने के लिए, लिखें kubectl version
.
आपके Kubernetes सर्वर का वर्जन v1.25 या उससे बाद का होना चाहिए।
वर्जन जांचने के लिए, kubectl version
दर्ज करें।
अनावश्यक पॉड रिट्राइज से बचने के लिए पॉड फेलियर पॉलिसी का उपयोग करना
निम्नलिखित उदाहरण के साथ, आप सीख सकते हैं कि कैसे पॉड फेलियर पॉलिसी का उपयोग करके अनावश्यक पॉड रीस्टार्ट से बचा जा सकता है जब एक पॉड फेलियर एक नॉन-रेट्रायबल सॉफ्टवेयर बग का संकेत देता है।
सबसे पहले, कॉन्फ़िग के आधार पर एक जॉब बनाएं:
apiVersion: batch/v1
kind: Job
metadata:
name: job-pod-failure-policy-failjob
spec:
completions: 8
parallelism: 2
template:
spec:
restartPolicy: Never
containers:
- name: main
image: docker.io/library/bash:5
command: ["bash"]
args:
- -c
- echo "Hello world! I'm going to exit with 42 to simulate a software bug." && sleep 30 && exit 42
backoffLimit: 6
podFailurePolicy:
rules:
- action: FailJob
onExitCodes:
containerName: main
operator: In
values: [42]
इसे चलाकर:
kubectl create -f job-pod-failure-policy-failjob.yaml
लगभग 30 सेकंड के बाद पूरा जॉब टर्मिनेट हो जाना चाहिए। जॉब की स्थिति की जांच करने के लिए चलाएं:
kubectl get jobs -l job-name=job-pod-failure-policy-failjob -o yaml
जॉब स्थिति में, निम्नलिखित कंडीशन्स दिखाई देते हैं:
FailureTarget
कंडीशन:reason
फील्डPodFailurePolicy
पर सेट है औरmessage
फील्ड में टर्मिनेशन के बारे में अधिक जानकारी है, जैसेContainer main for pod default/job-pod-failure-policy-failjob-8ckj8 failed with exit code 42 matching FailJob rule at index 0
। जॉब कंट्रोलर जॉब को फेलियर मानते ही इस कंडीशन को जोड़ता है। विवरण के लिए, टर्मिनेशन ऑफ जॉब पॉड्स देखें।Failed
कंडीशन:FailureTarget
कंडीशन के समानreason
औरmessage
। जॉब कंट्रोलर जॉब के सभी पॉड्स टर्मिनेट होने के बाद इस कंडीशन को जोड़ता है।
तुलना के लिए, यदि पॉड फेलियर पॉलिसी डिसेबल होती, तो पॉड के 6 रिट्राइज लगते, जिसमें कम से कम 2 मिनट लगते।
सफाई
आपके द्वारा बनाए गए जॉब को हटाएं:
kubectl delete jobs/job-pod-failure-policy-failjob
क्लस्टर स्वचालित रूप से पॉड्स को साफ कर देगा।
पॉड डिसरप्शन को अनदेखा करने के लिए पॉड फेलियर पॉलिसी का उपयोग करना
निम्नलिखित उदाहरण के साथ, आप सीख सकते हैं कि कैसे पॉड फेलियर पॉलिसी का उपयोग करके पॉड डिसरप्शन को अनदेखा किया जा सकता है जो .spec.backoffLimit
लिमिट की ओर पॉड रिट्राइ काउंटर को बढ़ाने से रोकता है।
सावधानी:
इस उदाहरण के लिए टाइमिंग महत्वपूर्ण है, इसलिए आप निष्पादन से पहले चरणों को पढ़ना चाह सकते हैं। पॉड डिसरप्शन को ट्रिगर करने के लिए, जबकि पॉड उस पर चल रहा हो (पॉड के शेड्यूल होने के 90 सेकंड के भीतर) नोड को ड्रेन करना महत्वपूर्ण है।
- कॉन्फ़िग के आधार पर एक जॉब बनाएं:
apiVersion: batch/v1
kind: Job
metadata:
name: job-pod-failure-policy-ignore
spec:
completions: 4
parallelism: 2
template:
spec:
restartPolicy: Never
containers:
- name: main
image: docker.io/library/bash:5
command: ["bash"]
args:
- -c
- echo "Hello world! I'm going to exit with 0 (success)." && sleep 90 && exit 0
backoffLimit: 0
podFailurePolicy:
rules:
- action: Ignore
onPodConditions:
- type: DisruptionTarget
इसे चलाकर:
kubectl create -f job-pod-failure-policy-ignore.yaml
- पॉड के शेड्यूल किए गए
nodeName
की जांच करने के लिए यह कमांड चलाएं:
nodeName=$(kubectl get pods -l job-name=job-pod-failure-policy-ignore -o jsonpath='{.items[0].spec.nodeName}')
- पॉड के पूरा होने से पहले नोड को ड्रेन करें (90 सेकंड के भीतर):
kubectl drain nodes/$nodeName --ignore-daemonsets --grace-period=0
- जॉब के लिए काउंटर न बढ़ने की जांच करने के लिए
.status.failed
की जांच करें:
kubectl get jobs -l job-name=job-pod-failure-policy-ignore -o yaml
- नोड को अनकॉर्डन करें:
kubectl uncordon nodes/$nodeName
जॉब रिज्यूम होता है और सफल होता है।
तुलना के लिए, यदि पॉड फेलियर पॉलिसी डिसेबल होती, तो पॉड डिसरप्शन पूरे जॉब को टर्मिनेट कर देता (क्योंकि .spec.backoffLimit
0 पर सेट है)।
सफाई
आपके द्वारा बनाए गए जॉब को हटाएं:
kubectl delete jobs/job-pod-failure-policy-ignore
क्लस्टर स्वचालित रूप से पॉड्स को साफ कर देगा।
कस्टम पॉड कंडीशन्स के आधार पर अनावश्यक पॉड रिट्राइज से बचने के लिए पॉड फेलियर पॉलिसी का उपयोग करना
निम्नलिखित उदाहरण के साथ, आप सीख सकते हैं कि कैसे पॉड फेलियर पॉलिसी का उपयोग करके कस्टम पॉड कंडीशन्स के आधार पर अनावश्यक पॉड रीस्टार्ट से बचा जा सकता है।
नोट:
नीचे दिया गया उदाहरण वर्जन 1.27 से काम करता है क्योंकि यह Pending
फेज में डिलीट किए गए पॉड्स के टर्मिनल फेज में ट्रांजिशन पर निर्भर करता है (देखें: पॉड फेज)।
- सबसे पहले, कॉन्फ़िग के आधार पर एक जॉब बनाएं:
apiVersion: batch/v1
kind: Job
metadata:
name: job-pod-failure-policy-config-issue
spec:
completions: 8
parallelism: 2
template:
spec:
restartPolicy: Never
containers:
- name: main
image: "non-existing-repo/non-existing-image:example"
backoffLimit: 6
podFailurePolicy:
rules:
- action: FailJob
onPodConditions:
- type: ConfigIssue
इसे चलाकर:
kubectl create -f job-pod-failure-policy-config-issue.yaml
ध्यान दें कि, इमेज मिसकॉन्फ़िगर्ड है, क्योंकि यह मौजूद नहीं है।
- जॉब के पॉड्स की स्थिति की जांच करने के लिए चलाएं:
kubectl get pods -l job-name=job-pod-failure-policy-config-issue -o yaml
आप इसके समान आउटपुट देखेंगे:
containerStatuses:
- image: non-existing-repo/non-existing-image:example
...
state:
waiting:
message: Back-off pulling image "non-existing-repo/non-existing-image:example"
reason: ImagePullBackOff
...
phase: Pending
ध्यान दें कि पॉड Pending
फेज में रहता है क्योंकि यह मिसकॉन्फ़िगर्ड इमेज को पुल करने में विफल रहता है। सिद्धांत रूप में, यह एक ट्रांजिएंट इश्यू हो सकता है और इमेज पुल की जा सकती है। हालांकि, इस मामले में, इमेज मौजूद नहीं है इसलिए हम इस तथ्य को एक कस्टम कंडीशन द्वारा इंगित करते हैं।
- कस्टम कंडीशन जोड़ें। पहले पैच तैयार करें:
cat <<EOF > patch.yaml
status:
conditions:
- type: ConfigIssue
status: "True"
reason: "NonExistingImage"
lastTransitionTime: "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
EOF
दूसरा, जॉब द्वारा बनाए गए पॉड्स में से एक का चयन करें:
podName=$(kubectl get pods -l job-name=job-pod-failure-policy-config-issue -o jsonpath='{.items[0].metadata.name}')
फिर, निम्न कमांड चलाकर एक पॉड पर पैच लागू करें:
kubectl patch pod $podName --subresource=status --patch-file=patch.yaml
यदि सफलतापूर्वक लागू किया गया, तो आपको इसके समान एक नोटिफिकेशन मिलेगा:
pod/job-pod-failure-policy-config-issue-k6pvp patched
- पॉड को
Failed
फेज में ट्रांजिशन करने के लिए इसे डिलीट करें:
kubectl delete pods/$podName
- जॉब की स्थिति की जांच करने के लिए चलाएं:
kubectl get jobs -l job-name=job-pod-failure-policy-config-issue -o yaml
जॉब स्थिति में, reason
फील्ड PodFailurePolicy
के बराबर वाली जॉब Failed
कंडीशन देखें। इसके अतिरिक्त, message
फील्ड में जॉब टर्मिनेशन के बारे में अधिक विस्तृत जानकारी होती है, जैसे: Pod default/job-pod-failure-policy-config-issue-k6pvp has condition ConfigIssue matching FailJob rule at index 0
।
नोट:
प्रोडक्शन एनवायरनमेंट में, चरण 3 और 4 को यूजर-प्रोवाइडेड कंट्रोलर द्वारा ऑटोमेट किया जाना चाहिए।
सफाई
आपके द्वारा बनाए गए जॉब को हटाएं:
kubectl delete jobs/job-pod-failure-policy-config-issue
क्लस्टर स्वचालित रूप से पॉड्स को साफ कर देगा।
वैकल्पिक
आप केवल पॉड बैकऑफ फेलियर पॉलिसी पर भरोसा कर सकते हैं, जॉब के .spec.backoffLimit
फील्ड को निर्दिष्ट करके। हालांकि, कई स्थितियों में .spec.backoffLimit
के लिए एक कम वैल्यू सेट करके अनावश्यक पॉड रिट्राइज से बचने और फिर भी यह सुनिश्चित करने के लिए कि जॉब पॉड डिसरप्शन द्वारा टर्मिनेट नहीं होगा, के बीच संतुलन खोजना समस्याग्रस्त हो सकता है।
आगे क्या है
- जॉब्स के बारे में और जानें
- पॉड फेलियर पॉलिसी के बारे में और जानें
- पॉड्स के बारे में और जानें
- सेवाएं के बारे में और जानें
4.4 - TLS
4.4.1 - क्यूबलेट के लिए प्रमाणपत्र आवर्तन कॉन्फ़िगर करें
यह पृष्ठ दिखाता है कि क्यूबलेट के लिए प्रमाणपत्र आवर्तन कैसे सक्षम और कॉन्फ़िगर कर सकते है।
Kubernetes v1.19 [stable]
शुरू करने से पहले
- कम से कम कुबेरनेट्स संस्करण 1.8.0 या उसके बाद की आवश्यकता है।
अवलोकन
क्यूबलेट प्रमाणपत्रों का उपयोग कुबरनेट्स API के साथ प्रमाणित करने के लिए करता है। डिफ़ॉल्ट रूप से, ये प्रमाणपत्र एक वर्ष की समाप्ति के साथ जारी किए जाते हैं ताकि उन्हें बार-बार नवीनीकृत करने की आवश्यकता न हो।
कुबरनेट्स में क्यूबलेट प्रमाणपत्र आवर्तन शामिल है, जो स्वचालित रूप से एक नई कुंजी उत्पन्न करेगा जो स्वचालित रूप से एक नई कुंजी उत्पन्न करेगा और वर्तमान प्रमाणपत्र की समाप्ति के करीब आने पर कुबरनेट्स API से एक नया प्रमाणपत्र अनुरोध करेगा। एक बार नया प्रमाणपत्र उपलब्ध हो जाने पर, यह कुबरनेट्स API के साथ कनेक्शन को प्रमाणित करने के लिए उपयोग किया जाएगा।
क्लाइंट प्रमाणपत्र रोटेशन सक्षम करना
kubelet
प्रक्रिया एक प्राचल --rotate-certificates
स्वीकार करती है जो नियंत्रित करती है कि क्या कुबलेट स्वचालित रूप से वर्तमान में उपयोग किए जा रहे प्रमाणपत्र की समाप्ति के करीब आने पर एक नया प्रमाणपत्र अनुरोध करेगा।
kube-controller-manager
प्रक्रिया एक प्राचल स्वीकार करती है
--cluster-signing-duration
(--experimental-cluster-signing-duration
1.19 से पहले)
जो नियंत्रित करता है कि प्रमाणपत्र कितने समय के लिए जारी किए जाएंगे।
प्रमाणपत्र रोटेशन कॉन्फ़िगरेशन को समझना
जब एक कुबलेट शुरू होता है, यदि इसे बूटस्ट्रैप करने के लिए कॉन्फ़िगर किया गया है (उपयोग करते हुए
--bootstrap-kubeconfig
फ्लैग), तो यह कुबरनेट्स API से कनेक्ट करने और एक प्रमाणपत्र हस्ताक्षर अनुरोध जारी करने के लिए अपने प्रारंभिक प्रमाणपत्र का उपयोग करेगा। आप प्रमाणपत्र हस्ताक्षर अनुरोधों की स्थिति देख सकते हैं:
kubectl get csr
शुरुआत में, किसी नोड पर कुबलेट से एक प्रमाणपत्र हस्ताक्षर अनुरोध की स्थिति Pending
होगी।
यदि प्रमाणपत्र हस्ताक्षर अनुरोध विशिष्ट मानदंडों को पूरा करता है, तो इसे नियंत्रक प्रबंधक द्वारा स्वचालित रूप से अनुमोदित किया जाएगा, और फिर इसकी स्थिति Approved
होगी।
इसके बाद, नियंत्रक प्रबंधक एक प्रमाणपत्र पर हस्ताक्षर करेगा, जो
--cluster-signing-duration
पैरामीटर द्वारा निर्दिष्ट अवधि के लिए जारी किया जाएगा, और हस्ताक्षरित प्रमाणपत्र को प्रमाणपत्र हस्ताक्षर अनुरोध से जोड़ा जाएगा।
कुबलेट कुबरनेट्स API से हस्ताक्षरित प्रमाणपत्र प्राप्त करेगा और इसे डिस्क पर लिखेगा,
--cert-dir
द्वारा निर्दिष्ट स्थान में। फिर कुबलेट कुबरनेट्स API से कनेक्ट करने के लिए नए प्रमाणपत्र का उपयोग करेगा।
जैसे ही हस्ताक्षरित प्रमाणपत्र की समाप्ति निकट आती है, कुबलेट स्वचालित रूप से कुबरनेट्स API का उपयोग करके एक नया प्रमाणपत्र हस्ताक्षर अनुरोध जारी करेगा। यह प्रमाणपत्र पर शेष समय के 30% और 10% के बीच किसी भी बिंदु पर हो सकता है। फिर से, नियंत्रक प्रबंधक स्वचालित रूप से प्रमाणपत्र अनुरोध को अनुमोदित करेगा और प्रमाणपत्र हस्ताक्षर अनुरोध से एक हस्ताक्षरित प्रमाणपत्र जोड़ेगा। कुबलेट कुबरनेट्स API से नया हस्ताक्षरित प्रमाणपत्र प्राप्त करेगा और इसे डिस्क पर लिखेगा। फिर यह कुबरनेट्स API के साथ कनेक्शन को नए प्रमाणपत्र का उपयोग करके पुन: कनेक्ट करने के लिए अपडेट करेगा।
5 - ट्यूटोरियल
प्रलेखन के इस खंड में ट्यूटोरियल हैं। ट्यूटोरियल दिखाता है कि किसी एकल कार्य से बड़े लक्ष्य को कैसे पूरा किया जाए। आमतौर पर एक ट्यूटोरियल में कई खंड होते हैं, जिनमें से प्रत्येक में चरणों के क्रम होते हैं। प्रत्येक ट्यूटोरियल से परिचित होने से पहले, हम आपको मानकीकृत शब्दावली पृष्ट को बुकमार्क करने की सलाह देते हैं।
मूलभूत
-
मूलभूत कुबरनेट्स एक गहन संवादात्मक ट्यूटोरियल है जो आपको कुबेरनेट्स प्रणाली को समझने और कुबेरनेट्स की कुछ बुनियादी सुविधाओं को आज़माने में मदद करता है।
विन्यास
- Configuring Redis Using a ConfigMap (कॉन्फिग मैप का उपयोग करके Redis का विन्यास करना)
स्टेटलेस एप्लीकेशन
-
Exposing an External IP Address to Access an Application in a Cluster (किसी क्लस्टर में किसी एप्लिकेशन तक पहुंचने के लिए बाहरी आईपी पते को उजागर करना)
-
Example: Deploying PHP Guestbook application with Redis (उदाहरण: रेडिस के साथ PHP गेस्टबुक एप्लिकेशन को उपयोग करना)
स्टेटफुल एप्लीकेशन
क्लस्टर
सर्विस
आगे क्या है
यदि आप एक ट्यूटोरियल लिखना चाहते हैं, तो ट्यूटोरियल पेज प्रकार के बारे में जानकारी के लिए सामग्री पृष्ठ प्रकार देखें।
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
कमांड का उपयोग करें। पॉड प्रदान की गई डॉकर इमेज के आधार पर एक कंटेनर चलाता है।kubectl create deployment hello-node --image=registry.k8s.io/echoserver:1.4
-
डेप्लॉयमेंट देखें:
kubectl get deployments
आउटपुट कुछ इस समान होगा:
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
सर्विस बनाएं
आमतौर पर, पॉड कुबेरनेट्स क्लस्टर के भीतर अपने आंतरिक IP पते से ही पहुँचा जा सकता है।
hello-node
कंटेनर को कुबेरनेट्स वर्चुअल नेटवर्क के
बाहर से सुलभ बनाने के लिए,पॉड को
कुबेरनेट्स सर्विस के रूप में बेनकाब करना होगा।
-
kubectl expose
कमांड का उपयोग करके पॉड को सार्वजनिक इंटरनेट पर एक्सपोज़ करें:kubectl expose deployment hello-node --type=LoadBalancer --port=8080
--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) का एक समूह शामिल है जिसे स्थानीय कुबेरनेट्स वातावरण में सक्षम, अक्षम और खोला जा सकता है।
-
वर्तमान में उपलब्ध ऐडऑन की सूची:
minikube addons list
आउटपुट कुछ इस समान होगा:
addon-manager: enabled dashboard: enabled default-storageclass: enabled efk: disabled freshpod: disabled gvisor: disabled helm-tiller: disabled ingress: disabled ingress-dns: disabled logviewer: disabled metrics-server: disabled nvidia-driver-installer: disabled nvidia-gpu-device-plugin: disabled registry: disabled registry-creds: disabled storage-provisioner: enabled storage-provisioner-gluster: disabled
-
एक ऐडऑन सक्षम करें, उदाहरण के लिए,
metrics-server
:minikube addons enable metrics-server
आउटपुट कुछ इस समान होगा:
The 'metrics-server' addon is enabled
-
आपके द्वारा बनाई गई पॉड और सर्विस देखें:
kubectl get pod,service -n kube-system
आउटपुट कुछ इस समान होगा:
NAME READY STATUS RESTARTS AGE pod/coredns-5644d7b6d9-mh9ll 1/1 Running 0 34m pod/coredns-5644d7b6d9-pqd2t 1/1 Running 0 34m pod/metrics-server-67fb648c5 1/1 Running 0 26s pod/etcd-minikube 1/1 Running 0 34m pod/influxdb-grafana-b29w8 2/2 Running 0 26s pod/kube-addon-manager-minikube 1/1 Running 0 34m pod/kube-apiserver-minikube 1/1 Running 0 34m pod/kube-controller-manager-minikube 1/1 Running 0 34m pod/kube-proxy-rnlps 1/1 Running 0 34m pod/kube-scheduler-minikube 1/1 Running 0 34m pod/storage-provisioner 1/1 Running 0 34m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/metrics-server ClusterIP 10.96.241.45 <none> 80/TCP 26s service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s
-
metrics-server
अक्षम करें:minikube addons disable metrics-server
आउटपुट कुछ इस समान होगा:
metrics-server was successfully disabled
साफ - सफाई
अब आप अपने क्लस्टर में बनाए गए संसाधनों को साफ कर सकते हैं:
kubectl delete service hello-node
kubectl delete deployment hello-node
वैकल्पिक रूप से, मिनिक्यूब वर्चुअल मशीन (VM) को बंद करें:
minikube stop
वैकल्पिक रूप से, मिनिक्यूब VM को डिलीट करें:
minikube delete
आगे क्या है
- डेप्लॉयमेंट ऑब्जेक्ट के बारे में अधिक जाने।
- एप्लीकेशन डेप्लॉय करने के बारे में अधिक जाने।
- सर्विस ऑब्जेक्ट के बारे में अधिक जाने।
5.2 - बुनियादी कुबेरनेट्स सीखें
बुनियादी कुबेरनेट्स
यह ट्यूटोरियल कुबेरनेट्स क्लस्टर ऑर्केस्ट्रेशन सिस्टम की मूल बातों का पूर्वाभ्यास प्रदान करता है। प्रत्येक मॉड्यूल में कुबेरनेट्स की प्रमुख विशेषताओं और अवधारणाओं पर कुछ जानकारी और एक इंटरैक्टिव ऑनलाइन ट्यूटोरियल शामिल होते हैं। ये इंटरेक्टिव ट्यूटोरियल आपको अपने लिए एक साधारण क्लस्टर और इसके कंटेनरीकृत एप्लीकेशन का प्रबंधन करने देते हैं।
इंटरैक्टिव ट्यूटोरियल का उपयोग करके, आप सीख सकते हैं:
- एक क्लस्टर पर कंटेनरीकृत एप्लीकेशन डिप्लॉय करें।
- डिप्लॉयमेंट को स्केल करें।
- नए सॉफ़्टवेयर संस्करण के साथ कंटेनरीकृत एप्लिकेशन को अपडेट करें।
- कंटेनरीकृत एप्लिकेशन को डीबग करें।
कुबेरनेट्स आपके लिए क्या कर सकता है?
आधुनिक वेब सेवाओं के साथ उपयोगकर्ता उम्मीद करते हैं कि एप्लिकेशन 24/7 उपलब्ध होंगे, और डेवलपर्स उन एप्लिकेशन के नए संस्करणों को दिन में कई बार डिप्लॉय करने की उम्मीद करते हैं। कंटेनरीकरण पैकेज सॉफ़्टवेयर को इन लक्ष्यों को पूरा करने में मदद करता है, जिससे एप्लिकेशन बिना डाउनटाइम के रिलीज़ और अपडेट किए जा सकते हैं। कुबेरनेट्स आपको यह सुनिश्चित करने में मदद करता है कि वे कंटेनरीकृत एप्लिकेशन जहां और जब आप चाहते हैं, चलते हैं, और उन्हें उन संसाधनों और उपकरणों को खोजने में मदद करते हैं जिनकी उन्हें काम करने के लिए आवश्यकता होती है। कुबेरनेट्स एक उत्पादन के लिए तैयार, ओपन सोर्स प्लेटफॉर्म है जिसे कंटेनर ऑर्केस्ट्रेशन में गूगल के संचित अनुभव के साथ डिज़ाइन किया गया है और समुदाय के उत्तम विचारों से संयुक्त है।
5.2.1 - एक क्लस्टर बनाएं
कुबेरनेट्स क्लस्टर के बारे में जानें और मिनिक्यूब का उपयोग करके एक सरल क्लस्टर बनाएं।
5.2.1.1 - Minikube का उपयोग कर क्लस्टर बनाना
उद्देश्य
- जानें कुबेरनेट्स क्लस्टर क्या है।
- जानें मिनिक्यूब क्या है।
- अपने कंप्यूटर पर Kubernetes क्लस्टर प्रारंभ करें।
कुबेरनेट्स क्लस्टर
कुबेरनेट्स उन कंप्यूटरों के समूह को प्रबंधित करने में मदद करता है जो एक इकाई के रूप में काम करने के लिए जुड़े होते हैं। कुबेरनेट्स के एब्स्ट्रैक्शन आपको कंटेनरीकृत एप्लिकेशन को अलग-अलग मशीनों में चलाए बिना क्लस्टर डिप्लॉय करने की अनुमति देता है। डिप्लॉयमेंट के इस नए मॉडल का उपयोग करने के लिए, एप्लिकेशन को इस तरह से पैक किया जाना चाहिए जो उन्हें विभिन्न होस्ट से अलग करता है: उन्हें कंटेनरीकृत किया गया हो। कंटेनरीकृत एप्लिकेशन पिछले डिप्लॉयमेंट मॉडल की तुलना में अधिक लचीले और उपलब्ध हैं, जहां विभिन्न मशीनों पर सीधे एप्लिकेशन इंस्टॉल किए गए थे क्योंकि पैकेज को होस्ट में गहराई से एकीकृत किया गया था। कुबेरनेट्स एक क्लस्टर में एप्लिकेशन कंटेनरों के वितरण और शेड्यूलिंग को अधिक कुशल तरीके से स्वचालित करता है। कुबेरनेट्स एक ओपन सोर्स प्लेटफॉर्म है और उत्पादन के लिए तैयार है।
कुबेरनेट्स क्लस्टर में दो प्रकार के संसाधन होते हैं:
- कंट्रोल प्लेन क्लस्टर का समन्वय करता है
- नोड्स वे कर्मचारी हैं जो एप्लिकेशन चलाते हैं
सारांश:
- कुबेरनेट्स क्लस्टर
- मिनिक्यूब
कुबेरनेट्स एक प्रोडक्शन-ग्रेड, ओपन-सोर्स प्लेटफॉर्म है जो कंप्यूटर क्लस्टर के भीतर और उसके भीतर एप्लिकेशन कंटेनरों के प्लेसमेंट (शेड्यूलिंग) और निष्पादन को व्यवस्थित करता है।
क्लस्टर आरेख
कंट्रोल प्लेन क्लस्टर के प्रबंधन के लिए जिम्मेदार है। कंट्रोल प्लेन आपके क्लस्टर में सभी गतिविधियों का समन्वय करता है, जैसे एप्लिकेशन शेड्यूल करना, एप्लिकेशन की वांछित स्थिति को बनाए रखना, एप्लिकेशन को स्केल करना और नए अपडेट रोल आउट करना।
नोड एक VM या एक भौतिक कंप्यूटर है जो कुबेरनेट्स क्लस्टर में एक वर्कर मशीन के रूप में कार्य करता है। प्रत्येक नोड में एक kubelet होता है, जो नोड के प्रबंधन और कुबेरनेट्स नियंत्रण के साथ संचार करने के लिए एक एजेंट है। नोड में कंटेनर संचालन को संभालने के लिए उपकरण भी होने चाहिए, जैसे कि containerd या Docker। उत्पादन ट्रैफ़िक को संभालने वाले कुबेरनेट्स क्लस्टर में कम से कम तीन नोड होने चाहिए।
कंट्रोल प्लेन क्लस्टर और नोड्स को मैनेज करते हैं जिनका उपयोग रनिंग एप्लिकेशन को होस्ट करने के लिए किया जाता है।
जब आप कुबेरनेट्स पर एप्लिकेशन डिप्लॉयमेंट करते हैं, तो आप कंट्रोल प्लेन को एप्लिकेशन कंटेनर शुरू करने के लिए कहते हैं। नियंत्रण विमान कंटेनरों को क्लस्टर के नोड्स पर चलाने के लिए शेड्यूल करता है। नोड्स कुबेरनेट्स एपीआई का उपयोग करके कंट्रोल प्लेन के साथ संचार करते हैं, जिसे कंट्रोल प्लेन एक्सपोज करता है। अंतिम उपयोगकर्ता भी कुबेरनेट्स एपीआई का उपयोग सीधे क्लस्टर के साथ बातचीत करने के लिए कर सकते हैं।
कुबेरनेट्स क्लस्टर को भौतिक या वर्चुअल मशीनों पर तैनात किया जा सकता है। कुबेरनेट्स विकास के साथ आरंभ करने के लिए, आप मिनिक्यूब का उपयोग कर सकते हैं। मिनिक्यूब एक हल्का कुबेरनेट्स कार्यान्वयन है जो आपकी स्थानीय मशीन पर एक वीएम बनाता है और केवल एक नोड वाला एक साधारण क्लस्टर तैनात करता है। मिनिक्यूब Linux , MacOS और Windows सिस्टम के लिए उपलब्ध है। मिनिक्यूब CLI आपके क्लस्टर के साथ काम करने के लिए बुनियादी बूटस्ट्रैपिंग संचालन प्रदान करता है, जिसमें स्टार्ट, स्टॉप, स्टेटस और डिलीट शामिल हैं। हालांकि, इस ट्यूटोरियल के लिए, आप मिनीक्यूब के साथ पहले से इंस्टॉल किए गए ऑनलाइन टर्मिनल का उपयोग करेंगे।
अब जब आप कुबेरनेट्स के बारे में अधिक जान गए हैं, तो इसे अपने कंप्यूटर पर आज़माने के लिए हेलो मिनिक्यूब पर जाएं।
एक बार जब आप ऐसा कर लें, तो kubectl का उपयोग करके डिप्लॉयमेंट कैसे बनाएं पर जाएँ|
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
कमांड के साथ तैनात करें। हमें डिप्लॉयमेंट नाम और ऐप छवि स्थान प्रदान करने की आवश्यकता है (डॉकर हब के बाहर होस्ट की गई छवियों के लिए पूर्ण रिपॉजिटरी यूआरएल शामिल करें)।
kubectl create deployment Kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
बहुत बढ़िया! आपने अभी-अभी एक डिप्लॉयमेंट बनाकर अपना पहला एप्लिकेशन डेप्लॉये किया है। इसने आपके लिए कुछ चीज़ें निष्पादित कीं:
- एक उपयुक्त नोड की खोज की गई जहां एप्लिकेशन का एक उदाहरण चलाया जा सके (हमारे पास केवल 1 उपलब्ध नोड है)
- एप्लिकेशन को उस नोड पर चलने के लिए शेड्यूल किया
- आवश्यकता पड़ने पर नए नोड पर इंस्टेंस को पुनर्निर्धारित करने के लिए क्लस्टर को कॉन्फ़िगर किया गया
अपने डिप्लॉयमेंट को सूचीबद्ध करने के लिए kubectl get deployment
कमांड का उपयोग करें:
kubectl get deployments
हम देखते हैं कि आपके ऐप का एक इंस्टेंस 1 डिप्लॉयमेंट चला रहा है। इंस्टेंस आपके नोड पर एक कंटेनर के अंदर चल रहा है।
ऐप देखें
कुबेरनेट्स के अंदर चलने वाले पॉड एक निजी, पृथक नेटवर्क पर चल रहे हैं।
डिफ़ॉल्ट रूप से वे उसी कुबेरनेट्स क्लस्टर के भीतर अन्य पॉड्स और सेवाओं से दिखाई देते हैं, लेकिन उस नेटवर्क के बाहर नहीं।
जब हम kubectl
का उपयोग करते हैं, तो हम अपने एप्लिकेशन के साथ संचार करने के लिए एक एपीआई एंडपॉइंट के माध्यम से बातचीत कर रहे होते हैं।
हम बाद में मॉड्यूल 4 में कुबेरनेट्स क्लस्टर के बाहर आपके एप्लिकेशन को प्रदर्शित करने के अन्य विकल्पों पर चर्चा करेंगे।
kubectl proxy
कमांड एक प्रॉक्सी बना सकता है जो संचार को क्लस्टर-वाइड, निजी नेटवर्क में अग्रेषित करेगा। प्रॉक्सी को कंट्रोल-सी दबाकर समाप्त किया जा सकता है और यह चलने के दौरान कोई आउटपुट नहीं दिखाएगा।
प्रॉक्सी चलाने के लिए आपको दूसरी टर्मिनल विंडो खोलनी होगी।
kubectl proxy
अब हमारे होस्ट (टर्मिनल) और कुबेरनेट्स क्लस्टर के बीच एक कनेक्शन है। प्रॉक्सी इन टर्मिनलों से एपीआई तक सीधी पहुंच सक्षम बनाता है।
आप प्रॉक्सी एंडपॉइंट के माध्यम से होस्ट किए गए सभी एपीआई देख सकते हैं। उदाहरण के लिए, हम curl
कमांड का उपयोग करके सीधे API के माध्यम से संस्करण को क्वेरी कर सकते हैं:
curl http://localhost:8001/version
kubectl proxy
जिसे आपने ऊपर शुरू किया है दूसरे टर्मिनल में चल रहा है.एपीआई सर्वर स्वचालित रूप से पॉड नाम के आधार पर प्रत्येक पॉड के लिए एक एंडपॉइंट बनाएगा, जिसे प्रॉक्सी के माध्यम से भी एक्सेस किया जा सकता है।
सबसे पहले हमें पॉड नाम प्राप्त करने की आवश्यकता है, और हम पर्यावरण चर POD_NAME में संग्रहित करेंगे:
export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{ {end}}')
echo पॉड का नाम: $POD_NAME
आप निम्न चलाकर प्रॉक्सी एपीआई के माध्यम से पॉड तक पहुंच सकते हैं:
curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/
नए डिप्लॉयमेंट को प्रॉक्सी का उपयोग किए बिना पहुंच योग्य बनाने के लिए, एक सेवा की आवश्यकता होती है जिसे मॉड्यूल 4 में समझाया जाएगा .
एक बार जब आप तैयार हो जाएं, तो पॉड्स और नोड्स देखना पर आगे बढ़ें।
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
अनुरोध चलाएँ:
curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME:8080/proxy/
url पॉड के एपीआई का मार्ग है।
कंटेनर लॉग देखें
कुछ भी जो एप्लिकेशन सामान्य रूप से मानक आउटपुट पर भेजता है वह पॉड के भीतर कंटेनर के लिए लॉग बन जाता है। हम 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.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 नामक एक सेवा है जो मिनीक्यूब के क्लस्टर शुरू करने पर डिफ़ॉल्ट रूप से बनाई जाती है। एक नई सेवा बनाने और उसे बाहरी ट्रैफ़िक में उजागर करने के लिए हम पैरामीटर के रूप में नोडपोर्ट के साथ एक्सपोज़ कमांड का उपयोग करेंगे।
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --पोर्ट 8080
आइए फिर से get services
उपकमांड चलाएँ:
kubectl get services
अब हमारे पास कुबेरनेट्स-बूटकैंप नामक एक चालू सेवा है। यहां हम देखते हैं कि सेवा को एक अद्वितीय क्लस्टर-आईपी, एक आंतरिक पोर्ट और एक बाहरी-आईपी (नोड का आईपी) प्राप्त हुआ।
यह पता लगाने के लिए कि कौन सा पोर्ट बाहरी रूप से खोला गया था (प्रकार: NodePort सेवा के लिए) हम describe service
उपकमांड चलाएंगे:
kubectl describe services/kubernetes-bootcamp
NODE_PORT नामक एक पर्यावरण चर बनाएं जिसमें निर्दिष्ट नोड पोर्ट का मान हो:
export NODE_PORT='$(kubectl getservices/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')'
echo "NODE_PORT=$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 के साथ चल रहा है:
kubectl exec -ti $POD_NAME -- curl http://localhost:8080
हम यहां देखते हैं कि एप्लिकेशन चालू है। ऐसा इसलिए है क्योंकि परिनियोजन एप्लिकेशन का प्रबंधन कर रहा है। एप्लिकेशन को बंद करने के लिए, आपको परिनियोजन को भी हटाना होगा।
एक बार जब आप तैयार हो जाएं, तो आगे बढ़ें अपने ऐप के कई इंस्टेंस को चलाना
5.2.5 - अपने ऐप को स्केल करें
5.2.5.1 - अपने ऐप के कई इंस्टेंस चलाना
उद्देश्य
- kubectl का उपयोग करके किसी ऐप को स्केल करें।
एक एप्लीकेशन को स्केल करना
पिछले मॉड्यूल में हमने एक डिप्लॉयमेंट बनाया और इसे सर्विस के माध्यम से सार्वजनिक रूप से प्रदर्शित किया। डिप्लॉयमेंट ने हमारे एप्लिकेशन को चलाने के लिए केवल एक पॉड बनाया। जब ट्रैफ़िक बढ़ता है, तो हमें उपयोगकर्ता की मांग को पूरा करने के लिए एप्लिकेशन को स्केल करना होता है।
डिप्लॉयमेंट में रेप्लिका की संख्या को बदलकर स्केलिंग को प्राप्त किया जाता है।
टिप्पणी:
यदि आप पिछले अनुभाग के बाद यह प्रयास कर रहे हैं, तो हो सकता है कि आपने डिप्लॉयमेंट को उजागर करने वाली सेवा को हटा दिया हो। उस स्थिति में, कृपया निम्नलिखित कमांड का उपयोग करके डिप्लॉयमेंट को फिर से उजागर करें:
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
सारांश:
- एक डिप्लॉयमेंट को स्केल करना
आप kubectl create deployment कमांड के लिए --replicas पैरामीटर का उपयोग करके कई इंस्टेंस के साथ एक डिप्लॉयमेंट शुरू से बना सकते हैं।
स्केलिंग अवलोकन
एक डिप्लॉयमेंट को स्केल करना यह सुनिश्चित करेगा कि नए पॉड बनाए गए हैं और उपलब्ध संसाधनों के साथ नोड्स के लिए शेड्यूल किए गए हैं। स्केलिंग से पॉड्स की संख्या नई वांछित स्थिति में बढ़ जाएगी। कुबेरनेट्स पॉड्स के ऑटोस्केलिंग का भी समर्थन करता है, लेकिन यह इस ट्यूटोरियल के दायरे से बाहर है। शून्य पर स्केलिंग भी संभव है, और यह निर्दिष्ट डिप्लॉयमेंट के सभी पॉड्स को समाप्त कर देगा।
किसी एप्लिकेशन के कई इंस्टेंस को चलाने के लिए उन सभी को ट्रैफ़िक वितरित करने के तरीके की आवश्यकता होगी। सर्विसों में एक एकीकृत लोड-बैलेंसर होता है जो एक एक्सपोज्ड डिप्लॉयमेंट के सभी पॉड्स को नेटवर्क ट्रैफ़िक वितरित करेगा। सर्विसे एंडपॉइंट्स का उपयोग करते हुए रनिंग पॉड्स की लगातार निगरानी करेंगी यह सुनिश्चित करने के लिए कि ट्रैफ़िक केवल उपलब्ध पॉड्स को ही भेजा जाए।
डिप्लॉयमेंट में रेप्लिका की संख्या को बदलकर स्केलिंग को पूरा किया जाता है।
एक बार जब आपके पास किसी एप्लिकेशन के चलने के कई इंस्टेंस हैं, तो आप डाउनटाइम के बिना रोलिंग अपडेट करने में सक्षम होंगे। हम इसे अगले मॉड्यूल में करेंगे। अब, ऑनलाइन टर्मिनल पर चलते हैं और हमारे एप्लिकेशन को स्केल करते हैं।
डिप्लॉयमेंट को स्केल करना
अपनी तैनाती को सूचीबद्ध करने के लिए, 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
कमांड का उपयोग करेंगे, इसके बाद परिनियोजन प्रकार, नाम और उदाहरणों की वांछित संख्या का उपयोग करेंगे:
kubectl scale deployment/kubernetes-bootcamp --replicas=4
अपनी तैनाती को एक बार फिर से सूचीबद्ध करने के लिए, 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 नामक एक पर्यावरण चर बनाएं जिसका मान नोड पोर्ट के रूप में हो:
export NODE_PORT='$(kubectl getservices/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')'
echo NODE_PORT=$NODE_PORT
इसके बाद, हम उजागर आईपी पते और पोर्ट पर एक curl
करेंगे। कमांड को कई बार निष्पादित करें:
curl http://"$(minikube ip):$NODE_PORT"
हम प्रत्येक अनुरोध के साथ एक अलग पॉड पर पहुंचते हैं। यह दर्शाता है कि लोड-संतुलन काम कर रहा है।
स्केल डाउन
परिनियोजन को 2 प्रतिकृतियों तक कम करने के लिए, scale
उपकमांड को फिर से चलाएँ:
kubectl scale deployment/kubernetes-bootcamp --replicas=2
यह जांचने के लिए परिनियोजन को सूचीबद्ध करें कि क्या परिवर्तन get deployments
उपकमांड के साथ लागू किया गया था:
kubectl get deployments
प्रतिकृतियों की संख्या घटकर 2 हो गई। get pods
के साथ पॉड्स की संख्या सूचीबद्ध करें:
kubectl get pods -o wide
यह पुष्टि करता है कि 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 नामक एक पर्यावरण चर बनाएं जिसमें निर्दिष्ट नोड पोर्ट का मान हो:
export NODE_PORT='$(kubectl getservices/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')'
echo "NODE_PORT=$NODE_PORT"
इसके बाद, उजागर आईपी और पोर्ट पर curl
करें:
curl http://'$(minikube ip):$NODE_PORT'
हर बार जब आप curl
कमांड चलाएंगे, तो आप एक अलग पॉड से टकराएंगे। ध्यान दें कि सभी पॉड्स अब नवीनतम संस्करण (v2) चला रहे हैं।
आप rollout status
उपकमांड चलाकर भी अपडेट की पुष्टि कर सकते हैं:
kubectl rollout status deployments/kubernetes-bootcamp
ऐप का वर्तमान छवि संस्करण देखने के लिए, describe pod
उपकमांड चलाएँ:
kubectl describe pods
आउटपुट के image
फ़ील्ड में, सत्यापित करें कि आप नवीनतम छवि संस्करण (v2) चला रहे हैं।
अपडेट वापस रोल करें
आइए एक और अपडेट करें, और v10
के साथ टैग की गई छवि को तैनात करने का प्रयास करें:
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10
डिप्लॉयमेंट की स्थिति देखने के लिए get deployments
का उपयोग करें:
kubectl get deployments
ध्यान दें कि आउटपुट उपलब्ध पॉड्स की वांछित संख्या सूचीबद्ध नहीं करता है। सभी पॉड्स को सूचीबद्ध करने के लिए get pods
उपकमांड चलाएँ:
kubectl get pods
ध्यान दें कि कुछ पॉड्स की स्थिति ImagePullBackOff है।
समस्या के बारे में अधिक जानकारी प्राप्त करने के लिए, describe pod
उपकमांड चलाएँ:
kubectl describe pods
प्रभावित पॉड्स के आउटपुट के event
अनुभाग में, ध्यान दें कि v10
छवि संस्करण रिपॉजिटरी में मौजूद नहीं था।
परिनियोजन को अपने अंतिम कार्यशील संस्करण में वापस लाने के लिए, rollout undo
उपकमांड का उपयोग करें:
kubectl rollout undo deployment/kubernetes-bootcamp
rollout undo
कमांड परिनियोजन को पिछली ज्ञात स्थिति (छवि का v2) में वापस कर देता है। अद्यतन संस्करणित हैं और आप परिनियोजन की किसी भी पूर्व ज्ञात स्थिति पर वापस लौट सकते हैं।
पॉड्स को फिर से सूचीबद्ध करने के लिए get pods
उपकमांड का उपयोग करें:
kubectl get pods
चार पॉड्स चल रहे हैं। इन पॉड्स पर तैनात छवि की जांच करने के लिए, <कोड>describe podsकोड> उपकमांड का उपयोग करें:
kubectl describe pods
परिनियोजन एक बार फिर ऐप के स्थिर संस्करण (v2) का उपयोग कर रहा है। रोलबैक सफल रहा.
अपने स्थानीय क्लस्टर को साफ़ करना याद रखें
kubectl delete deployments/kubernetes-bootcamp services/kubernetes-bootcamp
6 - संदर्भ
कुबेरनेट्स प्रलेखन के इस खंड में संदर्भ हैं।
API संदर्भ
- शब्दकोष - कुबेरनेट्स शब्दावली की एक व्यापक, मानकीकृत सूची।
- कुबेरनेट्स API संदर्भ
- कुबेरनेट्स के लिए एक-पृष्ठ API संदर्भ v1.33
- कुबेरनेट्स API का उपयोग करना - कुबेरनेट्स के लिए API का अवलोकन।
- API अभिगम नियंत्रण - कुबेरनेट्स API एक्सेस को कैसे नियंत्रित करता है, इस पर विवरण।
- जाने-माने लेबल, टिप्पणी और दाग
आधिकारिक तौर पर समर्थित ग्राहक पुस्तकालय
कुबेरनेट्स API को प्रोग्रामिंग भाषा से कॉल करने के लिए, आप उपयोग कर सकते हैं client libraries. आधिकारिक तौर पर समर्थित client libraries:
- कुबेरनेट्स Go client library
- कुबेरनेट्स Python client library
- कुबेरनेट्स Java client library
- कुबेरनेट्स JavaScript client library
- कुबेरनेट्स C# client library
- कुबेरनेट्स Haskell client library
CLI
- kubectl - कमांड चलाने और कुबेरनेट्स क्लस्टर के प्रबंधन के लिए मुख्य CLI उपकरण।
- JSONPath - kubectl के साथ प्रयोग करने के लिए सिन्टैक्स्(वाक्य रचना)मार्गदर्शक JSONPath expressions
- kubeadm - एक सुरक्षित कुबेरनेट्स क्लस्टर का आसानी से प्रावधान करने के लिए CLI टूल।
अवयव
-
kubelet - प्राथमिक प्रतिनिधि(एजेंट) जो प्रत्येक नोड पर चलता है। क्यूबलेट पॉडस्पेक्स का एक सेट लेता है और यह सुनिश्चित करता है कि वर्णित कंटेनर चल रहे हैं और स्वस्थ हैं।
-
kube-apiserver - REST API जो API वस्तु जैसे पॉड्स, सेवाएं, प्रतिकृति नियंत्रक के लिए डेटा को मान्य और कॉन्फ़िगर करता है।
-
kube-controller-manager - डेमॉन जो कुबेरनेट्स के साथ भेजे गए कोर कंट्रोल लूप्स को एम्बेड करता है।
-
kube-proxy - बैक-एंड के एक सेट में साधारण TCP/UDP स्ट्रीम फॉरवर्डिंग (आगे भेजना) या राउंड-रॉबिन TCP/UDP फॉरवर्डिंग कर सकते हैं।
-
kube-scheduler - अनुसूचक जो उपलब्धता, प्रदर्शन और क्षमता का प्रबंधन करता है।
कॉन्फिग APIs
इस खंड में "अप्रकाशित" API के लिए दस्तावेज़ शामिल हैं जिनका उपयोग कुबेरनेट्स घटकों या उपकरणों को कॉन्फ़िगर करने के लिए किया जाता है। इनमें से अधिकांश APIs, RESTful तरीके से API सर्वर द्वारा उजागर नहीं होते हैं हालांकि वे एक उपयोगकर्ता या क्लस्टर के उपयोगकर्ता या प्रबंधक के लिए आवश्यक हैं।
- kube-apiserver विन्यास (v1alpha1)
- क्यूबलेट विन्यास (v1beta1)
- kube-scheduler विन्यास (v1beta1)
- kube-scheduler विन्यास (v1beta2)
- kube-scheduler नीति संदर्भ (v1)
- kube-proxy विन्यास (v1alpha1)
audit.k8s.io/v1
API- Client प्रमाणीकरण API (v1beta1)
- WebhookAdmission विन्यास (v1)
kubeadm के लिए कॉन्फिग API
डिज़ाइन दस्तावेज़
कुबेरनेट्स कार्यक्षमता के लिए डिज़ाइन से संबंधित दस्तावेज़ों का एक संग्रह। अच्छे शुरुआती बिंदु हैं कुबेरनेट्स वास्तुकला और कुबेरनेट्स डिज़ाइन अवलोकन.
6.1 - शब्दकोष
6.2 - शेडुलिंग
6.3 - अन्य उपकरण
कुबेरनेट्स सिस्टम के साथ काम करने में आपकी सहायता के लिए कुबेरनेट्स में कई उपकरण शामिल हैं।
crictl
crictl
CRI-संगत कंटेनर रनटाइम के
निरीक्षण और डिबगिंग के लिए एक कमांड-लाइन इंटरफ़ेस है।
Dashboard
कुबेरनेट्स का
वेब डैशबोर्ड
आपको क्लस्टर में कंटेनरीकृत अनुप्रयोगों को तैनात करने,
उनकी समस्या का निवारण करने और क्लस्टर के संसाधनों को प्रबंधित करने की अनुमति देता है।
Helm
हेल्म पूर्व-कॉन्फ़िगर कुबेरनेट्स संसाधनों के पैकेजों के प्रबंधन के लिए एक उपकरण है। इन पैकेजों को हेल्म चार्ट के रूप में जाना जाता है।
हेल्म का उपयोग करें:
- कुबेरनेट्स चार्ट के रूप में पैक किए गए लोकप्रिय सॉफ़्टवेयर को ढूंढें और उपयोग करें।
- अपने ख़ुद के एप्लिकेशन को कुबेरनेट्स चार्ट के रूप में साझा करें।
- बुद्धिमत्ता से अपने कुबेरनेट्स मैनिफ़ेस्ट फ़ाइलों को प्रबंधित करें।
- हेल्म पैकेजों के रिलीज़ प्रबंधित करें।
Kompose
कॉम्पोज़
एक उपकरण है, जो डॉकर कंपोज़ उपयोगकर्ताओं
को कुबेरनेट्स पर जाने में मदद करता है।
कॉम्पोज़ का उपयोग करें:
- डॉकर कंपोज़ फ़ाइल को कुबेरनेट्स ऑब्जेक्ट्स में अनुवाद करें।
- स्थानीय डॉकर डेवलपमेंट से कुबेरनेट्स एप्लीकेशनों को प्रबंधित करें।
- v1 या v2 डॉकर कंपोज़,
yaml
फ़ाइलों या डिस्ट्रीब्यूटेड एप्लिकेशनो के बंडलों के माध्यम से अपने एप्लिकेशन को प्रबंधित कऱे।
Kui
Kui
एक GUI उपकरण है, जो आपके सामान्य kubectl
कमांड लाइन अनुरोधों को लेकर ग्राफिक्स के साथ प्रतिक्रिया देता है।
Kui सामान्य kubectl
कमांड लाइन अनुरोधों को लेकर ग्राफिक्स के साथ प्रतिक्रिया देता है। ASCII टेबल्स के बजाय,
Kui उन टेबल्स के साथ एक GUI प्रदान करता है, जिन्हें आप सॉर्ट कर सकते हैं।
Kui आपको देता है:
- कॉपी और पेस्ट करने के बजाय सीधे लंबे स्वचालित रूप से जेनरेटेड किए गए संसाधनों के नामों पर क्लिक करें।
Kubectl
कमांड टाइप करें और उन्हें निष्पादन होते हुए देखें, यहां तक कि कभी-कभीKubectl
से भी तेज।- एक जॉब क्वेरी करें और इसके निष्पादन को वॉटरफॉल के डायग्राम के रूप में देखें।
- एक टैब्ड UI का उपयोग करके अपने क्लस्टर में संसाधनों पर क्लिक करें।
Minikube
मिनीक्यूब
एक उपकरण है, जो डेवलपमेंट और परीक्षण जैसे उद्देश्यों
के लिए आपके वर्कस्टेशन पर स्थानीय रूप से एक-नोड वाले कुबेरनेट्स क्लस्टर को चलाता है।
7 - कुबेरनेटेस डॉक्स में योगदान दे
कुबेरनेटस सभी योगदानकर्ताओ से सुधार का स्वागत करता है चाहे वो नए हो या अनुभवी!
टिप्पणी:
कुबेरनेटस मे योगदान करने के बारे मे अधिक जानकारी के लिए योगदानकर्ता प्रलेखन देखें।इस वेबसाइट की देख रेख कुबेरनेटस SIG Docs द्वारा की जाती है।
कुबेरनेटस प्रलेखन योगदानकर्ता :
- मौजूदा विषयों को सुधारते हैं
- नए विषय बनाते हैं
- प्रलेखन का अनुवाद करते हैं
- कुबेरनेटस रिलीज चक्र मे प्रलेखन की देख रेख और प्रकाशन करते हैं
शुरू करना
कोई भी प्रलेखन के बारे मे इशू खोल सकता है या कुबेरनेटस वेबसाइट
kubernetes/website
GitHub रिपॉजिटरी
मे बदलाव पुल अनुरोध (PR) द्वारा कर सकता है।
आपको Git और
Github
की जानकारी होनी चाहिए ताकि आप कुबेरनेटेस समुदाय मे प्रभावी रूप से काम कर सकें।
प्रलेखन मे सहयोग करने के लिए:
- योगदानकर्ता समझौता लाइसेन्स पर हस्ताक्षर करें।
- प्रलेखन रिपॉजिटरी और वेबसाइट की स्टैटिक साइट जनरेटर से खुद को परिचित करें।
- सुनिश्चित करें की आपको पुल अनुरोध करना और बदलाओ की समीक्षा करना आता हो।
को संचालित /प्रकाशित करें]
end
subgraph second[समीक्षा]
direction TB
T[ ] -.-
D[kubernetes/website
रिपॉजिटरी
को देखें] --- E[Hugo स्टैटिक साइट
जनरेटर
को देखें]
E --- F[मूलभूत GitHub
कमांड समझें]
F --- G[ओपन PR की समीक्षा करे
और समीक्षा प्रक्रिया
को बदलें]
end
subgraph first[साइनअप]
direction TB
S[ ] -.-
B[CNCF
योगदानकर्ता
लइसेंस समझौता
पर हस्ताक्षर करें] --- C[sig-docs स्लैक चैनल
में जुड़ें]
C --- V[kubernetes-sig-docs
मेलिंग लिस्ट में जुड़ें]
V --- M[साप्ताहिक
sig-docs कॉल
या स्लैक बैठक में शामिल हों]
end
A([fa:fa-user नए
योगदानकर्ता]) --> first
A --> second
A --> third
A --> H[सवाल पूछे!!!]
classDef grey fill:#dddddd,stroke:#ffffff,stroke-width:px,color:#000000, font-size:15px;
classDef white fill:#ffffff,stroke:#000,stroke-width:px,color:#000,font-weight:bold
classDef spacewhite fill:#ffffff,stroke:#fff,stroke-width:0px,color:#000
class A,B,C,D,E,F,G,H,M,Q,N,O,P,V grey
class S,T,U spacewhite
class first,second,third white
ऊपर दी गई आकृति नए योगदानकर्ता के लिए दिशानिर्देश हैं। Sign up
या review
के लिए आप इनमे से कुछ या सभी निर्देशों का पालन कर सकते हैं। अब आप PR ओपन करने के लिए तैयार हैं जो आपके योगदान के उद्देश को पूरा करे जो Open PR
खंड मे सूचीबद्ध हैं। आपके सभी प्रश्नों का सदैव स्वागत है।
कुबेरनेटस समुदाय मे कुछ कार्यों के लिए अधिक विश्वास और अभिगम की आवश्यकता होती है।
भूमिका और अनुमति के बारे मे ज्यादा जानकारी के लिए
SIG Docs मे भाग लेना को देखें।
आपका पहला योगदान
आप अपने पहले योगदान की तैयारी के लिए दिए गए दिशानिर्देश को देख सकते हैं। नीचे दिया हुआ चित्र दिशानिर्देश और उसकी विस्तार मे जानकारी देता है।
PRs की समीक्षा करें] -->
A[अपने पहले इशू (गुफ फर्स्ट इशू)
के लिए kubernetes/website
की इशू सूची पर जाएं] --> B[PR ओपन करें!!]
end
subgraph first[सूचित तैयारी]
direction TB
T[ ] -.-
D[योगदान अवलोकन को पढे] -->E[K8s विषय
और विषय गाइड को पढ़ें]
E --> F[Hugo पेज
विषय के प्रकार
और shortcodes के बारे मे जाने]
end
first ----> second
classDef grey fill:#dddddd,stroke:#ffffff,stroke-width:px,color:#000000, font-size:15px;
classDef white fill:#ffffff,stroke:#000,stroke-width:px,color:#000,font-weight:bold
classDef spacewhite fill:#ffffff,stroke:#fff,stroke-width:0px,color:#000
class A,B,D,E,F,G grey
class S,T spacewhite
class first,second white
- योगदान करने के विभिन्न तरीकों को जानने के लिए योगदानकर्ता अवलोकन को पढ़ें।
- अच्छे प्रवेश बिन्दु के लिए
kubernetes/website
इशू सूची को जाचें। - मौजूदा प्रलेखन पर Github का प्रयोग करते हुए पुल अनुरोध करॆ और इशू दाखिल करने के बारे मे अधिक जानें।
- भाषा और सटीकता के लिए अन्य कुबेरनेटस समुदाय के सदस्यों के पुल अनुरोध की समीक्षा करें।
- कुबेरनेटस प्रकरण और
स्टाइल मार्गदर्शक को पढ़ें ताकि आप सूचित टिप्पणी दे सकें। - पेज प्रलेखन टाइप और Hugo shortcodes के बारे मे जानें।
अगले कदम
-
रिपॉजिटरी के लोकल क्लोन से काम करना सीखें।
-
रिलीज़ में फीचर्स का आलेख करे।
-
SIG Docs मे भाग लें और सदस्य या समीक्षक बनें।
-
स्थानीयकरण शुरू करे या उसमे सहायता करें।
सिग डॉक्स मे शामिल हो
SIG Docs योगदानकर्ताओ का एक समूह है जो कुबेरनेटेस प्रलेखन और वेबसाईट की देख रेख और उसे प्रकाशित करता है। SIG Docs मे शामिल होना कुबेरनेटस योगदानकर्ताओ (फीचर विकास या उससे अन्यथा) के लिए कुबेरनेटस परियोजना पर प्रभाव डालने का बेहतरीन तरीका है।
SIG Docs भिन्न प्रकार से संवाद करते हैं:
- कुबेरनेटेस Slack चैनल मे #sig-docs से जुड़ें और खुद का परिचय दें!
- kubernetes-sig-docs मेलिंग लिस्ट मे शामिल हो, वहाँ व्यापक विचार-विमर्श होता है और आधिकारिक फैसले का अभिलेखन किया जाता है।
- SIG Docs विडिओ बैठक मे शामिल हो जो हर दो सप्ताह मे होती है। बैठक की घोषणा हमेशा
#sig-docs
पर की जाती है और कुबेरनेटेस समुदाय बैठक कैलंडर में जोड़ दिया जाता है। आपको Zoom client डाउनलोड करने की जरूरत पड़ेगी या फोन की मदद से भी डायल कर सकते हैं। - जिन सप्ताह मे Zoom बैठक नहीं हुई हो तब SIG Docs अतुल्यकालिक बैठक को जॉइन करे जो Slack पर होती है। बैठक की घोषणा हमेशा
#sig-docs
पर होती है। बैठक की घोषणा के बाद आप किसी भी सूत्र मे 24 घंटे तक योगदान कर सकते है।
योगदान करने के अन्य तरीके
- कुबेरनेटस समुदाय साइट पर जाए। Twitter या Slack Overflow मैं भाग ले, कुबेरनेटस स्थानीय आयोजन और मिलन के बारे मे जाने ।
- कुबेरनेटस फीचर विकास में शामिल होने के लिए योगदानकर्ता चीटशीट पढ़ें।
- कुबेरनेटस योगदानकर्ता और अतिरिक्त योगदानकर्ता साधन के बारे मे अधिक जानकारी के लिए योगदानकर्ता साइट पर जाएं।
- ब्लॉग पोस्ट या केस अध्ययन प्रस्तुत करे।
7.1 - प्रलेखन शैली अवलोकन
इस खंड के विषय लेखन शैली, सामग्री स्वरूपण, और संगठन, और कुबेरनेट्स प्रलेखन के लिए विशिष्ट Hugo अनुकूलन का उपयोग करने पर मार्गदर्शन प्रदान करते हैं।
7.2 - साइट विश्लेषिकी देखना
इस पृष्ठ में Kubernetes.io विश्लेषिकी डैशबोर्ड के बारे में जानकारी है।
यह डैशबोर्ड Google Data Studio का उपयोग करके बनाया गया है और Google Analytics का उपयोग करके Kubernetes.io पर एकत्रित जानकारी दिखाता है।
डैशबोर्ड का उपयोग करना
डिफ़ॉल्ट रूप से, डैशबोर्ड पिछले 30 दिनों के सभी एकत्रित विश्लेषण दिखाता है। विभिन्न दिनांक सीमा मे आने वाला डेटा देखने के लिए date selector का उपयोग करें। अन्य फ़िल्टरिंग विकल्प आपको उपयोगकर्ता का स्थान, साइट तक पहुंचने के लिए उपयोग किए जाने वाले उपकरण, उपयोग किए गए दस्तावेज़ों के अनुवाद, और बहुत से चीज़ों का डेटा देखने की अनुमति देते हैं।
यदि आप इस डैशबोर्ड में कोई समस्या देखते हैं, या किसी सुधार का अनुरोध करना चाहते हैं, तो कृपया एक इशू बनाएं।
8 - डॉक्स स्मोक टेस्ट पेज
यह पृष्ठ दो उद्देश्यों की पूर्ति करता है:
- यह दिखाने के लिए कि Kubernetes प्रलेखन Markdown का उपयोग कैसे करता है
- एक "स्मोक टेस्ट" दस्तावेज़ प्रदान करना जिसे हम HTML, CSS और टेम्पलेट परिवर्तनों का परीक्षण करने के लिए उपयोग कर सकते हैं जो संपूर्ण प्रलेखन को प्रभावित करते हैं।
शीर्षक स्तर
ऊपर का शीर्षक H2 है। पृष्ठ शीर्षक H1 के रूप में प्रस्तुत होता है। निम्नलिखित अनुभाग H3 - H6 दिखाते हैं।
### H3
यह H3 अनुभाग में है।
#### H4
यह H4 अनुभाग में है।
##### H5
यह H5 अनुभाग में है।
###### H6
यह H6 अनुभाग में है।
परिणाम:
H3
यह H3 अनुभाग में है।
H4
यह H4 अनुभाग में है।
H5
यह H5 अनुभाग में है।
H6
यह H6 अनुभाग में है।
इनलाइन तत्व
इनलाइन तत्व पैराग्राफ, सूची आइटम, चेतावनी या अन्य ब्लॉक-स्तरीय तत्वों के भीतर टेक्स्ट में दिखते हैं।
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
इनलाइन टेक्स्ट शैली
Markdown में आप विभिन्न टेक्स्ट शैलियों का उपयोग कर सकते हैं:
- **बोल्ड**
- _इटालिक_
- ***बोल्ड इटालिक***
- ~~स्ट्राइकथ्रू~~
- <u>रेखांकित</u>
- _<u>रेखांकित इटालिक</u>_
- **<u>रेखांकित बोल्ड</u>**
- ***<u>रेखांकित बोल्ड इटालिक</u>***
- `मोनोस्पेस टेक्स्ट`
- **`मोनोस्पेस बोल्ड`**
परिणाम:
- बोल्ड
- इटालिक
- बोल्ड इटालिक
स्ट्राइकथ्रू- रेखांकित
- रेखांकित इटालिक
- रेखांकित बोल्ड
- रेखांकित बोल्ड इटालिक
मोनोस्पेस टेक्स्ट
मोनोस्पेस बोल्ड
सूचियाँ
Markdown सूचियों को संसाधित करने के लिए सख्त नियम नहीं रखता। जब हमने Jekyll से Hugo पर स्विच किया, तो कुछ सूचियाँ टूट गईं। उन्हें ठीक करने के लिए निम्न बातों का ध्यान रखें:
- उप-सूची आइटम को 2 स्थान से इंडेंट करें।
- एक सूची को समाप्त करने और दूसरी सूची शुरू करने के लिए, आपको सूचियों के बीच एक HTML टिप्पणी ब्लॉक डालना होगा जो बाएँ किनारे पर संरेखित हो।
बुलेट सूचियाँ
- यह एक सूची आइटम है।
* यह उसी सूची का एक अन्य आइटम है।
- आप `-` और `*` मिला सकते हैं।
- उप-आइटम बनाने के लिए, दो स्थान इंडेंट करें।
- यह एक उप-उप-आइटम है।
- एक अन्य उप-आइटम।
परिणाम:
- यह एक सूची आइटम है।
- यह उसी सूची का एक अन्य आइटम है।
- आप
-
और*
मिला सकते हैं।- उप-आइटम बनाने के लिए, दो स्थान इंडेंट करें।
- यह एक उप-उप-आइटम है।
- एक अन्य उप-आइटम।
- उप-आइटम बनाने के लिए, दो स्थान इंडेंट करें।
-
यह एक नई सूची है। Hugo में, दो लगातार सूचियों को अलग करने के लिए HTML टिप्पणी आवश्यक होती है।
ls -l
- और एक उप-सूची ब्लॉक स्तर की सामग्री के बाद।
-
एक बुलेट सूची आइटम में क्रमांकित उप-सूची हो सकती है:
- क्रमांकित उप-सूची 1
- क्रमांकित उप-सूची 2
क्रमांकित सूचियाँ
- यह एक सूची आइटम है।
- यह एक अन्य सूची आइटम है।
-
यह एक नई सूची है।
-
सूची आइटम में अनुच्छेद और कोड ब्लॉक हो सकते हैं।
ls -l
- उप-सूची जो ब्लॉक स्तर की सामग्री के बाद आती है।
टैब सूचियाँ
कृपया एक विकल्प चुनें।
- क्रमबद्ध
- (या अव्यवस्थित)
- सूचियाँ
echo 'टैब सूचियों में कोड ब्लॉक हो सकते हैं!'
टैब सूची के भीतर शीर्षक
चेतावनी:
टैब सूची के भीतर शीर्षक TOC में नहीं दिखाई देंगे।चेकलिस्ट
- यह एक चेकलिस्ट आइटम है
- यह एक चयनित चेकलिस्ट आइटम है
कोड ब्लॉक
आप कोड ब्लॉक दो तरीकों से बना सकते हैं, तीन बैकटिक के साथ। केवल कोड के लिए बैकटिक का प्रयोग करें।
यह एक कोड ब्लॉक है
ls -l
Hugo शॉर्टकोड के साथ कोड ब्लॉक
{{< alert color="warning" >}}यह एक चेतावनी है।{{< /alert >}}
लिंक
[कुबेरनेट्स पर लिंक](https://kubernetes.io/)
चित्र

[](https://kubernetes.io)
तालिकाएँ
शीर्षक 1 | शीर्षक 2 |
---|---|
बॉडी 1 | बॉडी 2 |
Mermaid विज़ुअलाइज़ेशन
{{< mermaid >}}
graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
{{</ mermaid >}}
साइडबार और चेतावनियाँ
यह एक साइडबार है।
sudo dmesg
चेतावनियाँ
टिप्पणी:
यह एक नोट है।सावधान:
पाठक को सावधानी से आगे बढ़ना चाहिए।चेतावनी:
चेतावनियाँ कुछ नुकसान की संभावना बताती हैं।सम्मिलन
टिप्पणी:
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप minikube की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं: