Kubernetes Basics
Kubernetes Basics
इस पृष्ठ के मूल लेखक हैं जोर्ज (उनके मूल पोस्ट को पढ़ें यहां)
Architecture & Basics
Kubernetes क्या करता है?
कंटेनर/कंटेनरों को कंटेनर इंजन में चलाने की अनुमति देता है।
समय-सारणी कंटेनरों को कार्यक्षम बनाती है।
कंटेनरों को जीवित रखता है।
कंटेनर संचार की अनुमति देता है।
डिप्लॉयमेंट तकनीकों की अनुमति देता है।
जानकारी के वॉल्यूम को संभालता है।
Architecture
नोड: पॉड या पॉड के साथ संचालित ऑपरेटिंग सिस्टम।
पॉड: एक कंटेनर या एकाधिक कंटेनर के चारों ओर एक लपेट में। एक पॉड में केवल एक एप्लिकेशन होनी चाहिए (इसलिए आमतौर पर, एक पॉड में केवल 1 कंटेनर चलता है)। पॉड कुबरनेटीज़ कंटेनर प्रौद्योगिकी को चलाने का तरीका है।
सेवा: प्रत्येक पॉड के पास एक आंतरिक आईपी पता होता है जो नोड के आंतरिक सीमा से होता है। हालांकि, इसे एक सेवा के माध्यम से भी उजागर किया जा सकता है। सेवा के पास भी एक आईपी पता होता है और इसका उद्देश्य पॉड के बीच संचार को बनाए रखना है, इसलिए यदि कोई एक मर जाता है तो नया प्रतिस्थापन (एक अलग आंतरिक आईपी के साथ) पहुंचयोग्य होगा सेवा के वही आईपी पते में प्रदर्शित। इसे आंतरिक या बाहरी रूप से कॉन्फ़िगर किया जा सकता है। सेवा एकदिवसीय होती है जब 2 पॉड सेवा से जुड़े होते हैं के रूप में लोड बैलेंसर के रूप में कार्य करती है। जब एक सेवा बनाया जाता है, तो प्रत्येक सेवा के एंडपॉइंट्स को खोजने के लिए
kubectl get endpoints
चलाएंक्यूबलेट: प्राथमिक नोड एजेंट। यह कंपोनेंट नोड और कुबेक्टल के बीच संचार स्थापित करता है, और केवल पॉड को चला सकता है (API सर्वर के माध्यम से)। क्यूबलेट कंटेनर्स का प्रबंधन नहीं करता है जो कुबरनेटीज़ द्वारा नहीं बनाए गए हैं।
क्यूब-प्रॉक्सी: यह सेवा आपस में संचार (सेवाएं) के लिए जिम्मेदार है। नोड के लिए IPtables का आधार है। अधिक अनुभवी उपयोगकर्ता अन्य विक्रेताओं से अन्य क्यूब-प्रॉक्सी स्थापित कर सकते हैं।
साइडकार कंटेनर: साइडकार कंटेनर मुख्य कंटेनर के साथ पॉड में चलने वाले कंटेनर हैं। यह साइडकार पैटर्न मौजूदा क
PKI इंफ्रास्ट्रक्चर - प्रमाणपत्र प्राधिकरण CA:
CA क्लस्टर के भीतर सभी प्रमाणपत्रों के लिए विश्वसनीय रूप से जड़ है।
घटकों को एक दूसरे को मान्य करने की अनुमति देता है।
सभी क्लस्टर प्रमाणपत्र CA द्वारा हस्ताक्षरित होते हैं।
ETCd का अपना प्रमाणपत्र होता है।
प्रकार:
apiserver प्रमाणपत्र।
kubelet प्रमाणपत्र।
scheduler प्रमाणपत्र।
मूल कार्रवाई
Minikube
Minikube को पूरे क्लस्टर के बिना कुबरनेटीज़ पर कुछ त्वरित परीक्षण करने के लिए उपयोग किया जा सकता है। यह मास्टर और नोड प्रक्रियाएं एक मशीन में चलाएगा। Minikube नोड चलाने के लिए वर्चुअलबॉक्स का उपयोग करेगा। यहां देखें कि इसे कैसे स्थापित करें।
Kubectl मूलभूत
Kubectl
कुबरनेटीज़ क्लस्टर के लिए कमांड लाइन टूल है। यह कुबरनेटीज़ में कार्रवाई करने या डेटा के लिए डेटा के लिए मास्टर प्रक्रिया के एपीआई सर्वर के साथ संवाद करता है।
मिनिक्यूब डैशबोर्ड
डैशबोर्ड आपको आसानी से दिखाता है कि मिनिक्यूब क्या चल रहा है, आप इसे एक्सेस करने के लिए URL यहां ढूंढ सकते हैं:
YAML कॉन्फ़िगरेशन फ़ाइल उदाहरण
प्रत्येक कॉन्फ़िगरेशन फ़ाइल में 3 भाग होते हैं: मेटाडेटा, स्पष्टीकरण (क्या चालू करना है), स्थिति (वांछित स्थिति)। डिप्लॉयमेंट कॉन्फ़िगरेशन फ़ाइल के स्पष्टीकरण में, चलाने के लिए छवि को परिभाषित करने वाली एक नई कॉन्फ़िगरेशन संरचना के साथ प्रारूप पाया जा सकता है:
एक डिप्लॉयमेंट + सेवा का उदाहरण एक ही कॉन्फ़िगरेशन फ़ाइल में घोषित किया गया है (यहां से) यहां)
एक सेवा आमतौर पर एक डिप्लॉयमेंट से संबंधित होती है, इसलिए एक ही कॉन्फ़िगरेशन फ़ाइल में दोनों को घोषित किया जा सकता है (इस कॉन्फ़िगरेशन में घोषित सेवा केवल आंतरिक रूप से पहुँचने योग्य है):
बाहरी सेवा कॉन्फ़िग का उदाहरण
यह सेवा बाहर से पहुंचने योग्य होगी (जांचें nodePort
और type: LoadBalancer
गुणधर्म):
यह टेस्टिंग के लिए उपयोगी है, लेकिन प्रोडक्शन के लिए आपके पास केवल आंतरिक सेवाएं और एक इंग्रेस होना चाहिए जो एप्लिकेशन को उभारेगा।
Ingress कॉन्फ़िग फ़ाइल का उदाहरण
इससे एप्लिकेशन को http://dashboard.com
में उभारा जाएगा।
सीक्रेट्स कॉन्फ़िग फ़ाइल का उदाहरण
ध्यान दें कि पासवर्ड B64 में कोडिंग की गई है (जो सुरक्षित नहीं है!)
ConfigMap का उदाहरण
ConfigMap पॉड्स को यह जानने के लिए दिया जाता है कि वे अन्य सेवाओं को कैसे ढूंढ़ें और उनका उपयोग कैसे करें। इस मामले में, प्रत्येक पॉड जानेगा कि mongodb-service
नाम का पॉड एक पॉड है जिसके साथ वे संवाद कर सकते हैं (यह पॉड mongodb को निष्पादित कर रहा होगा):
तो, एक डिप्लॉयमेंट कॉन्फ़िग के अंदर इस पते को निम्नलिखित तरीके से निर्दिष्ट किया जा सकता है ताकि यह पॉड के env में लोड हो सके:
वॉल्यूम कॉन्फ़िग का उदाहरण
आप https://gitlab.com/nanuchi/youtube-tutorial-series/-/tree/master/kubernetes-volumes में स्टोरेज कॉन्फ़िगरेशन yaml फ़ाइलों के विभिन्न उदाहरण ढूंढ सकते हैं। ध्यान दें कि वॉल्यूम नेमस्पेस के अंदर नहीं हैं
नेमस्पेस
कुबरनेटीज़ एक ही भौतिक क्लस्टर के समर्थित एकाधिक वर्चुअल क्लस्टर का समर्थन करता है। इन वर्चुअल क्लस्टर को नेमस्पेस कहा जाता है। ये विभिन्न उपयोगकर्ताओं के बीच फैले हुए कई टीम या परियोजनाओं वाले वातावरण में उपयोग के लिए हैं। कुछ से लेकर दसों उपयोगकर्ताओं वाले क्लस्टर के लिए, आपको नेमस्पेस बनाने या सोचने की आवश्यकता नहीं होगी। आपको केवल नेमस्पेस का उपयोग करना चाहिए ताकि कुबरनेटीज़ में डिप्लॉय किए गए प्रत्येक अनुपात के हर हिस्से को बेहतर नियंत्रण और संगठन कर सकें।
नेमस्पेस नामों के लिए एक स्कोप प्रदान करते हैं। संसाधनों के नाम नेमस्पेस के भीतर अद्वितीय होने चाहिए, लेकिन नेमस्पेस के अलग-अलग होने चाहिए। नेमस्पेस एक-दूसरे के अंदर समूहीकृत नहीं हो सकते हैं और प्रत्येक कुबरनेटीज़ संसाधन केवल एक नेमस्पेस में हो सकता है।
यदि आप minikube का उपयोग कर रहे हैं तो डिफ़ॉल्ट रूप से 4 नेमस्पेस होते हैं:
kube-system: इसका उपयोग उपयोगकर्ताओं द्वारा नहीं होता है और आपको इसे छूने की आवश्यकता नहीं है। यह मास्टर और kubectl प्रक्रियाओं के लिए होता है।
kube-public: सार्वजनिक रूप से पहुंचने योग्य डेटा। इसमें एक कॉन्फ़िगमैप होता है जिसमें क्लस्टर सूचना होती है।
kube-node-lease: एक नोड की उपलब्धता निर्धारित करता है।
default: उपयोगकर्ता उपकरण बनाने के लिए उपयोग करने वाला नेमस्पेस।
ध्यान दें कि अधिकांश Kubernetes संसाधन (जैसे pods, services, replication controllers और अन्य) किसी नेमस्पेस में होते हैं। हालांकि, नेमस्पेस संसाधन और नोड्स और परिस्थितिगत वॉल्यूम जैसे निम्न स्तरीय संसाधन नेमस्पेस में नहीं होते हैं। देखने के लिए कि कौन से Kubernetes संसाधन नेमस्पेस में हैं और कौन नहीं हैं:
आप उस संदर्भ में सभी आगामी kubectl कमांड के लिए नेमस्पेस को सहेज सकते हैं।
हेल्म
हेल्म कुबरनेटीज के लिए पैकेज प्रबंधक है। इसकी मदद से YAML फ़ाइलों को पैकेज करके उन्हें सार्वजनिक और निजी रिपॉजिटरी में वितरित किया जा सकता है। इन पैकेज को हेल्म चार्ट कहा जाता है।
Helm भी एक टेम्पलेट इंजन है जो चर फ़ाइल उत्पन्न करने की अनुमति देता है जिसमें चर होते हैं:
कुबरनेट्स सीक्रेट्स
सीक्रेट एक ऑब्जेक्ट है जो संवेदनशील डेटा जैसे पासवर्ड, टोकन या कुंजी को संग्रहित करता है। ऐसी जानकारी अन्यथा पॉड निर्देशिका या छवि में डाली जा सकती है। उपयोगकर्ता सीक्रेट बना सकते हैं और सिस्टम भी सीक्रेट बनाता है। सीक्रेट ऑब्जेक्ट का नाम एक मान्य DNS सबडोमेन नाम होना चाहिए। यहां पढ़ें आधिकारिक दस्तावेज़ीकरण।
सीक्रेट्स निम्नलिखित हो सकते हैं:
एपीआई, एसएसएच कुंजी।
ओआथ टोकन।
क्रेडेंशियल, पासवर्ड (सादा पाठ या b64 + एन्क्रिप्शन)।
जानकारी या टिप्पणियाँ।
डेटाबेस कनेक्शन कोड, स्ट्रिंग ...।
कुबरनेट्स में विभिन्न प्रकार के सीक्रेट्स होते हैं
बिल्टइन प्रकार | उपयोग |
---|---|
अनचाहे | विशेषज्ञ निर्धारित डेटा (डिफ़ॉल्ट) |
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
नामक एक पॉड परिभाषित करती है जिसमें mysecret
में परिभाषित username
और password
को वातावरण चरों SECRET_USERNAME
और SECRET_PASSWOR
में उजागर किया जाएगा। यह भी username
सीक्रेट को mysecret
में पथ /etc/foo/my-group/my-username
पर 0640
अनुमतियों के साथ माउंट करेगा।
etcd में रहस्यों का पता लगाएं
etcd एक सतत और उच्च उपलब्धता वाला कुंजी-मान-संग्रह है जो सभी क्लस्टर डेटा के लिए Kubernetes के बैकिंग स्टोर के रूप में उपयोग किया जाता है। चलिए etcd में संग्रहित रहस्यों तक पहुंचें:
आपको FS में सर्टिफिकेट, की और URL के स्थान का पता चलेगा। इसे प्राप्त करने के बाद, आप 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
जहां [...]
etcd सर्वर से कनेक्ट करने के लिए अतिरिक्त आर्ग्यूमेंट होने चाहिए। 3. सत्यापित करें कि संग्रहीत सीक्रेट k8s:enc:aescbc:v1:
से प्रारंभ होता है, जो इसका संकेत देता है कि aescbc
प्रदाता ने परिणामस्वरूप डेटा को एन्क्रिप्ट किया है। 4. एपीआई के माध्यम से प्राप्त करने पर सीक्रेट सही ढंग से डिक्रिप्ट हो रहा है, इसे सत्यापित करें:
mykey: bXlkYXRh
के समान होना चाहिए, mydata कोडिंग है, सीक्रेट को पूरी तरह से डिकोड करने के लिए एक सीक्रेट को डिकोड करना देखें।
क्योंकि सीक्रेट्स लिखने पर एन्क्रिप्टेड होते हैं, सीक्रेट पर अपडेट करने से उस सामग्री को एन्क्रिप्ट किया जाएगा:
अंतिम सुझाव:
कोशिश करें कि आप सीक्रेट्स को एफएस में न रखें, उन्हें अन्य स्थानों से प्राप्त करें।
https://www.vaultproject.io/ पर जाएं और अपने सीक्रेट्स को अधिक सुरक्षा देने के लिए जांचें।
संदर्भ
Last updated