यह इस खंड का बहु-पृष्ठ प्रिंट योग्य दृश्य है। प्रिंट करने के लिए यहां क्लिक करें.
प्रलेखन
- 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: नीतियाँ
- 3.4: शेड्यूलिंग, प्रीइम्प्शन और इविक्शन
- 4: कार्य
- 4.1: उपकरण स्थापित करें
- 4.1.1: Linux पर kubectl इंस्टॉल और सेट अप करें
- 4.1.2: macOS पर kubectl इंस्टॉल और सेटअप करें
- 4.1.3: Windows पर kubectl इंस्टॉल और सेटअप करें
- 4.2: कॉन्फ़िगरेशन फाइल का उपयोग करके सीक्रेट्स का प्रबंधन
- 4.3: निर्भर एनवायरनमेंट वेरिएबल्स परिभाषित करें
- 4.4: नेटवर्क पॉलिसी प्रोवाइडर इंस्टॉल करें
- 4.5: कुबेरनेट्स का विस्तार करें
- 4.5.1: कस्टम रिसोर्स का उपयोग करें
- 4.6: 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: kubectl त्वरित संदर्भ
- 6.3: शेडुलिंग
- 6.4: अन्य उपकरण
- 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.36 के लिए आवश्यक है कि आप एक रनटाइम का उपयोग करें जो कंटेनर रनटाइम इंटरफ़ेस (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.36 डिफ़ॉल्ट रूप से 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.36 के साथ सीधे संगत है, जो कि बहिष्कृत dockershim घटक का उपयोग करता है। अधिक जानकारी के लिए
और संदर्भ, Dockershim deprecation FAQ देखें।
आप तृतीय-पक्ष एडेप्टर भी पा सकते हैं जो आपको कुबेरनेट्स के साथ डॉकर इंजन का उपयोग करने देता है, समर्थित Container Runtime Interface के माध्यम से (CRI)।
निम्नलिखित CRI एडेप्टर डॉकर इंजन के साथ काम करने के लिए डिज़ाइन किए गए हैं:
cri-dockerdMirantis से
मिरांटिस कंटेनर रनटाइम
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 सर्विस प्रॉक्सींग का एक डिफ़ॉल्ट कार्यान्वयन प्रदान करता है, जिसे क्यूब-प्रॉक्सी कहा जाता है, लेकिन कुछ पॉड नेटवर्क कार्यान्वयन इसके बजाय अपने स्वयं के सर्विस प्रॉक्सी का उपयोग करते हैं जो शेष कार्यान्वयन के साथ अधिक दृढ़ता से एकीकृत होता है।
-
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 उच्च-प्रदर्शन और विलंब-संवेदनशील वर्कलोड्स के लिए कंप्यूट, मेमोरी, और डिवाइस संसाधनों का प्रबंधन कर सकते हैं।
3.4 - शेड्यूलिंग, प्रीइम्प्शन और इविक्शन
कुबेरनेट्स में शेड्यूलिंग का मतलब है कि, किस पॉड को किस नोड पे चलाना है ये निर्धारित किया जा सके ताकि क्यूबलेट उन्हें उस नोड पर चला सके।
प्रीइम्प्शन का मतलब है कि वो पॉड्स जिनकी प्रायोरिटी कम है उन्हें किसी नोड से हटा के वो पॉड्स चला सकें जिनकी प्रायोरिटी ज्यादा है।
इविक्शन का मतलब है कि एक या एक से अधिक पॉड्स को समाप्त किया जा सके।
शेड्यूलिंग
- कुबेरनेट्स शेड्यूलर
- नोड्स को पॉड्स आवंटित करना
- पॉड ओवरहेड
- पॉड टोपोलॉजी स्प्रेड प्रतिबंध
- टेन्ट्स एंड टॉलरेशंस
- शेड्यूलिंग रूपरेखा
- गतिशील संसाधन आवंटन
- शेड्यूलर परफॉरमेंस ट्यूनिंग
- विस्तारित संसाधनों के लिए संसाधन बिन पैकिंग
- पॉड शेड्यूलिंग तत्परता
- पॉड-समूह शेड्यूलिंग
- गैंग शेड्यूलिंग
- टोपोलॉजी-सचेत शेड्यूलिंग
- वर्कलोड-सचेत प्रिएम्प्शन
- डीशेड्यूलर
- नोड घोषित विशेषताएं
पॉड व्यवधान
पॉड विघटन वह प्रक्रिया है जिसके द्वारा नोड्स पर पॉड्स को स्वेच्छा से या अनैच्छिक रूप से समाप्त कर दिया जाता है।
स्वैच्छिक विघटन एप्लीकेशन मालिक या फिर क्लस्टर प्रशासक अभिप्रायपूर्वक चालू करते है। अनैच्छिक विघटन अनजाने में होते है और वो अपरिहार्य वजह से उत्पन्न हो सकते हैं जैसे कि नोड्स के पास संसाधन ख़तम हो जाना या आकस्मिक विलोपन।
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.36 क्लाइंट v1.35, v1.36 और v1.37 कण्ट्रोल प्लेन के साथ संवाद कर सकते हैं। 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.36.0 संस्करण डाउनलोड करने के लिए, टाइप करें:
curl -LO https://dl.k8s.io/release/v1.36.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अगर चेक फेल हो जाता है, तो
sha256nonzero स्थिति के साथ बाहर निकलता है और इस आउटपुट के समान प्रिंट करता है: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.36 क्लाइंट v1.35, v1.36 और v1.37 कण्ट्रोल प्लेन के साथ कम्युनिकेट कर सकते हैं। 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.36.0 संस्करण डाउनलोड करने के लिए, टाइप करें:
curl -LO "https://dl.k8s.io/release/v1.36.0/bin/darwin/amd64/kubectl"और Apple Silicon macOS के लिए, टाइप करें:
curl -LO "https://dl.k8s.io/release/v1.36.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अगर चेक फेल हो जाता है, तो
shasumnonzero स्थिति के साथ बाहर निकलता है और इस आउटपुट के समान प्रिंट करता है: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अगर चेक फेल हो जाता है, तो
sha256nonzero स्थिति के साथ बाहर निकलता है और इस आउटपुट के समान प्रिंट करता है: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.36 क्लाइंट v1.35, v1.36 और v1.37 कण्ट्रोल प्लेन के साथ कम्युनिकेट कर सकते हैं। kubectl के नए संस्करण का उपयोग करने से समस्या से बचत हो सकती है।
Windows पर kubectl इंस्टॉल करें
Windows पर kubectl संस्थापित करने के लिए निम्नलिखित विधियाँ मौजूद हैं:
- Windows पर curl के माध्यम से kubectl बाइनरी इंस्टॉल करें
- Chocolatey या Scoop का उपयोग करके Windows पर इंस्टॉल करें
Windows पर curl के माध्यम से kubectl बाइनरी इंस्टॉल करें
-
latest release 1.36.0 डाउनलोड करें।
या यदि आपके पास
curlहै, तो इस कमांड का उपयोग करें:curl -LO https://dl.k8s.io/release/v1.36.0/bin/windows/amd64/kubectl.exeटिप्पणी:
नवीनतम स्थिर संस्करण का पता लगाने के लिए (जैसे, स्क्रिप्टिंग के लिए), https://dl.k8s.io/release/stable.txt पर एक नज़र डालें। -
बाइनरी को मान्य करें (वैकल्पिक)
kubectl चेकसम फाइल डाउनलोड करें:
curl -LO https://dl.k8s.io/v1.36.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-cliscoop 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.36.0/bin/windows/amd64/kubectl-convert.exe -
बाइनरी को मान्य करें (वैकल्पिक)
kubectl-convert चेकसम फ़ाइल डाउनलोड करें:
curl -LO https://dl.k8s.io/v1.36.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 - कॉन्फ़िगरेशन फाइल का उपयोग करके सीक्रेट्स का प्रबंधन
शुरू करने से पहले
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप minikube की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
सीक्रेट बनाएं
आप पहले JSON या YAML फॉर्मेट में एक मैनिफेस्ट में Secret ऑब्जेक्ट को परिभाषित कर सकते हैं, और फिर उस ऑब्जेक्ट को बना सकते हैं। Secret रिसोर्स में दो मैप्स होते हैं: data और stringData। data फील्ड का उपयोग मनमाना डेटा स्टोर करने के लिए किया जाता है, जो base64 का उपयोग करके एनकोड किया जाता है। stringData फील्ड सुविधा के लिए प्रदान किया जाता है, और यह आपको समान डेटा को अनएनकोडेड स्ट्रिंग्स के रूप में प्रदान करने की अनुमति देता है। data और stringData की कुंजियों में अल्फ़ान्यूमेरिक वर्ण, -, _ या . होने चाहिए।
निम्नलिखित उदाहरण data फील्ड का उपयोग करके एक सीक्रेट में दो स्ट्रिंग्स स्टोर करता है।
-
स्ट्रिंग्स को base64 में कनवर्ट करें:
echo -n 'admin' | base64 echo -n '1f2d1e2e67df' | base64टिप्पणी:
सीक्रेट डेटा के सीरियलाइज्ड JSON और YAML वैल्यू base64 स्ट्रिंग्स के रूप में एनकोड किए जाते हैं। इन स्ट्रिंग्स के भीतर न्यूलाइन मान्य नहीं हैं और इन्हें छोड़ा जाना चाहिए। Darwin/macOS परbase64यूटिलिटी का उपयोग करते समय, उपयोगकर्ताओं को लंबी लाइनों को विभाजित करने के लिए-bविकल्प का उपयोग करने से बचना चाहिए। इसके विपरीत, Linux उपयोगकर्ताओं कोbase64कमांड में-w 0विकल्प जोड़ना चाहिए या यदि-wविकल्प उपलब्ध नहीं है तोbase64 | tr -d '\n'पाइपलाइन का उपयोग करना चाहिए।आउटपुट इस तरह का होता है:
YWRtaW4= MWYyZDFlMmU2N2Rm -
मैनिफेस्ट बनाएं:
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: YWRtaW4= password: MWYyZDFlMmU2N2Rmध्यान दें कि एक सीक्रेट ऑब्जेक्ट का नाम एक मान्य DNS सबडोमेन नाम होना चाहिए।
-
kubectl applyका उपयोग करके सीक्रेट बनाएं:kubectl apply -f ./secret.yamlआउटपुट इस तरह का होता है:
secret/mysecret created
यह सत्यापित करने के लिए कि सीक्रेट बनाया गया था और सीक्रेट डेटा को डिकोड करने के लिए, kubectl का उपयोग करके सीक्रेट्स का प्रबंधन देखें।
सीक्रेट बनाते समय अनएनकोडेड डेटा निर्दिष्ट करें
कुछ परिदृश्यों के लिए, आप stringData फील्ड का उपयोग करना चाह सकते हैं। यह फील्ड आपको सीक्रेट में सीधे एक नॉन-base64 एनकोडेड स्ट्रिंग डालने की अनुमति देता है, और जब सीक्रेट बनाया या अपडेट किया जाता है तो स्ट्रिंग आपके लिए एनकोड की जाएगी।
इसका एक व्यावहारिक उदाहरण यह हो सकता है जहां आप एक एप्लिकेशन डिप्लॉय कर रहे हैं जो कॉन्फ़िगरेशन फाइल को स्टोर करने के लिए एक सीक्रेट का उपयोग करता है, और आप अपनी डिप्लॉयमेंट प्रक्रिया के दौरान उस कॉन्फ़िगरेशन फाइल के कुछ हिस्सों को पॉप्युलेट करना चाहते हैं।
उदाहरण के लिए, यदि आपका एप्लिकेशन निम्नलिखित कॉन्फ़िगरेशन फाइल का उपयोग करता है:
apiUrl: "https://my.api.com/api/v1"
username: "<user>"
password: "<password>"
आप इसे निम्नलिखित परिभाषा का उपयोग करके एक सीक्रेट में स्टोर कर सकते हैं:
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
stringData:
config.yaml: |
apiUrl: "https://my.api.com/api/v1"
username: <user>
password: <password>
टिप्पणी:
सीक्रेट के लिएstringData फील्ड सर्वर-साइड एप्लाई के साथ अच्छी तरह से काम नहीं करता है।जब आप सीक्रेट डेटा प्राप्त करते हैं, तो कमांड एनकोडेड वैल्यू वापस करता है, न कि वे प्लेनटेक्स्ट वैल्यू जो आपने stringData में प्रदान किए थे।
उदाहरण के लिए, यदि आप निम्नलिखित कमांड चलाते हैं:
kubectl get secret mysecret -o yaml
आउटपुट इस तरह का होता है:
apiVersion: v1
data:
config.yaml: YXBpVXJsOiAiaHR0cHM6Ly9teS5hcGkuY29tL2FwaS92MSIKdXNlcm5hbWU6IHt7dXNlcm5hbWV9fQpwYXNzd29yZDoge3twYXNzd29yZH19
kind: Secret
metadata:
creationTimestamp: 2018-11-15T20:40:59Z
name: mysecret
namespace: default
resourceVersion: "7225"
uid: c280ad2e-e916-11e8-98f2-025000000001
type: Opaque
data और stringData दोनों निर्दिष्ट करें
यदि आप एक फील्ड को data और stringData दोनों में निर्दिष्ट करते हैं, तो stringData से वैल्यू का उपयोग किया जाता है।
उदाहरण के लिए, यदि आप निम्नलिखित सीक्रेट को परिभाषित करते हैं:
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
stringData:
username: administrator
टिप्पणी:
सीक्रेट के लिएstringData फील्ड सर्वर-साइड एप्लाई के साथ अच्छी तरह से काम नहीं करता है।Secret ऑब्जेक्ट इस प्रकार बनाया जाता है:
apiVersion: v1
data:
username: YWRtaW5pc3RyYXRvcg==
kind: Secret
metadata:
creationTimestamp: 2018-11-15T20:46:46Z
name: mysecret
namespace: default
resourceVersion: "7579"
uid: 91460ecb-e917-11e8-98f2-025000000001
type: Opaque
YWRtaW5pc3RyYXRvcg== डिकोड होकर administrator बनता है।
सीक्रेट को संपादित करें
मैनिफेस्ट का उपयोग करके बनाए गए सीक्रेट में डेटा को संपादित करने के लिए, अपने मैनिफेस्ट में data या stringData फील्ड को संशोधित करें और फाइल को अपने क्लस्टर में लागू करें। आप एक मौजूदा Secret ऑब्जेक्ट को संपादित कर सकते हैं जब तक कि वह अपरिवर्तनीय नहीं है।
उदाहरण के लिए, यदि आप पिछले उदाहरण से पासवर्ड को birdsarentreal में बदलना चाहते हैं, तो निम्नलिखित करें:
-
नई पासवर्ड स्ट्रिंग को एनकोड करें:
echo -n 'birdsarentreal' | base64आउटपुट इस तरह का होता है:
YmlyZHNhcmVudHJlYWw= -
अपनी नई पासवर्ड स्ट्रिंग के साथ
dataफील्ड को अपडेट करें:apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: YWRtaW4= password: YmlyZHNhcmVudHJlYWw= -
मैनिफेस्ट को अपने क्लस्टर में लागू करें:
kubectl apply -f ./secret.yamlआउटपुट इस तरह का होता है:
secret/mysecret configured
कुबेरनेट्स मौजूदा Secret ऑब्जेक्ट को अपडेट करता है। विस्तार से, kubectl टूल नोटिस करता है कि समान नाम का एक मौजूदा Secret ऑब्जेक्ट है। kubectl मौजूदा ऑब्जेक्ट को प्राप्त करता है, उसमें परिवर्तनों की योजना बनाता है, और बदले हुए Secret ऑब्जेक्ट को आपके क्लस्टर कंट्रोल प्लेन को सबमिट करता है।
यदि आपने इसके बजाय kubectl apply --server-side निर्दिष्ट किया है, तो kubectl सर्वर साइड एप्लाई का उपयोग करता है।
साफ़ करें
आपके द्वारा बनाए गए सीक्रेट को हटाने के लिए:
kubectl delete secret mysecret
आगे क्या है
- सीक्रेट कॉन्सेप्ट के बारे में और पढ़ें
- kubectl का उपयोग करके सीक्रेट्स का प्रबंधन करना सीखें
- kustomize का उपयोग करके सीक्रेट्स का प्रबंधन करना सीखें
4.3 - निर्भर एनवायरनमेंट वेरिएबल्स परिभाषित करें
यह पृष्ठ दिखाता है कि कुबेरनेट्स पॉड में किसी कंटेनर के लिए निर्भर एनवायरनमेंट वेरिएबल्स कैसे परिभाषित करें।
शुरू करने से पहले
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप minikube की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
कंटेनर के लिए एक निर्भर एनवायरनमेंट वेरिएबल परिभाषित करें
जब आप एक पॉड बनाते हैं, तो आप उसमें चलने वाले कंटेनरों के लिए निर्भर एनवायरनमेंट वेरिएबल्स सेट कर सकते हैं। निर्भर एनवायरनमेंट वेरिएबल्स सेट करने के लिए, आप कॉन्फ़िगरेशन फ़ाइल में env की value में $(VAR_NAME) का उपयोग कर सकते हैं।
इस अभ्यास में, आप एक ऐसा पॉड बनाएंगे जो एक कंटेनर चलाता है।
पॉड के लिए कॉन्फ़िगरेशन फ़ाइल में एक निर्भर एनवायरनमेंट वेरिएबल्स परिभाषित किया गया है, जिसका सामान्य उपयोग निर्धारित किया गया है।
पॉड के लिए कॉन्फ़िगरेशन मैनिफेस्ट इस प्रकार है:
apiVersion: v1
kind: Pod
metadata:
name: dependent-envars-demo
spec:
containers:
- name: dependent-envars-demo
args:
- while true; do echo -en '\n'; printf UNCHANGED_REFERENCE=$UNCHANGED_REFERENCE'\n'; printf SERVICE_ADDRESS=$SERVICE_ADDRESS'\n';printf ESCAPED_REFERENCE=$ESCAPED_REFERENCE'\n'; sleep 30; done;
command:
- sh
- -c
image: busybox:1.28
env:
- name: SERVICE_PORT
value: "80"
- name: SERVICE_IP
value: "172.17.0.1"
- name: UNCHANGED_REFERENCE
value: "$(PROTOCOL)://$(SERVICE_IP):$(SERVICE_PORT)"
- name: PROTOCOL
value: "https"
- name: SERVICE_ADDRESS
value: "$(PROTOCOL)://$(SERVICE_IP):$(SERVICE_PORT)"
- name: ESCAPED_REFERENCE
value: "$$(PROTOCOL)://$(SERVICE_IP):$(SERVICE_PORT)"
-
उस मैनिफेस्ट के आधार पर एक पॉड बनाएँ:
kubectl apply -f https://k8s.io/examples/pods/inject/dependent-envars.yamlpod/dependent-envars-demo created -
चल रहे पॉड्स की सूची देखें:
kubectl get pods dependent-envars-demoNAME READY STATUS RESTARTS AGE dependent-envars-demo 1/1 Running 0 9s -
अपने पॉड में चल रहे कंटेनर के लॉग्स देखें:
kubectl logs pod/dependent-envars-demoUNCHANGED_REFERENCE=$(PROTOCOL)://172.17.0.1:80 SERVICE_ADDRESS=https://172.17.0.1:80 ESCAPED_REFERENCE=$(PROTOCOL)://172.17.0.1:80
जैसा कि ऊपर दिखाया गया है, आपने SERVICE_ADDRESS के लिए एक सही डिपेंडेंसी रेफरेंस,
UNCHANGED_REFERENCE के लिए एक गलत डिपेंडेंसी रेफरेंस, और ESCAPED_REFERENCE के लिए एक स्किप किया गया रेफरेंस परिभाषित किया है।
जब कोई एनवायरनमेंट वेरिएबल पहले से परिभाषित होता है और उसका रेफरेंस दिया जाता है,
तो वह रेफरेंस सही तरीके से हल हो सकता है, जैसा कि SERVICE_ADDRESS के मामले में हुआ।
ध्यान दें कि env सूची में क्रम महत्वपूर्ण होता है।
अगर कोई वेरिएबल सूची में नीचे परिभाषित है, तो उसे परिभाषित नहीं माना जाता।
इसी कारण से UNCHANGED_REFERENCE $(PROTOCOL) को हल करने में विफल रहता है।
जब कोई एनवायरनमेंट वेरिएबल परिभाषित नहीं होता या उसमें कुछ वेरिएबल्स ही शामिल होते हैं,
तो वह वेरिएबल एक सामान्य स्ट्रिंग की तरह माना जाता है, जैसे कि UNCHANGED_REFERENCE।
ध्यान दें कि सामान्यतः गलत तरीके से पार्स किए गए एनवायरनमेंट वेरिएबल्स कंटेनर को शुरू होने से नहीं रोकते।
$(VAR_NAME) सिंटैक्स को डबल $, जैसे $$(VAR_NAME) से एस्केप किया जा सकता है।
एस्केप किए गए रेफरेंस कभी भी विस्तारित नहीं होते, चाहे संबंधित वेरिएबल परिभाषित हो या नहीं।
यह ESCAPED_REFERENCE उदाहरण में देखा जा सकता है।
आगे क्या है
- एनवायरनमेंट वेरिएबल्स के बारे में और जानें।
- EnvVarSource देखें।
4.4 - नेटवर्क पॉलिसी प्रोवाइडर इंस्टॉल करें
4.4.1 - नेटवर्कपॉलिसी के लिए Antrea का उपयोग करें
यह पेज कुबेरनेट्स पर Antrea CNI प्लगइन को कैसे इंस्टॉल और उपयोग करें, यह दिखाता है। प्रोजेक्ट Antrea की पृष्ठभूमि के लिए, Antrea का परिचय पढ़ें।
शुरू करने से पहले
आपके पास एक कुबेरनेट्स क्लस्टर होना चाहिए। एक क्लस्टर को बूटस्ट्रैप करने के लिए kubeadm आरंभ करने की गाइड का पालन करें।
kubeadm के साथ Antrea को डिप्लॉय करना
kubeadm के लिए Antrea को डिप्लॉय करने के लिए आरंभ करने की गाइड का पालन करें।
आगे क्या है
एक बार जब आपका क्लस्टर चल रहा हो, तो आप कुबेरनेट्स नेटवर्कपॉलिसी को आज़माने के लिए नेटवर्क पॉलिसी घोषित करें का पालन कर सकते हैं।
4.4.2 - नेटवर्कपॉलिसी के लिए Calico का उपयोग करें
यह पेज कुबेरनेट्स पर Calico क्लस्टर बनाने के कुछ त्वरित तरीके दिखाता है।
शुरू करने से पहले
तय करें कि आप cloud या local क्लस्टर डिप्लॉय करना चाहते हैं।
Google कुबेरनेट्स इंजन (GKE) के साथ Calico क्लस्टर बनाना
पूर्वापेक्षा: gcloud।
-
Calico के साथ GKE क्लस्टर लॉन्च करने के लिए,
--enable-network-policyफ्लैग शामिल करें।सिंटैक्स
gcloud container clusters create [CLUSTER_NAME] --enable-network-policyउदाहरण
gcloud container clusters create my-calico-cluster --enable-network-policy -
डिप्लॉयमेंट को सत्यापित करने के लिए, निम्नलिखित कमांड का उपयोग करें।
kubectl get pods --namespace=kube-systemCalico पॉड्स
calicoसे शुरू होते हैं। जांचें कि प्रत्येक की स्थितिRunningहै।
kubeadm के साथ लोकल Calico क्लस्टर बनाना
kubeadm का उपयोग करके पंद्रह मिनट में एक लोकल सिंगल-होस्ट Calico क्लस्टर प्राप्त करने के लिए, Calico क्विकस्टार्ट देखें।
आगे क्या है
एक बार जब आपका क्लस्टर चल रहा हो, तो आप कुबेरनेट्स नेटवर्कपॉलिसी को आज़माने के लिए नेटवर्क पॉलिसी घोषित करें का पालन कर सकते हैं।
4.5 - कुबेरनेट्स का विस्तार करें
4.5.1 - कस्टम रिसोर्स का उपयोग करें
4.6 - TLS
4.6.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/e2e-test-images/agnhost:2.53 -- /agnhost netexec --http-port=8080 -
डेप्लॉयमेंट देखें:
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.36
- कुबेरनेट्स 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/v1API- Client प्रमाणीकरण API (v1beta1)
- WebhookAdmission विन्यास (v1)
kubeadm के लिए कॉन्फिग API
डिज़ाइन दस्तावेज़
कुबेरनेट्स कार्यक्षमता के लिए डिज़ाइन से संबंधित दस्तावेज़ों का एक संग्रह। अच्छे शुरुआती बिंदु हैं कुबेरनेट्स वास्तुकला और कुबेरनेट्स डिज़ाइन अवलोकन.
6.1 - शब्दकोष
6.2 - kubectl त्वरित संदर्भ
इस पेज पर आम तौर पर इस्तेमाल होने वाले kubectl कमांड और फ़्लैग की सूची दी गई है।
टिप्पणी:
ये निर्देश Kubernetes v1.36 के लिए हैं। वर्शन चेक करने के लिए,kubectl version कमांड का इस्तेमाल करें।Kubectl ऑटो-कम्प्लीट
BASH
source <(kubectl completion bash) # मौजूदा शेल में bash के लिए ऑटो-कम्प्लीट सेट अप करें; इसके लिए पहले bash-completion पैकेज इंस्टॉल होना चाहिए।
echo "source <(kubectl completion bash)" >> ~/.bashrc # अपने bash शेल में ऑटो-कम्प्लीट को हमेशा के लिए जोड़ें।
आप kubectl के लिए एक शॉर्टहैंड एलियास (alias) का भी इस्तेमाल कर सकते हैं जो 'कंप्लीशन' (completion) के साथ भी काम करता है:
alias k=kubectl
complete -o default -F __start_kubectl k
ZSH
source <(kubectl completion zsh) # मौजूदा शेल में zsh के लिए ऑटो-कम्प्लीट सेट अप करें
echo '[[ $commands[kubectl] ]] && source <(kubectl completion zsh)' >> ~/.zshrc # अपने zsh शेल में ऑटो-कम्प्लीट को हमेशा के लिए जोड़ें
FISH
टिप्पणी:
इसके लिए kubectl वर्शन 1.23 या उससे नया वर्शन चाहिए।echo 'kubectl completion fish | source' > ~/.config/fish/completions/kubectl.fish && source ~/.config/fish/completions/kubectl.fish
--all-namespaces के बारे में एक नोट
--all-namespaces को अक्सर इस्तेमाल किया जाता है, इसलिए आपको --all-namespaces के शॉर्टहैंड के बारे में पता होना चाहिए:
kubectl -A
Kubectl context and configuration (## Kubectl कॉन्टेक्स्ट और कॉन्फ़िगरेशन)
यह तय करें कि kubectl किस Kubernetes क्लस्टर के साथ कम्युनिकेट करता है और कॉन्फ़िगरेशन में बदलाव करता है।
जानकारी। इसके लिए kubeconfig के साथ क्लस्टर्स के बीच ऑथेंटिकेट करना डॉक्यूमेंटेशन देखें।
विस्तृत कॉन्फ़िगरेशन फ़ाइल जानकारी।
kubectl config view # मर्ज की गई kubeconfig सेटिंग्स दिखाएं।
# use multiple kubeconfig files at the same time and view merged config(# एक ही समय में कई kubeconfig फ़ाइलों का इस्तेमाल करें और मर्ज की गई कॉन्फ़िग देखें)
KUBECONFIG=~/.kube/config:~/.kube/kubconfig2
kubectl config view
# Show merged kubeconfig settings and raw certificate data and exposed secrets(# मर्ज की गई kubeconfig सेटिंग्स, रॉ सर्टिफ़िकेट डेटा और एक्सपोज़्ड सीक्रेट्स दिखाएं)
kubectl config view --raw
# get the password for the e2e user (# e2e यूज़र के लिए पासवर्ड प्राप्त करें)
kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'
# get the certificate for the e2e user(# e2e यूज़र के लिए सर्टिफ़िकेट प्राप्त करें)
kubectl config view --raw -o jsonpath='{.users[?(.name == "e2e")].user.client-certificate-data}' | base64 -d
kubectl config view -o jsonpath='{.users[].name}' # पहला यूज़र दिखाएं
kubectl config view -o jsonpath='{.users[*].name}' # यूज़र्स की लिस्ट पाएं
kubectl config get-contexts # कॉन्टेक्स्ट की लिस्ट दिखाएं
kubectl config get-contexts -o name # सभी कॉन्टेक्स्ट के नाम पाएं
kubectl config current-context # मौजूदा कॉन्टेक्स्ट दिखाएं
kubectl config use-context my-cluster-name # डिफ़ॉल्ट कॉन्टेक्स्ट को my-cluster-name पर सेट करें
kubectl config set-cluster my-cluster-name # kubeconfig में क्लस्टर एंट्री सेट करें
# configure the URL to a proxy server to use for requests made by this client in the kubeconfig(# kubeconfig में इस क्लाइंट की रिक्वेस्ट के लिए इस्तेमाल होने वाले प्रॉक्सी सर्वर का URL कॉन्फ़िगर करें)
kubectl config set-cluster my-cluster-name --proxy-url=my-proxy-url
# add a new user to your kubeconf that supports basic auth (# अपने kubeconf में एक नया यूज़र जोड़ें जो बेसिक ऑथ (basic auth) को सपोर्ट करता हो)
kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword
# permanently save the namespace for all subsequent kubectl commands in that context. (# उस कॉन्टेक्स्ट में बाद के सभी kubectl कमांड्स के लिए नेमस्पेस को स्थायी रूप से सेव करें।)
kubectl config set-context --current --namespace=ggckad-s2
# set a context utilizing a specific username and namespace.(# एक खास यूज़रनेम और नेमस्पेस का इस्तेमाल करके कॉन्टेक्स्ट सेट करें।)
kubectl config set-context gce --user=cluster-admin --namespace=foo \
&& kubectl config use-context gce
kubectl config unset users.foo # यूज़र foo को हटाएं
# कॉन्टेक्स्ट/नेमस्पेस सेट/दिखाने के लिए छोटा एलियास (सिर्फ़ bash और bash-कम्पैटिबल शेल के लिए काम करता है; नेमस्पेस सेट करने के लिए kn का इस्तेमाल करने से पहले मौजूदा कॉन्टेक्स्ट सेट करना होगा)
alias kx='f() { [ "$1" ] && kubectl config use-context $1 || kubectl config current-context ; } ; f'
alias kn='f() { [ "$1" ] && kubectl config set-context --current --namespace $1 || kubectl config view --minify | grep namespace | cut -d" " -f6 ; } ; f'
Kubectl apply
apply उन फ़ाइलों के ज़रिए ऐप्लिकेशन को मैनेज करता है जो Kubernetes रिसोर्स को परिभाषित करती हैं। यह kubectl apply चलाकर क्लस्टर में रिसोर्स बनाता और अपडेट करता है। प्रोडक्शन पर Kubernetes ऐप्लिकेशन को मैनेज करने का यह सुझाया गया तरीका है। Kubectl Book देखें।
Creating objects (## ऑब्जेक्ट बनाना)
Kubernetes मैनिफ़ेस्ट को YAML या JSON में डिफाइन किया जा सकता है। फ़ाइल एक्सटेंशन .yaml,
.yml, and .json can be used.
kubectl apply -f ./my-manifest.yaml # रिसोर्स बनाएँ
kubectl apply -f ./my1.yaml -f ./my2.yaml # कई फ़ाइलों से बनाएँ
kubectl apply -f ./dir # डायरेक्टरी की सभी मैनिफ़ेस्ट फ़ाइलों में रिसोर्स बनाएँ
kubectl apply -f https://example.com/manifest.yaml # URL से रिसोर्स बनाएँ (ध्यान दें: यह एक उदाहरण डोमेन है और इसमें कोई सही मैनिफ़ेस्ट नहीं है)
kubectl create deployment nginx --image=nginx # nginx का एक इंस्टेंस शुरू करें
# create a Job which prints "Hello World" (# एक ऐसा जॉब बनाएँ जो "Hello World" प्रिंट करे)
kubectl create job hello --image=busybox:1.28 -- echo "Hello World"
# create a CronJob that prints "Hello World" every minute (# एक ऐसा CronJob बनाएँ जो हर मिनट "Hello World" प्रिंट करे)
kubectl create cronjob hello --image=busybox:1.28 --schedule="*/1 * * * *" -- echo "Hello World"
kubectl explain pods # पॉड मैनिफ़ेस्ट के लिए डॉक्यूमेंटेशन पाएँ
# Create multiple YAML objects from stdin (# stdin से कई YAML ऑब्जेक्ट बनाएं)
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep
spec:
containers:
- name: busybox
image: busybox:1.28
args:
- sleep
- "1000000"
---
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep-less
spec:
containers:
- name: busybox
image: busybox:1.28
args:
- sleep
- "1000"
EOF
# Create a secret with several keys (# कई कीज़ (keys) वाला एक सीक्रेट बनाएँ)
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: $(echo -n "s33msi4" | base64 -w0)
username: $(echo -n "jane" | base64 -w0)
EOF
Viewing and finding resources (## रिसोर्स देखना और खोजना)
# Get commands with basic output (# बेसिक आउटपुट वाले कमांड्स प्राप्त करें)
kubectl get services # नेमस्पेस में सभी सर्विसेज़ की लिस्ट देखें
kubectl get pods --all-namespaces # सभी नेमस्पेस में सभी पॉड्स की लिस्ट देखें
kubectl get pods -o wide # मौजूदा नेमस्पेस में सभी पॉड्स की लिस्ट, ज़्यादा जानकारी के साथ देखें
kubectl get deployment my-dep # किसी खास डिप्लॉयमेंट की लिस्ट देखें
kubectl get pods # नेमस्पेस में सभी पॉड्स की लिस्ट देखें
kubectl get pod my-pod -o yaml # पॉड का YAML पाएँ
# Describe commands with verbose output (# ज़्यादा जानकारी वाले आउटपुट के साथ कमांड्स को डिस्क्राइब करें)
kubectl describe nodes my-node
kubectl describe pods my-pod
# List Services Sorted by Name (# नाम के आधार पर सॉर्ट की गई सर्विसेज़ की लिस्ट)
kubectl get services --sort-by=.metadata.name
# List pods Sorted by Restart Count (# रीस्टार्ट काउंट के आधार पर सॉर्ट किए गए पॉड्स की लिस्ट)
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
# List PersistentVolumes sorted by capacity (# क्षमता के आधार पर सॉर्ट किए गए PersistentVolumes की लिस्ट)
kubectl get pv --sort-by=.spec.capacity.storage
# Get the version label of all pods with label app=cassandra (# app=cassandra लेबल वाले सभी पॉड्स का वर्शन लेबल प्राप्त करें)
kubectl get pods --selector=app=cassandra -o \
jsonpath='{.items[*].metadata.labels.version}'
# Retrieve the value of a key with dots, e.g. 'ca.crt' (# डॉट्स वाली की (key) की वैल्यू पाएँ, जैसे 'ca.crt')
kubectl get configmap myconfig \
-o jsonpath='{.data.ca\.crt}'
# Retrieve a base64 encoded value with dashes instead of underscores. (# अंडरस्कोर की जगह डैश वाली base64 एन्कोडेड वैल्यू पाएँ।)
kubectl get secret my-secret --template='{{index .data "key-name-with-dashes"}}'
# Get all worker nodes (use a selector to exclude results that have a label # सभी वर्कर नोड्स पाएं (लेबल वाले रिज़ल्ट को बाहर करने के लिए सिलेक्टर का इस्तेमाल करें)
kubectl get node --selector='!node-role.kubernetes.io/control-plane'
# Get all running pods in the namespace (# नेमस्पेस में चल रहे सभी पॉड्स (pods) की जानकारी लें)
kubectl get pods --field-selector=status.phase=Running
# Get ExternalIPs of all nodes (# सभी नोड्स के ExternalIPs प्राप्त करें)
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
# List Names of Pods that belong to Particular RC (# किसी खास RC से जुड़े पॉड्स (Pods) के नाम की लिस्ट बनाएं)
# "jq" command useful for transformations that are too complex for jsonpath, it can be found at https://jqlang.github.io/jq/ (# "jq" कमांड उन बदलावों (transformations) के लिए काम का है जो jsonpath के लिए बहुत मुश्किल होते हैं; इसे https://jqlang.github.io/jq/ पर देखा जा सकता है)
sel=${$(kubectl get rc my-rc --output=json | jq -j '.spec.selector | to_entries | .[] | "\(.key)=\(.value),"')%?}
echo $(kubectl get pods --selector=$sel --output=jsonpath={.items..metadata.name})
# Show labels for all pods (or any other Kubernetes object that supports labelling) (# सभी पॉड्स (या लेबलिंग को सपोर्ट करने वाले किसी भी अन्य Kubernetes ऑब्जेक्ट) के लिए लेबल दिखाएं)
kubectl get pods --show-labels
# Check which nodes are ready (# जांचें कि कौन से नोड्स तैयार हैं)
JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \
&& kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"
# Check which nodes are ready with custom-columns (# कस्टम-कॉलम के साथ देखें कि कौन से नोड तैयार हैं)
kubectl get node -o custom-columns='NODE_NAME:.metadata.name,STATUS:.status.conditions[?(@.type=="Ready")].status'
# Output decoded secrets without external tools (# बाहरी टूल के बिना डिकोड किए गए सीक्रेट्स का आउटपुट पाएं)
kubectl get secret my-secret -o go-template='{{range $k,$v := .data}}{{"### "}}{{$k}}{{"\n"}}{{$v|base64decode}}{{"\n\n"}}{{end}}'
# List all Secrets currently in use by a pod (# किसी पॉड (pod) द्वारा इस्तेमाल किए जा रहे सभी सीक्रेट्स (secrets) की लिस्ट बनाएं)
kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq
# List all containerIDs of initContainer of all pods (# सभी पॉड्स के initContainer के सभी containerIDs की लिस्ट बनाएं)
# Helpful when cleaning up stopped containers, while avoiding removal of initContainers. (# यह तब काम आता है जब आप रुके हुए कंटेनरों को हटा रहे हों, लेकिन initContainers को हटाना न चाहें।)
kubectl get pods --all-namespaces -o jsonpath='{range .items[*].status.initContainerStatuses[*]}{.containerID}{"\n"}{end}' | cut -d/ -f3
# List Events sorted by timestamp (# टाइमस्टैम्प के आधार पर इवेंट्स की लिस्ट बनाएं)
kubectl get events --sort-by=.metadata.creationTimestamp
# List all warning events (# सभी वॉर्निंग इवेंट्स की लिस्ट बनाएं)
kubectl events --types=Warning
# Compares the current state of the cluster against the state that the cluster would be in if the manifest was applied. (# क्लस्टर की मौजूदा स्थिति की तुलना उस स्थिति से करें जो मैनिफ़ेस्ट लागू होने पर क्लस्टर की होती।)
kubectl diff -f ./my-manifest.yaml
# Produce a period-delimited tree of all keys returned for nodes (# नोड्स के लिए मिली सभी कीज़ (keys) का डॉट (.) से अलग किया गया ट्री बनाएँ)
# Helpful when locating a key within a complex nested JSON structure (# यह तब मददगार होता है जब किसी कॉम्प्लेक्स नेस्टेड JSON स्ट्रक्चर में कोई की (key) ढूँढनी हो)
kubectl get nodes -o json | jq -c 'paths|join(".")'
# Produce a period-delimited tree of all keys returned for pods, etc (# पॉड्स (pods) वगैरह के लिए मिली सभी कीज़ का डॉट (.) से अलग किया गया ट्री बनाएँ)
kubectl get pods -o json | jq -c 'paths|join(".")'
# Produce ENV for all pods, assuming you have a default container for the pods, default namespace and the `env` command is supported. (# सभी पॉड्स के लिए ENV बनाएँ, यह मानते हुए कि पॉड्स के लिए एक डिफ़ॉल्ट कंटेनर और डिफ़ॉल्ट नेमस्पेस है, और `env` कमांड सपोर्टेड है।)
# Helpful when running any supported command across all pods, not just `env` (# यह तब मददगार होता है जब आप सभी पॉड्स पर कोई भी सपोर्टेड कमांड चलाते हैं, न कि सिर्फ़ `env`)
for pod in $(kubectl get po --output=jsonpath={.items..metadata.name}); do echo $pod && kubectl exec -it $pod -- env; done
# Get a deployment's status subresource (# डिप्लॉयमेंट का स्टेटस सब-रिसोर्स प्राप्त करें)
kubectl get deployment nginx-deployment --subresource=status
Updating resources (## रिसोर्स को अपडेट करना)
kubectl set image deployment/frontend www=image:v2 # "frontend" डिप्लॉयमेंट के "www" कंटेनर्स का रोलिंग अपडेट, इमेज को अपडेट करना
kubectl rollout history deployment/frontend # डिप्लॉयमेंट्स की हिस्ट्री देखें, जिसमें रिविज़न भी शामिल हो
kubectl rollout undo deployment/frontend # पिछले डिप्लॉयमेंट पर वापस जाएँ (रोलबैक)
kubectl rollout undo deployment/frontend --to-revision=2 # किसी खास रिविज़न पर वापस जाएँ (रोलबैक)
kubectl rollout status -w deployment/frontend # पूरा होने तक "frontend" डिप्लॉयमेंट के रोलिंग अपडेट का स्टेटस देखें
kubectl rollout restart deployment/frontend # "frontend" डिप्लॉयमेंट का रोलिंग रीस्टार्ट
cat pod.json | kubectl replace -f - # Replace a pod based on the JSON passed into stdin (# stdin में दिए गए JSON के आधार पर पॉड (pod) को बदलें)
# Force replace, delete and then re-create the resource. Will cause a service outage. (# ज़बरदस्ती बदलें (force replace), रिसोर्स को डिलीट करें और फिर से बनाएँ। इससे सर्विस में रुकावट आएगी।)
kubectl replace --force -f ./pod.json
# Create a service for a replicated nginx, which serves on port 80 and connects to the containers on port 8000 (# एक रेप्लिकेटेड nginx के लिए सर्विस बनाएँ, जो पोर्ट 80 पर काम करे और पोर्ट 8000 पर कंटेनर्स से कनेक्ट हो)
kubectl expose rc nginx --port=80 --target-port=8000
# Update a single-container pod's image version (tag) to v4 (# सिंगल-कंटेनर पॉड के इमेज वर्शन (टैग) को v4 में अपडेट करें)
kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -
kubectl label pods my-pod new-label=awesome # लेबल जोड़ें
kubectl label pods my-pod new-label- # लेबल हटाएं
kubectl label pods my-pod new-label=new-value --overwrite # मौजूदा वैल्यू को ओवरराइट करें
kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq # एनोटेशन जोड़ें
kubectl annotate pods my-pod icon-url- # एनोटेशन हटाएं
kubectl autoscale deployment foo --min=2 --max=10 # "foo" डिप्लॉयमेंट को ऑटो-स्केल करें
Patching resources (## रिसोर्स को पैच करना)
# Partially update a node (# नोड को आंशिक रूप से अपडेट करें)
kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'
# Update a container's image; spec.containers[*].name is required because it's a merge key (# कंटेनर की इमेज अपडेट करें; spec.containers[*].name ज़रूरी है क्योंकि यह एक मर्ज की (merge key) है)
kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'
# Update a container's image using a json patch with positional arrays (# पोज़िशनल ऐरे के साथ json पैच का इस्तेमाल करके कंटेनर की इमेज अपडेट करें)
kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'
# Disable a deployment livenessProbe using a json patch with positional arrays (# पोज़िशनल ऐरे के साथ json पैच का इस्तेमाल करके डिप्लॉयमेंट livenessProbe को डिसेबल करें)
kubectl patch deployment valid-deployment --type json -p='[{"op": "remove", "path": "/spec/template/spec/containers/0/livenessProbe"}]'
# Add a new element to a positional array (# पोज़िशनल ऐरे में नया एलिमेंट जोड़ें)
kubectl patch sa default --type='json' -p='[{"op": "add", "path": "/secrets/1", "value": {"name": "whatever" } }]'
# Update a deployment's replica count by patching its scale subresource (# किसी डिप्लॉयमेंट के स्केल सब-रिसोर्स को पैच करके उसके रेप्लिका की संख्या अपडेट करें)
kubectl patch deployment nginx-deployment --subresource='scale' --type='merge' -p '{"spec":{"replicas":2}}'
Editing resources (## रिसोर्स को एडिट करना)
अपनी पसंद के एडिटर में किसी भी API रिसोर्स को एडिट करें।
kubectl edit svc/docker-registry # docker-registry नाम की सर्विस को एडिट करें
KUBE_EDITOR="nano" kubectl edit svc/docker-registry # किसी दूसरे एडिटर का इस्तेमाल करें
Scaling resources (## रिसोर्स को स्केल करना)
kubectl scale --replicas=3 rs/foo # 'foo' नाम के रेप्लिकासैट को 3 तक स्केल करें
kubectl scale --replicas=3 -f foo.yaml # "foo.yaml" में बताए गए रिसोर्स को 3 तक स्केल करें
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # अगर mysql नाम के डिप्लॉयमेंट का मौजूदा साइज़ 2 है, तो mysql को 3 तक स्केल करें
kubectl scale --replicas=5 rc/foo rc/bar rc/baz # कई रेप्लिकेशन कंट्रोलर को स्केल करें
Deleting resources (## रिसोर्स हटाना)
kubectl delete -f ./pod.json # pod.json में बताए गए टाइप और नाम का इस्तेमाल करके पॉड हटाएं
kubectl delete pod unwanted --now # बिना किसी ग्रेस पीरियड के पॉड हटाएं
kubectl delete pod,service baz foo # "baz" और "foo" नाम वाले पॉड और सर्विस हटाएं
kubectl delete pods,services -l name=myLabel # name=myLabel लेबल वाले पॉड और सर्विस हटाएं
kubectl -n my-ns delete pod,svc --all # my-ns नेमस्पेस में सभी पॉड और सर्विस हटाएं,
# awk पैटर्न1 या पैटर्न2 से मेल खाने वाले सभी पॉड हटाएं
kubectl get pods -n mynamespace --no-headers=true | awk '/pattern1|pattern2/{print $1}' | xargs kubectl delete -n mynamespace pod
Interacting with running Pods (## चल रहे पॉड्स के साथ इंटरैक्ट करना)
kubectl logs my-pod # पॉड लॉग्स (stdout) दिखाएं
kubectl logs -l name=myLabel # label name=myLabel वाले पॉड लॉग्स (stdout) दिखाएं
kubectl logs my-pod --previous # कंटेनर के पिछले इंस्टेंस के लिए पॉड लॉग्स (stdout) दिखाएं
kubectl logs my-pod -c my-container # पॉड कंटेनर लॉग्स (stdout, मल्टी-कंटेनर केस) दिखाएं
kubectl logs -l name=myLabel -c my-container # label name=myLabel वाले पॉड कंटेनर लॉग्स (stdout) दिखाएं
kubectl logs my-pod -c my-container --previous # कंटेनर के पिछले इंस्टेंस के लिए पॉड कंटेनर लॉग्स (stdout, मल्टी-कंटेनर केस) दिखाएं
kubectl logs -f my-pod # पॉड लॉग्स (stdout) को स्ट्रीम करें
kubectl logs -f my-pod -c my-container # पॉड कंटेनर लॉग्स (stdout, मल्टी-कंटेनर केस) को स्ट्रीम करें
kubectl logs -f -l name=myLabel --all-containers # label name=myLabel वाले सभी पॉड्स के लॉग्स (stdout) को स्ट्रीम करें
kubectl run -i --tty busybox --image=busybox:1.28 -- sh # पॉड को इंटरैक्टिव शेल के तौर पर चलाएं
kubectl run nginx --image=nginx -n mynamespace # mynamespace नेमस्पेस में nginx पॉड का एक इंस्टेंस शुरू करें
kubectl run nginx --image=nginx --dry-run=client -o yaml > pod.yaml
# चल रहे पॉड nginx के लिए स्पेक (spec) बनाएं और उसे pod.yaml नाम की फ़ाइल में लिखें
kubectl attach my-pod -i # चल रहे कंटेनर से जुड़ें
kubectl port-forward my-pod 5000:6000 # लोकल मशीन पर पोर्ट 5000 पर सुनें और my-pod पर पोर्ट 6000 पर फ़ॉरवर्ड करें
kubectl exec my-pod -- ls / # मौजूदा पॉड में कमांड चलाएं (1 कंटेनर केस)
kubectl exec --stdin --tty my-pod -- /bin/sh # चल रहे पॉड का इंटरैक्टिव शेल एक्सेस (1 कंटेनर केस)
kubectl exec my-pod -c my-container -- ls / # मौजूदा पॉड में कमांड चलाएं (मल्टी-कंटेनर केस)
kubectl debug my-pod -it --image=busybox:1.28 # इंटरैक्टिव डीबगिंग बनाएं मौजूदा पॉड के अंदर सेशन शुरू करें और तुरंत उससे जुड़ें
kubectl debug node/my-node -it --image=busybox:1.28 # नोड पर एक इंटरैक्टिव डीबगिंग सेशन बनाएं और तुरंत उससे जुड़ें
kubectl top pod # डिफ़ॉल्ट नेमस्पेस में सभी पॉड्स के लिए मेट्रिक्स दिखाएं
kubectl top pod POD_NAME --containers # किसी खास पॉड और उसके कंटेनर्स के लिए मेट्रिक्स दिखाएं
kubectl top pod POD_NAME --sort-by=cpu # किसी खास पॉड के लिए मेट्रिक्स दिखाएं और उन्हें 'cpu' या 'memory' के आधार पर सॉर्ट करें
## Copying files and directories to and from containers (## कंटेनर में और कंटेनर से फ़ाइलें और डायरेक्टरी कॉपी करना)
```bash
kubectl cp /tmp/foo_dir my-pod:/tmp/bar_dir # मौजूदा नेमस्पेस में रिमोट पॉड की /tmp/bar_dir में लोकल डायरेक्टरी /tmp/foo_dir को कॉपी करें
kubectl cp /tmp/foo my-pod:/tmp/bar -c my-container # किसी खास कंटेनर में रिमोट पॉड की /tmp/bar में लोकल फ़ाइल /tmp/foo को कॉपी करें
kubectl cp /tmp/foo my-namespace/my-pod:/tmp/bar # my-namespace नेमस्पेस में रिमोट पॉड की /tmp/bar में लोकल फ़ाइल /tmp/foo को कॉपी करें
kubectl cp my-namespace/my-pod:/tmp/foo /tmp/bar # रिमोट पॉड से /tmp/foo को लोकल तौर पर /tmp/bar में कॉपी करें
टिप्पणी:
kubectl cp के लिए ज़रूरी है कि आपके कंटेनर इमेज में 'tar' बाइनरी मौजूद हो। अगर 'tar' मौजूद नहीं है, तो kubectl cp काम नहीं करेगा।
सिमलिंक (symlinks), वाइल्डकार्ड एक्सपेंशन या फ़ाइल मोड को बनाए रखने जैसे एडवांस्ड इस्तेमाल के लिए kubectl exec का इस्तेमाल करने पर विचार करें।tar cf - /tmp/foo | kubectl exec -i -n my-namespace my-pod -- tar xf - -C /tmp/bar # my-namespace में मौजूद रिमोट पॉड में /tmp/foo लोकल फ़ाइल को /tmp/bar में कॉपी करें
kubectl exec -n my-namespace my-pod -- tar cf - /tmp/foo | tar xf - -C /tmp/bar # रिमोट पॉड से /tmp/foo को लोकल तौर पर /tmp/bar में कॉपी करें
Interacting with Deployments and Services (## डिप्लॉयमेंट और सर्विस के साथ इंटरैक्ट करना)
kubectl logs deploy/my-deployment # डिप्लॉयमेंट के लिए पॉड लॉग्स डंप करें (सिंगल-कंटेनर केस)
kubectl logs deploy/my-deployment -c my-container # डिप्लॉयमेंट के लिए पॉड लॉग्स डंप करें (मल्टी-कंटेनर केस)
kubectl port-forward svc/my-service 5000 # लोकल पोर्ट 5000 पर सुनें और सर्विस बैकएंड पर पोर्ट 5000 पर फ़ॉरवर्ड करें
kubectl port-forward svc/my-service 5000:my-service-port # लोकल पोर्ट 5000 पर सुनें और <my-service-port> नाम वाले सर्विस टारगेट पोर्ट पर फ़ॉरवर्ड करें
kubectl port-forward deploy/my-deployment 5000:6000 # लोकल पोर्ट 5000 पर सुनें और <my-deployment> द्वारा बनाए गए पॉड पर पोर्ट 6000 पर फ़ॉरवर्ड करें
kubectl exec deploy/my-deployment -- ls # डिप्लॉयमेंट में पहले पॉड और पहले कंटेनर में कमांड चलाएँ (सिंगल- या मल्टी-कंटेनर केस)
Interacting with Nodes and cluster (## नोड्स और क्लस्टर के साथ इंटरैक्ट करना)
kubectl cordon my-node # my-node को अनशेड्यूलेबल (unschedulable) के तौर पर मार्क करें
kubectl drain my-node # मेंटेनेंस की तैयारी के लिए my-node को ड्रेन (drain) करें
kubectl uncordon my-node # my-node को शेड्यूलेबल (schedulable) के तौर पर मार्क करें
kubectl top node # सभी नोड्स के लिए मेट्रिक्स दिखाएं
kubectl top node my-node # किसी खास नोड के लिए मेट्रिक्स दिखाएं
kubectl cluster-info # मास्टर और सर्विसेज़ के एड्रेस दिखाएं
kubectl cluster-info dump # मौजूदा क्लस्टर स्टेट को stdout पर डंप करें
kubectl cluster-info dump --output-directory=/path/to/cluster-state # मौजूदा क्लस्टर स्टेट को /path/to/cluster-state पर डंप करें
View existing taints on which exist on current nodes (# मौजूदा नोड्स पर मौजूद टेन्ट्स (taints) देखें।)
kubectl get nodes -o='custom-columns=NodeName:.metadata.name,TaintKey:.spec.taints[].key,TaintValue:.spec.taints[].value,TaintEffect:.spec.taints[*].effect'
If a taint with that key and effect already exists, its value is replaced as specified. (# अगर उस की (key) और इफ़ेक्ट (effect) वाला टेन्ट पहले से मौजूद है, तो उसकी वैल्यू बताई गई वैल्यू से बदल दी जाती है।)
kubectl taint nodes foo dedicated=special-user:NoSchedule
### Resource types (### रिसोर्स के प्रकार)
सभी सपोर्टेड रिसोर्स के प्रकारों की सूची उनके शॉर्टनेम, [API ग्रुप](/docs/concepts/overview/kubernetes-api/#api-groups-and-versioning), क्या वे [नेमस्पेस वाले](/docs/concepts/overview/working-with-objects/namespaces) हैं, और [काइंड](/docs/concepts/overview/working-with-objects/) के साथ दिखाएं:
```bash
kubectl api-resources
API रिसोर्स को एक्सप्लोर करने के लिए अन्य ऑपरेशन:
kubectl api-resources --namespaced=true # सभी नेमस्पेस वाले रिसोर्स
kubectl api-resources --namespaced=false # सभी बिना नेमस्पेस वाले रिसोर्स
kubectl api-resources -o name # साधारण आउटपुट वाले सभी रिसोर्स (सिर्फ़ रिसोर्स का नाम)
kubectl api-resources -o wide # विस्तृत (यानी "वाइड") आउटपुट वाले सभी रिसोर्स
kubectl api-resources --verbs=list,get # वे सभी रिसोर्स जो "list" और "get" रिक्वेस्ट वर्ब को सपोर्ट करते हैं
kubectl api-resources --api-group=extensions # "extensions" API ग्रुप में सभी रिसोर्स
Formatting output (### आउटपुट फ़ॉर्मैटिंग)
अपनी टर्मिनल विंडो में किसी खास फ़ॉर्मैट में जानकारी दिखाने के लिए, किसी सपोर्टेड kubectl कमांड में -o (या --output) फ़्लैग जोड़ें।
| Output format | Description (आउटपुट फ़ॉर्मैट | विवरण) |
|---|---|---|
-o=custom-columns=<spec> |
कस्टम कॉलम की कॉमा-सेपरेटेड लिस्ट का इस्तेमाल करके एक टेबल प्रिंट करें | |
-o=custom-columns-file=<filename> |
<filename> फ़ाइल में कस्टम कॉलम टेम्प्लेट का इस्तेमाल करके एक टेबल प्रिंट करें |
|
-o=go-template=<template> |
golang टेम्प्लेट में बताए गए फ़ील्ड प्रिंट करें | |
-o=go-template-file=<filename> |
<filename> फ़ाइल में golang टेम्प्लेट से बताए गए फ़ील्ड प्रिंट करें |
|
-o=json |
JSON फ़ॉर्मैट वाला API ऑब्जेक्ट आउटपुट करें | |
-o=jsonpath=<template> |
jsonpath एक्सप्रेशन में बताए गए फ़ील्ड प्रिंट करें | |
-o=jsonpath-file=<filename> |
<filename> फ़ाइल में jsonpath एक्सप्रेशन से बताए गए फ़ील्ड प्रिंट करें |
|
-o=kyaml |
KYAML फ़ॉर्मैट वाला API ऑब्जेक्ट आउटपुट करें। KYAML, YAML का Kubernetes-स्पेसिफ़िक डायलेक्ट है, और इसे YAML के तौर पर पार्स किया जा सकता है। | |
-o=name |
सिर्फ़ रिसोर्स का नाम प्रिंट करें, और कुछ नहीं | |
-o=wide |
अतिरिक्त जानकारी के साथ प्लेन-टेक्स्ट फ़ॉर्मैट में आउटपुट करें, और पॉड्स के लिए, नोड का नाम भी शामिल होता है | |
-o=yaml |
YAML फ़ॉर्मैट वाला API ऑब्जेक्ट आउटपुट करें |
-o=custom-columns का इस्तेमाल करने के उदाहरण:
# All images running in a cluster (# क्लस्टर में चल रही सभी इमेज)
kubectl get pods -A -o=custom-columns='DATA:spec.containers[*].image'
# All images running in namespace: default, grouped by Pod (# डिफ़ॉल्ट नेमस्पेस में चल रही सभी इमेज, पॉड के हिसाब से ग्रुप की गईं)
kubectl get pods --namespace default --output=custom-columns="NAME:.metadata.name,IMAGE:.spec.containers[*].image"
# All images excluding "registry.k8s.io/coredns:1.6.2" (# "registry.k8s.io/coredns:1.6.2" को छोड़कर सभी इमेज)
kubectl get pods -A -o=custom-columns='DATA:spec.containers[?(@.image!="registry.k8s.io/coredns:1.6.2")].image'
# All fields under metadata regardless of name (# नाम की परवाह किए बिना मेटाडेटा के तहत सभी फ़ील्ड)
kubectl get pods -A -o=custom-columns='DATA:metadata.*'
kubectl रेफ़रेंस डॉक्यूमेंटेशन में और उदाहरण दिए गए हैं।
Kubectl आउटपुट वर्बोसिटी और डीबगिंग
Kubectl वर्बोसिटी को -v या --v फ़्लैग और उसके बाद लॉग लेवल बताने वाले एक इंटीजर से कंट्रोल किया जाता है। सामान्य Kubernetes लॉगिंग के नियम और उनसे जुड़े लॉग लेवल के बारे में यहाँ बताया गया है।
| Verbosity | Description वर्बोसिटी | विवरण |
|---|---|---|
--v=0 |
आम तौर पर क्लस्टर ऑपरेटर के लिए इसे हमेशा देखना उपयोगी होता है। | |
--v=1 |
अगर आप ज़्यादा जानकारी (verbosity) नहीं चाहते हैं, तो यह एक सही डिफ़ॉल्ट लॉग लेवल है। | |
--v=2 |
सर्विस के बारे में उपयोगी स्थिर स्थिति की जानकारी और महत्वपूर्ण लॉग मैसेज जो सिस्टम में बड़े बदलावों से जुड़े हो सकते हैं। ज़्यादातर सिस्टम के लिए यह सुझाया गया डिफ़ॉल्ट लॉग लेवल है। | |
--v=3 |
बदलावों के बारे में विस्तृत जानकारी। | |
--v=4 |
डीबग लेवल की जानकारी (verbosity)। | |
--v=5 |
ट्रेस लेवल की जानकारी (verbosity)। | |
--v=6 |
अनुरोध किए गए रिसोर्स दिखाएं। | |
--v=7 |
HTTP अनुरोध हेडर दिखाएं। | |
--v=8 |
HTTP अनुरोध सामग्री दिखाएं। | |
--v=9 |
HTTP अनुरोध सामग्री को काटे बिना दिखाएं। |
आगे क्या है
-
kubectl ओवरव्यू और Kubernetes इकोसिस्टम में इसकी भूमिका के बारे में जानें।
-
kubectl रेफरेंस पढ़ें और JsonPath के बारे में जानें।
-
kubectl के विकल्प देखें।
-
kuberc के विकल्प देखें।
-
दोबारा इस्तेमाल होने वाले स्क्रिप्ट में kubectl का इस्तेमाल कैसे करें, यह समझने के लिए kubectl इस्तेमाल के नियम भी पढ़ें।
-
कम्युनिटी की और kubectl चीटशीट देखें।
6.3 - शेडुलिंग
6.4 - अन्य उपकरण
कुबेरनेट्स सिस्टम के साथ काम करने में आपकी सहायता के लिए कुबेरनेट्स में कई उपकरण शामिल हैं।
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
की जानकारी होनी चाहिए ताकि आप कुबेरनेटेस समुदाय मे प्रभावी रूप से काम कर सकें।
प्रलेखन मे सहयोग करने के लिए:
- योगदानकर्ता समझौता लाइसेन्स पर हस्ताक्षर करें।
- प्रलेखन रिपॉजिटरी और वेबसाइट की स्टैटिक साइट जनरेटर से खुद को परिचित करें।
- सुनिश्चित करें की आपको पुल अनुरोध करना और बदलाओ की समीक्षा करना आता हो।
flowchart TB subgraph third[PR ओपन करे] direction TB U[ ] -.- Q[विषय सुधारे] --- N[विषय निर्माण करे] N --- O[डॉक्स का अनुवाद करे] O --- P[K8s रिलीज़ चक्र के प्रलेखनआकृति - नए योगदानकर्ताओं के लिए योगदान शुरू करने का रास्ता
को संचालित /प्रकाशित करें] 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 मे भाग लेना को देखें।
आपका पहला योगदान
आप अपने पहले योगदान की तैयारी के लिए दिए गए दिशानिर्देश को देख सकते हैं। नीचे दिया हुआ चित्र दिशानिर्देश और उसकी विस्तार मे जानकारी देता है।
flowchart LR
subgraph second[पहला योगदान]
direction TB
S[ ] -.-
G[दूसरे K8s मेम्बर्स के
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 'टैब सूचियों में कोड ब्लॉक हो सकते हैं!'
चेकलिस्ट
- यह एक चेकलिस्ट आइटम है
- यह एक चयनित चेकलिस्ट आइटम है
कोड ब्लॉक
आप कोड ब्लॉक दो तरीकों से बना सकते हैं, तीन बैकटिक के साथ। केवल कोड के लिए बैकटिक का प्रयोग करें।
यह एक कोड ब्लॉक है
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 >}}
graph TD; A-->B; A-->C; B-->D; C-->D;
साइडबार और चेतावनियाँ
यह एक साइडबार है।
sudo dmesg
चेतावनियाँ
टिप्पणी:
यह एक नोट है।सावधान:
पाठक को सावधानी से आगे बढ़ना चाहिए।चेतावनी:
चेतावनियाँ कुछ नुकसान की संभावना बताती हैं।सम्मिलन
टिप्पणी:
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप minikube की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं: