כדי לאבחן את שורש הבעיה ב-Google Kubernetes Engine (GKE), צריך לעיתים קרובות לבדוק בפירוט את המצב הפעיל, ההגדרות והאירועים של משאבי Kubernetes. כדי לזהות את הבעיה מעבר לרמת הסימפטומים, צריך כלים שיאפשרו לבצע שאילתות ישירות במישור הבקרה של האשכול ולקיים איתו אינטראקציה.
בדף הזה מוסבר על פקודות חיוניות לניתוח המצב הפעיל של האשכול.kubectl הכרת הפקודות האלה מאפשרת לכם לאסוף מידע מפורט ישירות ממישור הבקרה של Kubernetes, וכך להבין למה מתרחשת בעיה.
המידע הזה חשוב לאדמינים ולמפעילים של פלטפורמות שצריכים לבצע בדיקות תקינות מעמיקות של אשכולות, לנהל משאבים ולפתור בעיות בתשתית ברמה מפורטת. הוא גם חיוני למפתחי אפליקציות לניפוי באגים בהתנהגות האפליקציה, לבדיקת יומני Pod ואירועים, ולאימות המצב המדויק של הפריסות שלהם בסביבת Kubernetes. מידע נוסף על התפקידים הנפוצים ועל משימות לדוגמה שאנחנו מתייחסים אליהן בתוכן של Google Cloud , זמין במאמר תפקידי משתמשים נפוצים ומשימות ב-GKE.
לפני שמתחילים
לפני שמתחילים, צריך לבצע את המשימות הבאות:
- מתקינים את kubectl.
מגדירים את כלי שורת הפקודה
kubectlכדי לתקשר עם האשכול:gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATIONמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול. -
LOCATION: המיקום של מישור הבקרה של האשכול ב-Compute Engine. מציינים אזור לאשכולות אזוריים או אזור זמינות לאשכולות אזוריים.
-
בודקים את ההרשאות. כדי לבדוק אם יש לכם את ההרשאות הנדרשות להפעלת פקודות
kubectl, משתמשים בפקודהkubectl auth can-i. לדוגמה, כדי לבדוק אם יש לכם הרשאה להריץ את הפקודהkubectl get nodes, מריצים את הפקודהkubectl auth can-i get nodes.אם יש לכם את ההרשאות הנדרשות, הפקודה תחזיר
yes. אחרת, הפקודה תחזירno.אם אין לכם הרשאה להריץ פקודה של
kubectl, יכול להיות שתופיע הודעת שגיאה דומה לזו:Error from server (Forbidden): pods "POD_NAME" is forbidden: User "USERNAME@DOMAIN.com" cannot list resource "pods" in API group "" in the namespace "default"אם אין לכם את ההרשאות הנדרשות, בקשו מאדמין האשכול להקצות לכם את התפקידים הנדרשים.
סקירה כללית של מה שמופעל
הפקודה kubectl get עוזרת לכם לקבל תצוגה כוללת של מה שקורה באשכול. אפשר להשתמש בפקודות הבאות כדי לראות את הסטטוס של שניים מהרכיבים החשובים ביותר באשכול, הצמתים וה-Pods:
כדי לבדוק אם הצמתים תקינים, אפשר לראות את הפרטים של כל הצמתים והסטטוסים שלהם:
kubectl get nodesהפלט אמור להיראות כך:
NAME STATUS ROLES AGE VERSION gke-cs-cluster-default-pool-8b8a777f-224a Ready <none> 4d23h v1.32.3-gke.1785003 gke-cs-cluster-default-pool-8b8a777f-egb2 Ready <none> 4d22h v1.32.3-gke.1785003 gke-cs-cluster-default-pool-8b8a777f-p5bn Ready <none> 4d22h v1.32.3-gke.1785003כל סטטוס אחר מלבד
Readyמחייב בדיקה נוספת.כדי לבדוק אם ה-Pods תקינים, אפשר להציג את הפרטים של כל ה-Pods ואת הסטטוס שלהם:
kubectl get pods --all-namespacesהפלט אמור להיראות כך:
NAMESPACE NAME READY STATUS RESTARTS AGE kube-system netd-6nbsq 3/3 Running 0 4d23h kube-system netd-g7tpl 3/3 Running 0 4d23hכל סטטוס אחר מלבד
Runningמחייב בדיקה נוספת. ריכזנו כאן כמה סטטוסים נפוצים שאתם עשויים לראות:-
Running: מצב תקין ופעיל. -
Pending: ה-Pod ממתין לתזמון בצומת. -
CrashLoopBackOff: הקונטיינרים ב-Pod קורסים שוב ושוב בלולאה כי האפליקציה מתחילה, יוצאת עם שגיאה ואז מופעלת מחדש על ידי Kubernetes. -
ImagePullBackOff: ה-Pod לא יכול למשוך את קובץ האימג' של הקונטיינר.
-
הפקודות הקודמות הן רק שתי דוגמאות לשימוש בפקודה kubectl
get. אפשר גם להשתמש בפקודה כדי לקבל מידע נוסף על סוגים רבים של משאבי Kubernetes. רשימה מלאה של המשאבים שאפשר לבדוק מופיעה במאמר kubectl get במסמכי Kubernetes.
מידע נוסף על משאבים ספציפיים
אחרי שמזהים בעיה, צריך לקבל פרטים נוספים. דוגמה לבעיה יכולה להיות Pod שלא מוגדר לו סטטוס Running. כדי לקבל פרטים נוספים, משתמשים בפקודה kubectl describe.
לדוגמה, כדי לתאר Pod ספציפי, מריצים את הפקודה הבאה:
kubectl describe pod POD_NAME -n NAMESPACE_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
POD_NAME: השם של ה-Pod שבו יש בעיות. -
NAMESPACE_NAME: מרחב השמות שבו נמצא ה-Pod. אם אתם לא בטוחים מהו מרחב השמות, תוכלו לבדוק את העמודהNamespaceבפלט של הפקודהkubectl get pods.
הפלט של הפקודה kubectl describe כולל מידע מפורט על המשאב. ריכזנו כאן כמה מהקטעים המועילים ביותר שכדאי לעיין בהם כשמנסים לפתור בעיות ב-Pod:
-
Status: הסטטוס הנוכחי של ה-Pod. -
Conditions: הבריאות והמוכנות הכוללות של ה-Pod. -
Restart Count: כמה פעמים הקונטיינרים ב-Pod הופעלו מחדש. מספרים גבוהים יכולים להיות סיבה לדאגה. -
Events: יומן של דברים חשובים שקרו ל-Pod, כמו תזמון שלו לצומת, משיכת קובץ אימג' של קונטיינר שלו והאם אירעו שגיאות. בקטעEventsאפשר למצוא בדרך כלל רמזים ישירים לסיבה שבגללה ה-Pod נכשל.
בדומה לפקודה kubectl get, אפשר להשתמש בפקודה kubectl describe כדי לקבל מידע נוסף על כמה סוגים של משאבים. רשימה מלאה של המשאבים שניתן לבדוק זמינה במאמר kubectl describe במסמכי Kubernetes.
המאמרים הבאים
מומלץ לקרוא את המאמר ביצוע ניתוח היסטורי באמצעות Cloud Logging (הדף הבא בסדרה הזו).
אפשר לראות איך מיישמים את המושגים האלה בתרחיש לדוגמה לפתרון בעיות.
כדי לקבל עצות לפתרון בעיות ספציפיות, אפשר לעיין במדריכים לפתרון בעיות ב-GKE.
אם לא מצאתם פתרון לבעיה שלכם במסמכים, תוכלו להיעזר בקבלת תמיכה, כולל עצות בנושאים הבאים:
- פתיחת בקשת תמיכה באמצעות פנייה אל Cloud Customer Care.
- קבלת תמיכה מהקהילה על ידי פרסום שאלות ב-StackOverflow ושימוש בתג
google-kubernetes-engineכדי לחפש בעיות דומות. אפשר גם להצטרף לערוץ Slack#kubernetes-engineכדי לקבל תמיכה נוספת מהקהילה. - פתיחת באגים או בקשות להוספת תכונות באמצעות הכלי הציבורי למעקב אחר בעיות.