1 - हेलो मिनीक्यूब
यह ट्यूटोरियल आपको मिनिक्यूब का उपयोग करते हुए कुबेरनेट्स पर एक सैम्पल ऐप चलाने का तरीका दिखाता है। ट्यूटोरियल एक कंटेनर छवि प्रदान करता है जो सभी अनुरोधों को प्रतिध्वनित करने के लिए NGINX का उपयोग करता है।
उद्देश्य
- मिनीक्यूब में एक नमूना एप्लीकेशन डेप्लॉय करें।
- ऐप को चलाएं।
- एप्लिकेशन लॉग देखें।
शुरू करने से पहले
यह ट्यूटोरियल मानता है कि आपने पहले ही मिनीक्यूब
सेट कर लिया है।
इंस्टॉलेशन निर्देशों के लिए मिनीक्यूब स्टार्ट में Step 1 देखें।
टिप्पणी:
केवल Step 1, इंस्टालेशन में दिए गए निर्देशों का पालन करें। बाकी निर्देश इस पेज पर कवर किया गया है।आपको kubectl
भी इंस्टॉल करना होगा। स्थापाना निर्देश के लिए Kubectl स्थापित करें देखें।
एक मिनीक्यूब क्लस्टर बनाएं
कुबेरनेट्स डैशबोर्ड खोलें:
कुबेरनेट्स डैशबोर्ड खोलें। आप इसे दो अलग-अलग तरीकों से कर सकते हैं:
एक नया टर्मिनल खोलें, और चलाएँ:
# एक नया टर्मिनल प्रारंभ करें, और इस कमांड को चालू छोड़ दें।
minikube dashboard
अब, उस टर्मिनल पर वापस जाएँ जहाँ आपने minikube start
चलाया था।
टिप्पणी:
dashboard
कमांड डैशबोर्ड ऐड-ऑन को इस्तेमाल के लिए तैयार करता है और प्रॉक्सी को डिफ़ॉल्ट वेब ब्राउज़र में खोलता है।
आप डैशबोर्ड पर कुबेरनेट्स संसाधन जैसे डेप्लॉयमेंट और सर्विस बना सकते हैं।
आमतौर पर, डैशबोर्ड केवल आंतरिक कुबेरनेट्स वर्चुअल नेटवर्क के भीतर से ही पहुँचा जा सकता है।
डैशबोर्ड को कुबेरनेट्स वर्चुअल नेटवर्क के बाहर से एक्सेस करने योग्य बनाने के लिए dashboard
कमांड एक अस्थायी प्रॉक्सी बनाता है।
प्रॉक्सी को रोकने और प्रक्रिया से बाहर निकलने के लिए Ctrl+C
का प्रयोग करें।
कमांड से बाहर निकलने के बाद, डैशबोर्ड कुबेरनेट्स क्लस्टर में चलता रहता है।
आप डैशबोर्ड तक पहुंचने और प्रॉक्सी बनाने के लिए फिर से dashboard
कमांड चला सकते हैं।
यदि आप वेब ब्राउज़र नहीं खोलना चाहते हैं, तो URL प्राप्त करने के लिए url फ़्लैग के साथ dashboard
कमांड चलाएँ:
अब, उस टर्मिनल पर वापस जाएँ जहाँ आपने मिनीक्यूब स्टार्ट
चलाया था।
डेप्लॉयमेंट बनाएँ
कुबेरनेट्स पॉड एक या अधिक कंटेनरों का एक समूह है,
जो प्रशासन और नेटवर्किंग के उद्देश्यों के लिए एक साथ बंधे होते हैं। इस ट्यूटोरियल के
पॉड में केवल एक कंटेनर है। कुबेरनेट्स
डेप्लॉयमेंट आपके पॉड के स्वास्थ्य की
जाँच करता है और यदि पॉड बंद हो जाता है तो पॉड के कंटेनर को पुनः आरंभ करता है।
पॉड्स के निर्माण और स्केलिंग को प्रबंधित करने के लिए डेप्लॉयमेंट अनुशंसित तरीका है।
पॉड को प्रबंधित करने वाला डेप्लॉयमेंट बनाने के लिए kubectl create
कमांड का उपयोग करें। पॉड
प्रदान की गई डॉकर इमेज के आधार पर एक कंटेनर चलाता है।
kubectl create deployment hello-node --image=registry.k8s.io/echoserver:1.4
डेप्लॉयमेंट देखें:
आउटपुट कुछ इस समान होगा:
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 1/1 1 1 1m
पॉड देखें:
आउटपुट कुछ इस समान होगा:
NAME READY STATUS RESTARTS AGE
hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m
क्लस्टर इवेंट देखें:
kubectl
कॉन्फ़िगरेशन देखें:
टिप्पणी:
kubectl
कमांड के बारे में अधिक जानकारी के लिए
kubectl अवलोकन देखें।
सर्विस बनाएं
आमतौर पर, पॉड कुबेरनेट्स क्लस्टर के भीतर अपने आंतरिक IP पते से ही पहुँचा जा सकता है।
hello-node
कंटेनर को कुबेरनेट्स वर्चुअल नेटवर्क के
बाहर से सुलभ बनाने के लिए,पॉड को
कुबेरनेट्स सर्विस के रूप में बेनकाब करना होगा।
kubectl expose
कमांड का उपयोग करके पॉड को सार्वजनिक इंटरनेट पर एक्सपोज़ करें:
kubectl expose deployment hello-node --type=LoadBalancer --port=8080
--type=LoadBalancer
फ्लैग इंगित करता है कि आप क्लस्टर के बाहर
अपने सर्विस को प्रदर्शित करना चाहते हैं।
इमेज के अंदर एप्लिकेशन कोड registry.k8s.io/echoserver
केवल TCP पोर्ट 8080 पर सुनता है।
यदि आपने किसी भिन्न पोर्ट को एक्सपोज़ करने के लिए kubectl एक्सपोज़
का उपयोग किया है, तो क्लाइंट उस अन्य पोर्ट से जुड़ नहीं सकते।
आपके द्वारा बनाई गई सर्विस देखें:
आउटपुट कुछ इस समान होगा:
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) का एक समूह
शामिल है जिसे स्थानीय कुबेरनेट्स वातावरण में सक्षम, अक्षम और खोला जा सकता है।
वर्तमान में उपलब्ध ऐडऑन की सूची:
आउटपुट कुछ इस समान होगा:
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) को बंद करें:
वैकल्पिक रूप से, मिनिक्यूब VM को डिलीट करें:
आगे क्या है
2.1 - एक क्लस्टर बनाएं
कुबेरनेट्स क्लस्टर के बारे में जानें और मिनिक्यूब का उपयोग करके एक सरल क्लस्टर बनाएं।
3 - माइक्रोप्रोफाइल, कॉन्फिगमैप्स और सीक्रेट्स का उपयोग करके कॉन्फिगरेशन को बाह्यीकृत करना
इस ट्यूटोरियल में आप सीखेंगे कि अपने माइक्रोसर्विस के कॉन्फ़िगरेशन को कैसे और क्यों बाह्यीकृत करना है।
विशेष रूप से, आप सीखेंगे कि एनवायरमेंट वेरिएबल सेट करने के लिए कुबेरनेट्स कॉन्फिगमैप्स और सीक्रेट्स का
उपयोग कैसे करें और फिर माइक्रोप्रोफाइल कॉन्फिग का उपयोग करके उनका उपभोग करें।
शुरू करने से पहले
कुबेरनेट्स कॉन्फ़िगमैप्स और सीक्रेट बनाना
कुबेरनेट्स में डॉकर कंटेनर के लिए एनवायरमेंट वेरिएबल सेट करने के कई तरीके हैं, जिनमें शामिल हैं: Dockerfile,
kubernetes.yml, Kubernetes ConfigMaps, और Kubernetes Secrets। ट्यूटोरियल में, आप सीखेंगे कि अपने
एनवायरमेंट वेरिएबल सेट करने के लिए कुबेरनेट्स कॉन्फिगमैप्स और कुबेरनेट्स सीक्रेट्स का उपयोग कैसे करें, जिनके वैल्यू
आपके माइक्रोसर्विसेज में इंजेक्ट किए जाएंगे। कॉन्फिगमैप्स और सीक्रेट्स का उपयोग करने का एक लाभ यह है कि
उन्हें कई कंटेनरों में फिर से उपयोग किया जा सकता है, जिसमें विभिन्न कंटेनरों के लिए अलग-अलग एनवायरमेंट वेरिएबल
को सौंपा जाना भी शामिल है।
कॉन्फिगमैप्स एपीआई ऑब्जेक्ट हैं जो गैर-गोपनीय key-value जोड़े को संग्रहीत करते हैं।
इंटरएक्टिव ट्यूटोरियल में आप सीखेंगे कि एप्लिकेशन के नाम को संग्रहीत करने के लिए
कॉन्फिगमैप का उपयोग कैसे करना है। कॉन्फ़िगमैप्स के संबंध में अधिक जानकारी के लिए,
आप दस्तावेज़ यहाँ पा सकते हैं)।
हालाँकि सीक्रेट्स का उपयोग भी key-value जोड़े को संग्रहीत करने के लिए किया जाता है,
वे कॉन्फिगमैप्स से भिन्न होते हैं क्योंकि वे गोपनीय/संवेदनशील जानकारी के लिए होते हैं और Base64 एन्कोडिंग
का उपयोग करके संग्रहीत होते हैं। यह सीक्रेट को क्रेडेंशियल्स, keys और टोकन जैसी चीज़ों को संग्रहीत करने
के लिए उपयुक्त विकल्प बनाता है, जिनमें से पहला काम आप इंटरैक्टिव ट्यूटोरियल में करेंगे। सीक्रेट के बारे
में अधिक जानकारी के लिए, आप दस्तावेज़ यहाँ पा सकते हैं।
कोड से कॉन्फ़िग को बाह्यीकृत करना
बाह्यीकृत एप्लिकेशन कॉन्फ़िगरेशन उपयोगी है क्योंकि कॉन्फ़िगरेशन आमतौर पर आपके वातावरण के आधार पर
बदलता है। इसे पूरा करने के लिए, हम Java के Contexts and Dependency Injection (CDI) और माइक्रोप्रोफाइल
कॉन्फ़िगरेशन का उपयोग करेंगे। माइक्रोप्रोफाइल कॉन्फिग माइक्रोप्रोफाइल की एक विशेषता है, जो क्लाउड-नेटिव
माइक्रोसर्विसेज को विकसित करने और डेप्लॉय करने के लिए open Java प्रौद्योगिकियों का एक सेट है।
सीडीआई (CDI) एक स्टैंडर्ड तरीका है जो एप्लिकेशन में डिपेंडेंसी इंजेक्शन (dependency injection) को आसान बनाता है।
इसकी मदद से, एप्लिकेशन को अलग-अलग हिस्सों (beans) से मिलाकर बनाया जा सकता है जो एक-दूसरे से कम जुड़े होते हैं।
इससे एप्लिकेशन को बनाना और सुधारना आसान हो जाता है। माइक्रोप्रोफाइल कॉन्फिग ऐप्स और माइक्रोसर्विसेज को एप्लिकेशन,
रनटाइम और एनवायरमेंट सहित विभिन्न स्रोतों से कॉन्फिग के गुण प्राप्त करने का एक मानक तरीका प्रदान करता है। स्रोत की
परिभाषित प्राथमिकता के आधार पर, गुणों को स्वचालित रूप से गुणों के एक सेट में संयोजित किया जाता है जिसे
एप्लिकेशन एपीआई के माध्यम से एक्सेस कर सकता है। साथ में, सीडीआई और माइक्रोप्रोफाइल का उपयोग कुबेरनेट्स
कॉन्फिगमैप्स और सीक्रेट्स से बाहरी रूप से प्रदान की गई संपत्तियों को पुनः प्राप्त करने और आपके एप्लिकेशन कोड
में इंजेक्ट करने के लिए इंटरएक्टिव ट्यूटोरियल में किया जाएगा।
कई ओपन सोर्स फ्रेमवर्क और रनटाइम माइक्रोप्रोफाइल कॉन्फ़िगरेशन को लागू और समर्थ करते हैं। पूरे इंटरैक्टिव
ट्यूटोरियल के दौरान, आप ओपन लिबर्टी का उपयोग करेंगे, जो क्लाउड-नेटिव ऐप्स और माइक्रोसर्विसेज को बनाने
और चलाने के लिए एक फ्लेक्सिबल ओपन-सोर्स Java रनटाइम है। हालाँकि, इसके बजाय किसी भी माइक्रोप्रोफाइल
संगत रनटाइम का उपयोग किया जा सकता है।
उद्देश्य
- एक कुबेरनेट्स कॉन्फ़िगमैप और सीक्रेट बनाएं
- माइक्रोप्रोफाइल कॉन्फ़िगरेशन का उपयोग करके माइक्रोसर्विस कॉन्फ़िगरेशन इंजेक्ट करें
उदाहरण: माइक्रोप्रोफाइल, कॉन्फिगमैप्स और सीक्रेट्स का उपयोग करके कॉन्फिगरेशन को बाह्यीकृत करना
इंटरैक्टिव ट्यूटोरियल प्रारंभ करें