חקירת מצב האשכול באמצעות kubectl

כדי לאבחן את שורש הבעיה ב-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:

  1. כדי לבדוק אם הצמתים תקינים, אפשר לראות את הפרטים של כל הצמתים והסטטוסים שלהם:

    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 מחייב בדיקה נוספת.

  2. כדי לבדוק אם ה-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.

המאמרים הבאים