एक पॉड `Pending` स्थिति में फंस गया है और शेड्यूल नहीं किया जा रहा है।
→`kubectl describe pod <pod-name>` चलाएं। शेड्यूलर से संदेशों के लिए `Events` अनुभाग की जाँच करें।
क्यों: `describe` कमांड इसके लिए प्राथमिक उपकरण है। यह "Insufficient cpu/memory", "node(s) had taints the pod didn't tolerate", या "didn't match node selector" जैसे कारण दिखाएगा।
एक पॉड `CrashLoopBackOff` स्थिति के साथ बार-बार शुरू और विफल हो रहा है।
→1. क्रैश हुए कंटेनर से लॉग देखने के लिए `kubectl logs <pod-name> --previous`। 2. एग्जिट कोड और कारण की जांच करने के लिए `kubectl describe pod <pod-name>`।
क्यों: `CrashLoopBackOff` का मतलब है कि कंटेनर के अंदर का एप्लिकेशन बाहर निकल रहा है। पिछली इंस्टेंस (`--previous`) से लॉग महत्वपूर्ण हैं, क्योंकि वर्तमान कंटेनर ने अभी तक कुछ भी उपयोगी लॉग नहीं किया होगा। एग्जिट कोड भी त्रुटि के प्रकार को इंगित कर सकता है।
एक पॉड `ImagePullBackOff` या `ErrImagePull` स्थिति के साथ शुरू होने में विफल रहता है।
→`kubectl describe pod <pod-name>` इवेंट संदेश देखने के लिए। इमेज नाम और टैग सही हैं इसकी पुष्टि करें। निजी रजिस्ट्रियों के लिए, सुनिश्चित करें कि एक `imagePullSecrets` कॉन्फ़िगर किया गया है और सीक्रेट वैध है।
क्यों: यह एक रजिस्ट्री या इमेज नाम का मुद्दा है, न कि एप्लिकेशन का मुद्दा। सामान्य कारण टाइपो, गलत टैग, या निजी रजिस्ट्री के साथ प्रमाणीकरण विफलता हैं।
एक नोड की स्थिति `NotReady` है।
→प्रभावित नोड पर SSH करें। `systemctl status kubelet` के साथ kubelet सेवा स्थिति की जाँच करें। `journalctl -u kubelet` के साथ इसके लॉग देखें।
क्यों: `kubelet` नोड स्वास्थ्य रिपोर्टिंग के लिए जिम्मेदार एजेंट है। यदि यह डाउन है या API सर्वर के साथ संवाद नहीं कर सकता है, तो नोड को NotReady चिह्नित किया जाएगा। इसके लॉग देखने के लिए पहली जगह हैं।
एक सेवा मौजूद है, लेकिन ट्रैफ़िक बैकएंड पॉड्स तक नहीं पहुंच रहा है।
→1. `kubectl describe svc <service-name>` और सत्यापित करें कि `Selector` पॉड लेबलों से मेल खाता है। 2. `kubectl get endpoints <service-name>` और सुनिश्चित करें कि यह सही पॉड IPs को सूचीबद्ध करता है। यदि नहीं, तो लेबल बेमेल हैं।
क्यों: एक सेवा और उसके पॉड्स के बीच का लिंक लेबल सेलेक्टर है। यदि सेलेक्टर गलत है या पॉड्स में सही लेबल नहीं हैं, तो Endpoints ऑब्जेक्ट खाली होगा, और सेवा के पास ट्रैफ़िक को रूट करने के लिए कहीं नहीं होगा।
पॉड्स सेवा नामों या बाहरी होस्टनेम को हल करने में असमर्थ हैं।
→1. जांचें कि `kube-system` में CoreDNS पॉड्स चल रहे हैं या नहीं। 2. CoreDNS लॉग की जाँच करें। 3. एक डीबग पॉड (जैसे, `busybox`) चलाएं और क्लस्टर के भीतर से रिज़ॉल्यूशन का परीक्षण करने के लिए `nslookup` का उपयोग करें।
क्यों: DNS एक महत्वपूर्ण क्लस्टर निर्भरता है। विफलताएं आमतौर पर CoreDNS डिप्लॉयमेंट से ही, उसके कॉन्फ़िगरेशन (एक ConfigMap में), या UDP/TCP पोर्ट 53 पर DNS ट्रैफ़िक को ब्लॉक करने वाली नेटवर्क नीतियों से जुड़ी होती हैं।
रखरखाव के लिए एक नोड को ऑफ़लाइन करना होगा।
→सबसे पहले, `kubectl cordon <node-name>` इसे अनशेड्यूलेबल चिह्नित करने के लिए। फिर, सभी उपयोगकर्ता पॉड्स को सुरक्षित रूप से निकालने के लिए `kubectl drain <node-name> --ignore-daemonsets`।
क्यों: `cordon` नए पॉड्स को शेड्यूल होने से रोकता है। `drain` PodDisruptionBudgets का सम्मान करता है और पॉड्स को शालीनता से बाहर निकालता है। `--ignore-daemonsets` की आवश्यकता है क्योंकि DaemonSet पॉड्स को निकाला नहीं जा सकता है।
पहचान करें कि कौन से पॉड्स या नोड्स सबसे अधिक CPU या मेमोरी का उपभोग कर रहे हैं।
→`kubectl top pods` और `kubectl top nodes` का उपयोग करें। इसके लिए `metrics-server` को क्लस्टर में तैनात करने की आवश्यकता है।
क्यों: `kubectl top` संसाधन खपत का एक त्वरित, वास्तविक समय दृश्य प्रदान करता है, जो संसाधन-भूखे एप्लिकेशनों या नोड संसाधन दबाव की पहचान करने के लिए आवश्यक है।
एक पॉड लंबे समय से `Terminating` स्थिति में है और हटाया नहीं जा रहा है।
→`kubectl delete pod <pod-name> --grace-period=0 --force` के साथ पॉड को जबरदस्ती हटा दें।
क्यों: यह तब हो सकता है जब एक फाइनलाइज़र फंस गया हो या kubelet संसाधनों को साफ नहीं कर सकता हो। जबरदस्ती हटाने से पॉड API सर्वर से तुरंत हटा दिया जाता है, लेकिन इसे अंतिम उपाय के रूप में इस्तेमाल किया जाना चाहिए क्योंकि यह नोड पर अनाथ संसाधन छोड़ सकता है।