सबसे छोटी संभव, सह-स्थित कार्यभार इकाई को डिप्लॉय करें।
→`Pod` संसाधन को परिभाषित करें। पॉड्स में एक या एक से अधिक कंटेनर हो सकते हैं जो नेटवर्क और स्टोरेज साझा करते हैं।
क्यों: Pod कुबेरनेट्स में शेड्यूलिंग की एटॉमिक इकाई है। कंटेनरों को हमेशा एक Pod के भीतर डिप्लॉय किया जाता है।
संदर्भ↗
सुनिश्चित करें कि क्लस्टर की स्थिति लगातार वांछित स्थिति से मेल खाती रहे।
→`kube-controller-manager` पर निर्भर रहें। यह कंट्रोल लूप चलाता है जो संसाधनों (जैसे, ReplicaSets, Deployments) की निगरानी करता है और अंतरों का समाधान करता है।
क्यों: यह मूल घोषणात्मक, स्वयं-ठीक होने वाली प्रणाली है। यदि किसी ReplicaSet द्वारा प्रबंधित कोई Pod बंद हो जाता है, तो कंट्रोलर उसे स्वचालित रूप से बदल देता है।
नए बनाए गए Pods को स्वचालित रूप से सबसे उपयुक्त वर्कर नोड पर असाइन करें।
→`kube-scheduler` पर निर्भर रहें। यह Pod की आवश्यकताओं (जैसे, रिसोर्स रिक्वेस्ट) के आधार पर नोड्स को फ़िल्टर करता है और सबसे उपयुक्त का चयन करने के लिए उन्हें स्कोर करता है।
क्यों: शेड्यूलर नीति, एफिनिटी और उपलब्धता के आधार पर प्लेसमेंट निर्णय लेता है, जिससे उपयोगकर्ता से नोड चयन को अमूर्त करता है।
सुनिश्चित करें कि Pods में निर्दिष्ट कंटेनर दिए गए वर्कर नोड पर चल रहे हैं और स्वस्थ हैं।
→`kubelet` एजेंट हर नोड पर चलता है, API सर्वर के साथ संचार करता है, और कंटेनर रनटाइम के माध्यम से कंटेनर जीवनचक्र (शुरू करना, बंद करना, स्वास्थ्य जांच) का प्रबंधन करता है।
क्यों: Kubelet कंट्रोल प्लेन और वर्कर नोड के बीच की कड़ी है; यह Pod स्पेसिफिकेशन्स को निष्पादित करता है।
कुबेरनेट्स क्लस्टर की पूरी स्थिति और कॉन्फ़िगरेशन को मज़बूती से बनाए रखें।
→`etcd` का उपयोग करें, जो एक सुसंगत और अत्यधिक उपलब्ध कुंजी-मूल्य स्टोर है। यह क्लस्टर के लिए सत्य के एकमात्र स्रोत के रूप में कार्य करता है।
क्यों: सभी क्लस्टर ऑब्जेक्ट्स (Pods, Services, आदि) etcd में संग्रहीत होते हैं। केवल API सर्वर सीधे इसके साथ संचार करता है।
कुबेरनेट्स सेवाओं के माध्यम से संचार सक्षम करने के लिए प्रत्येक नोड पर नेटवर्क नियम लागू करें।
→प्रत्येक नोड पर `kube-proxy` घटक नेटवर्क नियमों (जैसे, iptables, IPVS) को बनाए रखता है जो Service IP से सही बैकएंड Pods पर ट्रैफ़िक अग्रेषित करते हैं।
क्यों: Kube-proxy Service एब्स्ट्रैक्शन के पीछे का कार्यान्वयन विवरण है, जो लोड बैलेंसिंग और रूटिंग को संभालता है।
कई टीमों, प्रोजेक्ट्स या परिवेशों के लिए एक एकल कुबेरनेट्स क्लस्टर को तार्किक रूप से विभाजित करें।
→`Namespace` संसाधन बनाएँ। नेम्सपेस नामों के लिए एक दायरा और प्राधिकरण और नीतियों (जैसे, ResourceQuotas) को संलग्न करने का एक तरीका प्रदान करते हैं।
क्यों: नेम्सपेस कई क्लस्टरों के ओवरहेड के बिना मल्टी-टेनेंसी और संसाधन संगठन को सक्षम करते हैं।
क्षणिक Pods के एक सेट के लिए एक स्थिर नेटवर्क एंडपॉइंट (IP और DNS) प्रदान करें।
→एक `Service` संसाधन परिभाषित करें जो लेबल सेलेक्टर का उपयोग करके Pods के एक सेट को लक्षित करता है।
क्यों: Pods क्षणिक होते हैं और उनके IP बदलते रहते हैं। एक Service एक टिकाऊ एब्स्ट्रैक्शन प्रदान करती है जो सही Pods पर ट्रैफ़िक को लोड बैलेंस करती है।
संदर्भ↗
Pods में चल रहे एक एप्लिकेशन को विभिन्न नेटवर्क स्कोप में उजागर करें।
→एक Service `type` चुनें: `ClusterIP` (केवल आंतरिक, डिफ़ॉल्ट), `NodePort` (प्रत्येक नोड IP:port पर उजागर करता है), या `LoadBalancer` (एक क्लाउड लोड बैलेंसर प्रदान करता है)।
क्यों: Service प्रकार एप्लिकेशन की पहुँच निर्धारित करता है, विशुद्ध रूप से आंतरिक से लेकर पूरी तरह से बाहरी तक।
Service प्रॉक्सी को बायपास करते हुए, व्यक्तिगत Pods की सीधी नेटवर्क खोज को सक्षम करें।
→`clusterIP: None` के साथ एक `Service` बनाएँ। यह प्रत्येक Pod के लिए DNS A रिकॉर्ड बनाता है, जिससे क्लाइंट सीधे Pods से कनेक्ट हो सकते हैं।
क्यों: यह डेटाबेस जैसे स्टेटफुल एप्लिकेशनों (अक्सर StatefulSets के साथ) के लिए आवश्यक है जहाँ पीयर-टू-पीयर संचार या स्थिर Pod पहचान की आवश्यकता होती है।
कुबेरनेट्स ऑब्जेक्ट्स के एक उपसमूह को व्यवस्थित और चुनें।
→ऑब्जेक्ट्स (जैसे, `app: my-api`) में कुंजी-मूल्य `labels` संलग्न करें। उन्हें लक्षित करने के लिए अन्य ऑब्जेक्ट्स (जैसे, Services, Deployments) में `label selectors` का उपयोग करें।
क्यों: Labels कुबेरनेट्स में मुख्य समूहन तंत्र हैं, जो संसाधनों के बीच ढीले युग्मन को सक्षम करते हैं।
एप्लिकेशन कॉन्फ़िगरेशन को कंटेनर इमेज से अलग करें।
→गैर-संवेदनशील कॉन्फ़िगरेशन डेटा को एक `ConfigMap` में संग्रहीत करें। इसे एक वॉल्यूम के रूप में माउंट करें या Pods में पर्यावरण चर के रूप में कुंजियों को इंजेक्ट करें।
क्यों: यह कॉन्फ़िगरेशन को एप्लिकेशन कोड से स्वतंत्र रूप से प्रबंधित करने की अनुमति देता है, 12-फैक्टर ऐप सिद्धांतों का पालन करते हुए।
एप्लिकेशन उपयोग के लिए पासवर्ड, टोकन या API कुंजी जैसे संवेदनशील डेटा संग्रहीत करें।
→एक `Secret` ऑब्जेक्ट का उपयोग करें। इसे एक वॉल्यूम के रूप में माउंट करें या एक पर्यावरण चर के रूप में इंजेक्ट करें।
क्यों: Secrets विशेष रूप से संवेदनशील डेटा के लिए हैं और ConfigMaps की तुलना में अधिक सुरक्षित रूप से संभाले जाते हैं (जैसे, डिफ़ॉल्ट रूप से `kubectl describe` में नहीं दिखाए जाते, आराम पर एन्क्रिप्ट किए जा सकते हैं)।
स्टेटफुल एप्लिकेशनों को स्टोरेज प्रदान करें जो Pod रीस्टार्ट के बाद भी बना रहता है।
→एक Pod स्टोरेज का अनुरोध करने के लिए एक `PersistentVolumeClaim` (PVC) बनाता है। एक एडमिनिस्ट्रेटर एक `PersistentVolume` (PV) प्रदान करता है जो दावा को पूरा करता है।
क्यों: यह स्टोरेज खपत (PVC) को स्टोरेज प्रोविजनिंग (PV) से अलग करता है, जिससे पोर्टेबल वर्कलोड डेफिनिशन संभव हो पाती हैं।
कंटेनरों के लिए CPU और मेमोरी आवंटन का प्रबंधन करें।
→गारंटीकृत संसाधनों (शेड्यूलिंग के लिए उपयोग किए जाने वाले) के लिए `resources.requests` सेट करें और अधिकतम अनुमत उपयोग (रनटाइम पर लागू) के लिए `resources.limits` सेट करें।
क्यों: रिक्वेस्ट्स सुनिश्चित करती हैं कि Pods के पास चलने के लिए पर्याप्त संसाधन हों; लिमिट्स Pods को बहुत अधिक संसाधन खपत करने और अन्य कार्यभारों को प्रभावित करने से रोकती हैं।
एक नेम्सपेस पर एग्रीगेट रिसोर्स कंस्ट्रेंट्स सेट करें।
→एक `ResourceQuota` ऑब्जेक्ट बनाएँ ताकि CPU, मेमोरी, या ऑब्जेक्ट्स (Pods, Services) की कुल संख्या को सीमित किया जा सके जिन्हें एक नेम्सपेस में बनाया जा सकता है।
क्यों: ResourceQuotas मल्टी-टेनेंट वातावरण के लिए आवश्यक हैं ताकि उचित संसाधन साझाकरण सुनिश्चित किया जा सके और अत्यधिक खपत को रोका जा सके।
संस्करण-नियंत्रित कॉन्फ़िगरेशन फ़ाइलों का उपयोग करके कुबेरनेट्स संसाधनों का प्रबंधन करें।
→`kubectl apply -f <filename.yaml>` का उपयोग करें। यह कमांड फ़ाइल सामग्री के आधार पर संसाधनों को बनाता या अपडेट करता है।
क्यों: `apply` घोषणात्मक है, जो इसे GitOps और CI/CD के लिए आदर्श बनाता है। यह परिवर्तनों को ट्रैक करता है और एक तीन-तरफा मर्ज करता है, जो अनिवार्य `create` या `replace` से अधिक सुरक्षित है।
यह निदान करें कि एक Pod सही ढंग से क्यों नहीं चल रहा है (जैसे, Pending, ContainerCreating, या CrashLoopBackOff में फंसा हुआ)।
→`kubectl describe pod <pod-name>` का उपयोग करें। शेड्यूलर, kubelet, या कंट्रोलर से विस्तृत संदेशों के लिए नीचे `Events` अनुभाग देखें।
क्यों: `describe` एक कालानुक्रमिक इवेंट लॉग प्रदान करता है जो संसाधन जीवनचक्र समस्याओं को डीबग करने का प्राथमिक उपकरण है।
कंटेनरों के लिए नेटवर्किंग कार्यक्षमता प्रदान करें, जिससे क्लस्टर में Pod-टू-Pod संचार सक्षम हो सके।
→एक कंटेनर नेटवर्क इंटरफ़ेस (CNI) प्लगइन (जैसे, Calico, Flannel, Cilium) का उपयोग करें। प्रत्येक नोड पर kubelet प्रत्येक Pod के लिए नेटवर्किंग कॉन्फ़िगर करने के लिए CNI प्लगइन का उपयोग करता है।
क्यों: CNI एक मानक इंटरफ़ेस प्रदान करता है, जिससे कुबेरनेट्स को मुख्य घटकों को संशोधित किए बिना विभिन्न नेटवर्किंग समाधानों के साथ एकीकृत किया जा सकता है।
उपयोगकर्ताओं और एप्लिकेशनों के लिए कुबेरनेट्स API संसाधनों तक पहुँच को नियंत्रित करें।
→भूमिका-आधारित पहुँच नियंत्रण (RBAC) का उपयोग करें। अनुमतियों के साथ एक `Role` (नेम्सपेस) या `ClusterRole` (क्लस्टर-व्यापी) परिभाषित करें, और इसे `RoleBinding` या `ClusterRoleBinding` का उपयोग करके एक विषय (User, Group, ServiceAccount) से बाँधें।
क्यों: RBAC कुबेरनेट्स को सुरक्षित करने का मानक है, जो सभी API इंटरैक्शन के लिए कम से कम विशेषाधिकार के सिद्धांत को सक्षम करता है।
संदर्भ↗