pod תקוע במצב `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".
pod מופעל ונכשל שוב ושוב, עם סטטוס `CrashLoopBackOff`.
→1. `kubectl logs <pod-name> --previous` כדי לראות את הלוגים מה-container שקרס. 2. `kubectl describe pod <pod-name>` כדי לבדוק את קוד היציאה והסיבה.
למה: `CrashLoopBackOff` פירושו שהיישום בתוך ה-container יוצא. הלוגים מהמופע הקודם (`--previous`) חיוניים, מכיוון שה-container הנוכחי אולי עדיין לא רשם שום דבר שימושי. קוד היציאה יכול גם להצביע על סוג השגיאה.
pod נכשל בהפעלה עם סטטוס `ImagePullBackOff` או `ErrImagePull`.
→`kubectl describe pod <pod-name>` כדי לראות את הודעת האירוע. ודא ששם התמונה וה-tag נכונים. עבור registries פרטיים, ודא ש-`imagePullSecrets` מוגדר ושה-secret תקף.
למה: זוהי בעיה ב-registry או בשם התמונה, לא בעיה ביישום. סיבות נפוצות הן שגיאות כתיב, tags שגויים, או כשל באימות מול registry פרטי.
לצומת יש סטטוס `NotReady`.
→התחבר ב-SSH לצומת המושפע. בדוק את סטטוס שירות ה-kubelet עם `systemctl status kubelet`. צפה בלוגים שלו עם `journalctl -u kubelet`.
למה: ה-`kubelet` הוא הסוכן האחראי על דיווח מצב תקינות הצומת. אם הוא מושבת או אינו יכול לתקשר עם ה-API server, הצומת יסומן כ-NotReady. הלוגים שלו הם המקום הראשון לבדוק.
שירות קיים, אך התעבורה אינה מגיעה ל-pods בקצה האחורי.
→1. `kubectl describe svc <service-name>` וודא שה-`Selector` תואם את תוויות ה-pod. 2. `kubectl get endpoints <service-name>` וודא שהוא מפרט את כתובות ה-IP הנכונות של ה-pods. אם לא, התוויות אינן תואמות.
למה: הקישור בין שירות ל-Pods שלו הוא ה-label selector. אם ה-selector שגוי או ל-pods אין את התוויות הנכונות, אובייקט ה-Endpoints יהיה ריק, ולשירות לא תהיה לאן לנתב תעבורה.
Pods אינם מסוגלים לפתור שמות שירותים או שמות מארחים חיצוניים.
→1. בדוק אם CoreDNS pods פועלים ב-`kube-system`. 2. בדוק את לוגי CoreDNS. 3. הרץ pod אבחון (לדוגמה, `busybox`) והשתמש ב-`nslookup` כדי לבדוק פתרון מתוך האשכול.
למה: DNS הוא תלות קריטית באשכול. כשלים מתחקות בדרך כלל לפריסת CoreDNS עצמה, לתצורה שלה (ב-ConfigMap), או למדיניות רשת החוסמת תעבורת DNS בפורט UDP/TCP 53.
יש להוריד צומת לא מקוון לצורך תחזוקה.
→ראשית, `kubectl cordon <node-name>` כדי לסמן אותו כבלתי ניתן לתזמון. לאחר מכן, `kubectl drain <node-name> --ignore-daemonsets` כדי לפנות בבטחה את כל ה-pods של המשתמשים.
למה: `cordon` מונע תזמון של pods חדשים. `drain` מכבד את PodDisruptionBudgets ומפנה pods בחן. `--ignore-daemonsets` נדרש מכיוון ש-DaemonSet pods אינם ניתנים לפינוי.
זהה אילו pods או nodes צורכים את מירב ה-CPU או הזיכרון.
→השתמש ב-`kubectl top pods` וב-`kubectl top nodes`. זה דורש ש-`metrics-server` יהיה פרוס באשכול.
למה: `kubectl top` מספק תצוגה מהירה, בזמן אמת, של צריכת משאבים, חיונית לזיהוי יישומים רעבים למשאבים או לחץ על משאבי הצומת.
pod נמצא במצב `Terminating` במשך זמן רב ואינו מוסר.
→מחק בכוח את ה-pod עם `kubectl delete pod <pod-name> --grace-period=0 --force`.
למה: זה יכול לקרות אם finalizer תקוע או שה-kubelet אינו יכול לנקות משאבים. מחיקה בכוח מסירה את ה-pod משרת ה-API באופן מיידי, אך יש להשתמש בה כמוצא אחרון מכיוון שהיא עלולה להשאיר משאבים יתומים בצומת.