Kubernetes Basics
Kubernetes Basics
इस पृष्ठ के मूल लेखक हैं Jorge (उनके मूल पोस्ट को पढ़ें यहाँ)
वास्तुकला और मूल जानकारी
Kubernetes क्या करता है?
एक कंटेनर इंजन में कंटेनर/कंटेनर्स को चलाने की अनुमति देता है।
अनुसूची कंटेनरों को मिशन को अधिक कुशल बनाता है।
कंटेनरों को जीवित रखता है।
कंटेनर संचार की अनुमति देता है।
डिप्लॉयमेंट तकनीकों की अनुमति देता है।
जानकारी के वॉल्यूम का संभालन करता है।
वास्तुकला
नोड: पॉड या पॉड के साथ ऑपरेटिंग सिस्टम।
पॉड: एक कंटेनर या एकाधिक कंटेनर के चारों ओर लपेटने वाला। एक पॉड में केवल एक एप्लिकेशन होनी चाहिए (इसलिए सामान्यत: एक पॉड में केवल 1 कंटेनर चलता है)। पॉड कंटेनर प्रौद्योगिकी चलाने का तरीका है।
सेवा: प्रत्येक पॉड के पास नोड के आंतरिक आईपी पता होता है। हालांकि, इसे एक सेवा के माध्यम से भी उजागर किया जा सकता है। सेवा के पास भी एक आईपी पता होता है और इसका उद्देश्य पॉड्स के बीच संचार को बनाए रखना है, ताकि यदि कोई मर जाता है तो नया प्रतिस्थापन (एक विभिन्न आंतरिक आईपी के साथ) सेवा के समान आईपी में पहुंचने योग्य होगा। इसे आंतरिक या बाह्य रूप से कॉन्फ़िगर किया जा सकता है। सेवा जब बनाई जाती है तो आप प्रत्येक सेवा के एंडपॉइंट्स को चलाने के लिए
kubectl get endpoints
चला सकते हैं।क्यूबलेट: प्राथमिक नोड एजेंट। उस घटक का जो नोड और कुबेक्टल के बीच संचार स्थापित करता है, और केवल पॉड्स को चला सकता है (API सर्वर के माध्यम से)। क्यूबलेट उन कंटेनरों का प्रबंधन नहीं करता जो कुबरनेट्स द्वारा नहीं बनाए गए हों।
क्यूब-प्रॉक्सी: यह सेवा एपीसर्वर और नोड के बीच संचार (सेवाएं) का जिम्मेदार है। आईपीटेबल्स के लिए नोड है। अधिक अनुभवी उपयोगकर्ता अन्य विक्रेताओं से अन्य क्यूब-प्रॉक्सी स्थापित कर सकते हैं।
साइडकार कंटेनर: साइडकार कंटेनर मुख्य कंटेनर के साथ पॉड में चलने वाले कंटेनर हैं। यह साइडकार पैटर्न मौजूदा कंटेनरों की क्षमता को बढ़ाता है बिना उन्हें बदले। आजकल, हमें पता है कि हम कंटेनर प्रौद्योगिकी का उपयोग करके एप्लिकेशन कहां भी चलाने के लिए सभी आवश्यकताएं बांधने के लिए कंटेनर प्रौद्योगिकी का उपयोग करते हैं। एक कंटेनर केवल एक चीज करता है और वह चीज बहुत अच्छे से करता है।
मास्टर प्रक्रिया:
एपी सर्वर: उपयोगकर्ताओं और पॉड्स का मास्टर प्रक्रिया के साथ संवाद करने का तरीका है। केवल प्रमाणित अनुरोध को अनुमति देनी चाहिए।
स्केज्यूलर: स्केज्यूलिंग का तात्पर्य है सुनिश्चित करना कि पॉड्स को नोड्स से मिलाया जाए ताकि क्यूबलेट उन्हें चला सके। इसमें पर्याप्त बुद्धिमत्ता है कि कौन सा नोड अधिक उपलब्ध संसाधनों के साथ है और नए पॉड को उसे सौंपा जाए। ध्यान दें कि स्केज्यूलर नए पॉड्स शुरू नहीं करता, यह केवल नोड के अंदर चल रहे क्यूबलेट प्रक्रिया के साथ संवाद करता है, जो नए पॉड को लॉन्च करेगा।
क्यूब नियंत्रक प्रबंधक: यह संसाधनों जैसे कि रेप्लिका सेट्स या डिप्लॉयमेंट्स की जाँच करता है ताकि यदि, उदाहरण के लिए, सही संख्या के पॉड्स या नोड्स चल रहे हैं या नहीं। यदि कोई पॉड गायब है, तो यह नया शुरू करने के लिए स्केज्यूलर के साथ संवाद करेगा। यह प्रतिलिपि, टोकन और एपीआई की सेवाओं को नियंत्रित करता है।
etcd: डेटा संग्रहण, स्थायी, संगत और वितरित। कुबरनेट्स का डेटाबेस है और यहाँ पूरे क्लस्टर की स्थिति को रखता है (हर परिवर्तन यहाँ लॉग किया जाता है)। स्केज्यूलर या नियंत्रक प्रबंधक जैसे घटक जानने के लिए इस तिथि पर निर्भर करते हैं कि कौन से परिवर्तन हुए हैं (नोड्स के उपलब्ध संसाधन, चल रहे पॉड्स की संख्या...)
क्लाउड नियंत्रक प्रबंधक: यह विशेष नियंत्रक है जो फ्लो नियंत्रण और एप्लिकेशनों के लिए है, उदा: यदि आपके पास AWS या ओपनस्टैक में क्लस्टर हैं।
ध्यान दें कि क्योंकि कई नोड्स हो सकते हैं (कई पॉड्स चला रहे हो सकते हैं), इसके अलावा कई मास्टर प्रक्रियाएं भी हो सकती हैं जिनका एपी सर्वर लोड बैलेंस होता है और उनका etcd समकालिक होता है।
वॉल्यूम:
जब एक पॉड डेटा बनाता है जो पॉड गायब होने पर नष्ट नहीं होना चाहिए, तो उसे एक भौतिक वॉल्यूम में स्टोर किया जाना चाहिए। **कुबरनेट्स एक वॉल्यूम क
PKI बुनियादी संरचना - प्रमाणपत्र प्राधिकरण CA:
CA क्लस्टर के भीतर सभी प्रमाणपत्रों के लिए विश्वसनीय रूट है।
घटकों को एक-दूसरे को मान्य करने की अनुमति देता है।
सभी क्लस्टर प्रमाणपत्र CA द्वारा हस्ताक्षरित हैं।
ETCd का अपना प्रमाणपत्र है।
प्रकार:
एपीआई सर्टिफिकेट।
कुबलेट सर्टिफिकेट।
स्केज्यूलर सर्टिफिकेट।
मूल क्रियाएँ
Minikube
Minikube को पूरे कुबरनेटीज़ परिवेश को डिप्लॉय करने की आवश्यकता न होने पर कुबरनेटीज़ पर कुछ त्वरित परीक्षण करने के लिए उपयोग किया जा सकता है। यह मास्टर और नोड प्रक्रियाएँ एक मशीन में चलाएगा। Minikube नोड चलाने के लिए वर्चुअलबॉक्स का उपयोग करेगा। यहाँ देखें कैसे इसे इंस्टॉल करें.
Kubectl Basics
Kubectl
कुबरनेटीज़ क्लस्टर के लिए कमांड लाइन टूल है। यह मास्टर प्रक्रिया के एपीआई सर्वर के साथ संवाद स्थापित करता है ताकि कुबरनेटीज़ में कार्रवाई कर सके या डेटा के लिए पूछ सके।
मिनीक्यूब डैशबोर्ड
डैशबोर्ड आपको आसानी से दिखाता है कि मिनीक्यूब क्या चला रहा है, आप इसे एक्सेस करने के लिए URL यहाँ पा सकते हैं:
YAML कॉन्फ़िगरेशन फ़ाइल उदाहरण
प्रत्येक कॉन्फ़िगरेशन फ़ाइल में 3 भाग होते हैं: मेटाडेटा, विवरण (क्या लॉन्च करना है), स्थिति (वांछित स्थिति)। डिप्लॉयमेंट कॉन्फ़िगरेशन फ़ाइल के विवरण में, आप टेम्प्लेट पाएंगे जिसमें चलाने के लिए छवि को परिभाषित करने वाली एक नई कॉन्फ़िगरेशन संरचना होती है:
डिप्लॉयमेंट + सेवा का उदाहरण एक ही कॉन्फ़िगरेशन फ़ाइल में घोषित किया गया (यहाँ से यहाँ)
जैसा कि एक सेवा आम तौर पर एक डिप्लॉयमेंट से संबंधित होती है, इसे एक ही कॉन्फ़िगरेशन फ़ाइल में घोषित करना संभव है (इस कॉन्फ़िगरेशन में घोषित सेवा केवल आंतरिक रूप से पहुंची जा सकती है):
बाह्य सेवा कॉन्फ़िगरेशन का उदाहरण
यह सेवा बाह्य रूप से पहुंचने योग्य होगा ( nodePort
और type: LoadBlancer
विशेषताएँ जांचें):
यह टेस्टिंग के लिए उपयोगी है लेकिन प्रोडक्शन के लिए आपके पास केवल आंतरिक सेवाएं होनी चाहिए और एक इंग्रेस एप्लिकेशन को बाहर निकालने के लिए।
इंग्रेस कॉन्फ़िग फ़ाइल का उदाहरण
यह एप्लिकेशन को http://dashboard.com
में उभारेगा।
सीक्रेट्स कॉन्फ़िग फ़ाइल का उदाहरण
ध्यान दें कि पासवर्ड B64 में एन्कोड किए गए हैं (जो सुरक्षित नहीं है!)
ConfigMap का उदाहरण
ConfigMap वह कॉन्फ़िगरेशन है जो पॉड्स को दी जाती है ताकि वे यह जानें कि वे अन्य सेवाओं को कैसे ढूंढें और उनका उपयोग कैसे करें। इस मामले में, प्रत्येक पॉड यह जानेगा कि नाम mongodb-service
एक पॉड का पता है जिसके साथ वह संवाद कर सकता है (यह पॉड एक mongodb को क्रियान्वित कर रहा होगा):
फिर, डिप्लॉयमेंट कॉन्फ़िगरेशन के अंदर इस पते को निम्नलिखित तरीके से निर्दिष्ट किया जा सकता है ताकि यह पॉड के env में लोड हो।
वॉल्यूम कॉन्फ़िग का उदाहरण
आप https://gitlab.com/nanuchi/youtube-tutorial-series/-/tree/master/kubernetes-volumes में स्टोरेज कॉन्फ़िगरेशन yaml फ़ाइलों के विभिन्न उदाहरण पा सकते हैं। ध्यान दें कि वॉल्यूम नेमस्पेस के अंदर नहीं हैं
नेमस्पेस
कुबरनेटीज़ एक समान भौतिक क्लस्टर द्वारा समर्थित कई वर्चुअल क्लस्टर का समर्थन करता है। ये वर्चुअल क्लस्टर नेमस्पेस कहलाते हैं। ये उन वातावरणों के लिए डिज़ाइन किए गए हैं जिनमें कई उपयोगकर्ता विभिन्न टीमों या परियोजनाओं में फैले हुए हैं। कुछ से लेकर कुछ दस उपयोगकर्ताओं वाले क्लस्टर्स के लिए, आपको नेमस्पेस बनाने या सोचने की आवश्यकता नहीं होनी चाहिए। आपको केवल नेमस्पेस का उपयोग करना चाहिए ताकि कुबरनेटीज़ में डिप्लॉय किए गए प्रत्येक हिस्से को बेहतर नियंत्रण और संगठन प्राप्त हो।
नेमस्पेस नामों के लिए एक क्षेत्र प्रदान करते हैं। संसाधनों के नाम एक नेमस्पेस के भीतर अद्वितीय होने चाहिए, लेकिन नेमस्पेस के अलावा नहीं। नेमस्पेस एक-दूसरे के अंदर समाहित नहीं हो सकते और प्रत्येक कुबरनेटीज़ संसाधन केवल एक नेमस्पेस में हो सकता है।
अगर आप मिनीक्यूब का उपयोग कर रहे हैं तो डिफ़ॉल्ट रूप से 4 नेमस्पेस होते हैं:
kube-system: यह उपयोगकर्ताओं के लिए नहीं है और आपको इसे छूने की जरूरत नहीं है। यह मास्टर और kubectl प्रक्रियाओं के लिए है।
kube-public: सार्वजनिक रूप से पहुंचने योग्य डेटा। एक कॉन्फ़िगमैप शामिल है जिसमें क्लस्टर सूचना होती है।
kube-node-lease: नोड की उपलब्धता निर्धारित करता है।
default: उपयोगकर्ता द्वारा संसाधन बनाने के लिए उपयोग किया जाएगा नेमस्पेस।
ध्यान दें कि अधिकांश Kubernetes संसाधन (जैसे pods, services, replication controllers, और अन्य) किसी नेमस्पेस में होते हैं। हालांकि, अन्य संसाधन जैसे नेमस्पेस संसाधन और नोड्स और persistenVolumes जैसे निचले स्तर के संसाधन नेमस्पेस में नहीं होते हैं। देखने के लिए कौन से Kubernetes संसाधन नेमस्पेस में हैं और कौन नहीं:
आप उस संदर्भ में सभी आगामी kubectl कमांड्स के लिए नेमस्पेस को सेव कर सकते हैं।
हेल्म
हेल्म कुबरनेटीज के लिए पैकेज प्रबंधक है। यह यामल फ़ाइलों को पैकेज करने और उन्हें सार्वजनिक और निजी रिपॉजिटरी में वितरित करने की अनुमति देता है। इन पैकेजों को हेल्म चार्ट्स कहा जाता है।
कुबरनेट्स सीक्रेट्स
सीक्रेट एक ऑब्जेक्ट है जो संवेदनशील डेटा जैसे पासवर्ड, टोकन या कुंजी जैसी जानकारी को शामिल करता है। ऐसी जानकारी अन्यथा एक पॉड स्पष्टीकरण या एक छवि में डाली जा सकती है। उपयोगकर्ता सीक्रेट बना सकते हैं और सिस्टम भी सीक्रेट बनाता है। सीक्रेट ऑब्जेक्ट का नाम एक मान्य DNS सबडोमेन नाम होना चाहिए। आधिकारिक दस्तावेज़ीकरण यहाँ पढ़ें।
सीक्रेट्स निम्नलिखित चीजें हो सकती हैं:
एपीआई, एसएसएच कुंजी।
ओआथ टोकन्स।
क्रेडेंशियल्स, पासवर्ड (सादा पाठ या b64 + एन्क्रिप्शन)।
जानकारी या टिप्पणियाँ।
डेटाबेस कनेक्शन कोड, स्ट्रिंग्स…।
कुबरनेट्स में विभिन्न प्रकार के सीक्रेट्स होते हैं
बिल्टइन प्रकार | उपयोग |
---|---|
Opaque | अनियमित उपयोगकर्ता-निर्धारित डेटा (डिफ़ॉल्ट) |
kubernetes.io/service-account-token | सेवा खाता टोकन |
kubernetes.io/dockercfg | सिरियलाइज्ड ~/.dockercfg फ़ाइल |
kubernetes.io/dockerconfigjson | सिरियलाइज्ड ~/.docker/config.json फ़ाइल |
kubernetes.io/basic-auth | बुनियादी प्रमाणीकरण के लिए क्रेडेंशियल्स |
kubernetes.io/ssh-auth | एसएसएच प्रमाणीकरण के लिए क्रेडेंशियल्स |
kubernetes.io/tls | एक टीएलएस क्लाइंट या सर्वर के लिए डेटा |
bootstrap.kubernetes.io/token | बूटस्ट्रैप टोकन डेटा |
ओपेक प्रकार डिफ़ॉल्ट है, उपयोगकर्ताओं द्वारा परिभाषित साधारण की-मानक जोड़-मानक होता है।
सीक्रेट्स कैसे काम करते हैं:
निम्नलिखित कॉन्फ़िगरेशन फ़ाइल एक सीक्रेट को mysecret
नाम से परिभाषित करती है जिसमें 2 की-मानक जोड़े हैं username: YWRtaW4=
और password: MWYyZDFlMmU2N2Rm
। यह भी एक पॉड को secretpod
परिभाषित करती है जिसमें username
और password
को mysecret
में परिभाषित SECRET_USERNAME
और SECRET_PASSWOR
वातावरण चरों में उजागर किया जाएगा। यह भी username
सीक्रेट को mysecret
में माउंट करेगा पथ /etc/foo/my-group/my-username
में 0640
अनुमतियों के साथ।
etcd में रहस्य
etcd एक संगत और उच्च उपलब्ध कुंजी-मूल्य संग्रह है जो सभी क्लस्टर डेटा के लिए कुबरनेट्स बैकिंग स्टोर के रूप में उपयोग किया जाता है। हम etcd में संग्रहित रहस्यों तक पहुंचेंगे:
तुम्हें सर्टिफिकेट्स, कीज और यूआरएल को एफएस में कहाँ स्थित हैं, वहाँ दिखाई देगा। एक बार जब तुम इसे प्राप्त कर लो, तो तुम etcd से कनेक्ट कर सकोगे।
जब आप संचार स्थापित कर लेते हैं तो आप रहस्य प्राप्त कर सकते हैं:
ETCD में एन्क्रिप्शन जोड़ना
डिफ़ॉल्ट रूप से सभी रहस्य etcd में सादा पाठ में स्टोर किए जाते हैं जब तक आप एक एन्क्रिप्शन परत लागू न करें। निम्नलिखित उदाहरण https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/ पर आधारित हैं
उसके बाद, आपको kube-apiserver
पर --encryption-provider-config
फ्लैग सेट करने की आवश्यकता है ताकि बनाए गए कॉन्फ़िग फ़ाइल के स्थान को इंगित करें। आप /etc/kubernetes/manifest/kube-apiserver.yaml
को संशोधित कर सकते हैं और निम्नलिखित लाइन जोड़ सकते हैं:
संदर्भ माउंट में नीचे स्क्रॉल करें:
संदूषणों में नीचे जाएं hostPath:
डेटा एन्क्रिप्टेड होने की सत्यापन
डेटा etcd में लिखा जाता है जब यह एन्क्रिप्टेड होता है। अपने kube-apiserver
को पुनः आरंभ करने के बाद, किसी भी नए बनाए गए या अपडेट किए गए सीक्रेट को संग्रहित करते समय इसे एन्क्रिप्ट किया जाना चाहिए। जांचने के लिए, आप etcdctl
कमांड लाइन प्रोग्राम का उपयोग करके अपने सीक्रेट की सामग्री प्राप्त कर सकते हैं।
default
नेमस्पेस मेंsecret1
नामक नया सीक्रेट बनाएं:
Etcdctl कमांडलाइन का उपयोग करके, etcd से उस सीक्रेट को पढ़ें:
ETCDCTL_API=3 etcdctl get /registry/secrets/default/secret1 [...] | hexdump -C
जहां [...]
एटीसीडी सर्वर से कनेक्ट करने के लिए अतिरिक्त तर्क होने चाहिए। 3. सत्यापित करें कि संग्रहित सीक्रेट k8s:enc:aescbc:v1:
के साथ प्रीफिक्स किया गया है जो इसका सुनिश्चित करता है कि aescbc
प्रदाता ने परिणामी डेटा को एन्क्रिप्ट किया है। 4. सत्यापित करें कि सीक्रेट API के माध्यम से पुनः प्राप्त करने पर सही ढंग से डिक्रिप्ट होता है:
mykey: bXlkYXRh
के समान होना चाहिए, mydata को एन्कोड किया गया है, सीक्रेट को पूरी तरह से डिकोड करने के लिए एक सीक्रेट को डिकोड करना देखें।
क्योंकि सीक्रेट लेखन पर एन्क्रिप्टेड होते हैं, सीक्रेट पर अपडेट करने से उस सामग्री को एन्क्रिप्ट किया जाएगा:
अंतिम सुझाव:
प्रयास करें कि आप सीक्रेट्स को एफएस में न रखें, उन्हें अन्य स्थानों से प्राप्त करें।
अपने सीक्रेट्स को अधिक सुरक्षा देने के लिए https://www.vaultproject.io/ की जाँच करें।
संदर्भ
Last updated