תיקון אוטומטי של צמתים ובדיקות תקינות

ב-Google Distributed Cloud, בדיקות תקינות תקופתיות ותיקון אוטומטי של צמתים מופעלים כברירת מחדל.

תכונת התיקון האוטומטי של הצמתים מזהה ומתקנת באופן רציף צמתים לא תקינים באשכול.

בדיקות התקינות התקופתיות מופעלות כל רבע שעה. הבדיקות זהות לבדיקות שמבוצעות על ידי gkectl diagnose cluster. התוצאות מוצגות כיומנים וכאירועים באובייקטים של Cluster באשכול האדמין.

מוודאים שלכל אחד מאשכולות האדמין והמשתמשים יש כתובת IP נוספת שזמינה לתיקון אוטומטי של הצומת.

אם האשכול המתקדם מופעל, בדיקות התקינות התקופתיות לא מופעלות כחלק מהתיקון האוטומטי.

תנאים לא תקינים של צומת כשלא מופעלת קבוצת מחשבים מתקדמת

התנאים הבאים מצביעים על כך שהצומת לא תקין כש-enableAdvanceCluster הוא false.

  • תנאי הצומת NotReady הוא true למשך כ-10 דקות.

  • מצב המכונה הוא Unavailable למשך כ-10 דקות אחרי היצירה המוצלחת.

  • סטטוס המכונה לא יהיה Available במשך כ-30 דקות אחרי יצירת המכונה הווירטואלית.

  • אין אובייקט צומת (nodeRef הוא nil) שמתאים למכונה במצב Available במשך כ-10 דקות.

  • המצב של הצומת DiskPressure הוא true למשך כ-30 דקות.

תנאים לא תקינים של צומת כשהאפשרות 'אשכול מתקדם' מופעלת

התנאים הבאים מצביעים על כך שהצומת לא תקין כשהערך של enableAdvanceCluster הוא true.

  • תנאי הצומת NotReady הוא true למשך כ-10 דקות.

  • המצב של הצומת DiskPressure הוא true למשך כ-30 דקות.

אסטרטגיה לתיקון צמתים

‫Google Distributed Cloud מתחיל תיקון של צומת אם הצומת עומד לפחות באחד מהתנאים שברשימה הקודמת.

התיקון מרוקן את הצומת הלא תקין ויוצר מכונה וירטואלית חדשה. אם ניקוי הצומת נכשל למשך שעה, התיקון כופה את הניקוי ומנתק בבטחה את הדיסקים המנוהלים של Kubernetes שמצורפים.

אם יש כמה צמתים לא תקינים באותו MachineDeployment, התיקון מתבצע רק בצומת אחד בכל פעם.

מספר התיקונים לשעה במאגר צמתים מוגבל למספר המקסימלי מבין האפשרויות הבאות:

  • שלושה
  • ‫10% ממספר הצמתים במאגר הצמתים

הפעלת תיקון צמתים ובדיקת תקינות באשכול חדש

בקובץ התצורה של אשכול האדמין או המשתמש, מגדירים את autoRepair.enabled ל-true:

autoRepair:
  enabled: true

ממשיכים בשלבים ליצירת אשכול אדמין או משתמש.

הפעלת תיקון צמתים ובדיקת תקינות עבור אשכול משתמשים קיים

בקובץ ההגדרות של אשכול המשתמשים, מגדירים את autoRepair.enabled ל-true:

מעדכנים את האשכול:

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

מחליפים את מה שכתוב בשדות הבאים:

  • ADMIN_CLUSTER_KUBECONFIG: הנתיב לקובץ ה-kubeconfig של אשכול האדמין

  • USER_CLUSTER_CONFIG: הנתיב של קובץ ההגדרות של אשכול המשתמשים

הפעלת תיקון צמתים ובדיקת תקינות באשכול אדמין קיים

בקובץ ההגדרות של אשכול האדמין, מגדירים את autoRepair.enabled ל-true:

מעדכנים את האשכול:

gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG

מחליפים את ADMIN_CLUSTER_CONFIG בנתיב של קובץ התצורה של אשכול האדמין.

צפייה ביומנים של כלי לבדיקת תקינות

מציגים את כל ה-Pods של כלי הבדיקה של תקינות המערכת באשכול האדמין:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods --all-namespaces | grep cluster-health-controller

הפלט אמור להיראות כך:

kube-system       cluster-health-controller-6c7df455cf-zlfh7   2/2   Running
my-user-cluster   cluster-health-controller-5d5545bb75-rtz7c   2/2   Running

כדי לראות את היומנים של בודק תקינות מסוים, צריך לקבל את היומנים של מאגר cluster-health-controller באחד מ-Pods. לדוגמה, כדי לקבל את היומנים של my-user-cluster שמופיעים בפלט הקודם:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace my-user-cluster logs \
    cluster-health-controller-5d5545bb75-rtz7c cluster-health-controller

צפייה באירועים מכלי לבדיקת תקינות

מציגים רשימה של כל אובייקטי האשכול באשכול האדמין:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get clusters --all-namespaces

הפלט אמור להיראות כך:

default            gke-admin-ldxh7   2d15h
my-user-cluster    my-user-cluster   2d12h

כדי לראות את האירועים של אשכול מסוים, מריצים את הפקודה kubectl describe cluster עם הדגל --show-events. לדוגמה, כדי לראות את האירועים של my-user-cluster שמוצגים בפלט הקודם:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace my-user-cluster \
    describe --show-events cluster my-user-cluster

פלט לדוגמה:

Events:
  Type     Reason             Age   From                                 Message
  ----     ------             ----  ----                                 -------
  Warning  ValidationFailure  17s   cluster-health-periodics-controller  validator for Pod returned with status: FAILURE, reason: 1 pod error(s).

השבתה של תיקון צמתים ובדיקות תקינות באשכול משתמשים

בקובץ ההגדרות של אשכול המשתמשים, מגדירים את autoRepair.enabled ל-false:

מעדכנים את האשכול:

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

השבתה של תיקון צמתים ובדיקת תקינות באשכול אדמין

בקובץ ההגדרות של אשכול האדמין, מגדירים את autoRepair.enabled ל-false:

מעדכנים את האשכול:

gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG

ניפוי באגים בתיקון אוטומטי של צומת כשלא מופעל אשכול מתקדם

כדי לחקור בעיות בתיקון אוטומטי של צמתים, אפשר לתאר את האובייקטים Machine ו-Node באשכול הניהול. הנה דוגמה:

מציגים את אובייקטי המכונות:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG  get machines

פלט לדוגמה:

default     gke-admin-master-wcbrj
default     gke-admin-node-7458969ff8-5cg8d
default     gke-admin-node-7458969ff8-svqj7
default     xxxxxx-user-cluster-41-25j8d-567f9c848f-fwjqt

מתארים אחד מאובייקטי המכונה:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG describe machine gke-admin-master-wcbrj

בפלט, מחפשים אירועים מ-cluster-health-controller.

באופן דומה, אפשר לראות רשימה של אובייקטים של צמתים ולתאר אותם. לדוגמה:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get nodes
...
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG describe node gke-admin-master-wcbrj

ניפוי באגים בתיקון אוטומטי של צומת כשמופעל אשכול מתקדם

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

מציגים את אובייקטי המכונות:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG  get machines

פלט לדוגמה:

NAMESPACE                            NAME          NODEPOOL
ci-1f6861fe28cac8fb390bc798927c717b  10.251.172.47 ci-1f6861fe28cac8fb390bc798927c717b-np
ci-1f6861fe28cac8fb390bc798927c717b  10.251.173.64 ci-1f6861fe28cac8fb390bc798927c717b-cp
ci-1f6861fe28cac8fb390bc798927c717b  10.251.173.66 ci-1f6861fe28cac8fb390bc798927c717b-cp
ci-1f6861fe28cac8fb390bc798927c717b  10.251.174.19 ci-1f6861fe28cac8fb390bc798927c717b-np
ci-1f6861fe28cac8fb390bc798927c717b  10.251.175.15 ci-1f6861fe28cac8fb390bc798927c717b-np
ci-1f6861fe28cac8fb390bc798927c717b  10.251.175.30 ci-1f6861fe28cac8fb390bc798927c717b-cp
kube-system                          10.251.172.239   gke-admin-bnbp9-cp
kube-system                          10.251.173.39    gke-admin-bnbp9-cp
kube-system                          10.251.173.6     gke-admin-bnbp9-cp

תארו את המכונה שמתאימה לאובייקט Machine:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG describe machine -n ci-1f6861fe28cac8fb390bc798927c717b 10.251.172.47

בפלט, מחפשים אירועים מ-auto-repair-controller.

באופן דומה, אפשר לראות רשימה של אובייקטים של צמתים ולתאר אותם. לדוגמה:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes
...
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG describe node ci-1f6861fe28cac8fb390bc798927c717b-np

תיקון ידני של צמתים כשלא מופעל אשכול מתקדם

צומת אמצעי בקרה לאדמינים

לצומת של מישור הבקרה של האדמין יש פקודת תיקון ייעודית, כי התיקון הידני הרגיל לא פועל עבורו.

משתמשים ב-gkectl repair admin-master כדי לתקן את הצומת של אמצעי בקרה לאדמינים.

צומת מישור הבקרה של אשכול משתמש בגרסה 2 של מישור הבקרה

הניהול של צמתי רמת הבקרה של אשכול משתמשים Controlplane V2 שונה מהניהול של צמתים אחרים.

בדומה לאשכולות משתמשים של kubeception, אובייקטים של מכונות במישור הבקרה של אשכולות משתמשים במישור הבקרה V2 נמצאים באשכול האדמין. תיקון אוטומטי של צמתים מכוסה על ידי תיקון אוטומטי של צמתים באשכול הניהול.

אם יש בעיות בצומת שלא נכללות בלוגיקה של תיקון אוטומטי של צומת באשכול אדמין, או אם לא הפעלתם תיקון אוטומטי של צומת באשכול אדמין, תוכלו לבצע תיקון ידני. הפעולה הזו מוחקת את הצומת ויוצרת אותו מחדש.

  1. מקבלים את השם של אובייקט המכונה שמתאים לצומת:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME get machines
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ADMIN_CLUSTER_KUBECONFIG: הנתיב לקובץ kubeconfig של אשכול האדמין.
    • USER_CLUSTER_NAME: שם אשכול המשתמשים של היעד.
  2. מוסיפים את ההערה repair לאובייקט Machine:

    kubectl annotate --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME machine MACHINE_NAME onprem.cluster.gke.io/repair-machine=true
    

    מחליפים את MACHINE_NAME בשם של אובייקט המכונה.

  3. מחיקת אובייקט המכונה:

    kubectl delete --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME machine MACHINE_NAME
    

צריך ליצור מחדש את הצומת אחד אחרי השני עבור מישור בקרה של זמינות גבוהה, אחרת יכול להיות שמישור הבקרה יושבת באופן לא צפוי.

צמתים אחרים

אם יש בעיות בצומת שלא נכללות בלוגיקה של התיקון האוטומטי, או אם לא הפעלתם תיקון אוטומטי של צומת, תוכלו לבצע תיקון ידני. הפעולה הזו מוחקת את הצומת ויוצרת אותו מחדש.

מקבלים את השם של אובייקט המכונה שמתאים לצומת:

kubectl --kubeconfig CLUSTER_KUBECONFIG get machines

מחליפים את CLUSTER_KUBECONFIG בנתיב של קובץ ה-kubeconfig של האדמין או של אשכול המשתמש.

מוסיפים את ההערה repair לאובייקט Machine:

kubectl annotate --kubeconfig CLUSTER_KUBECONFIG machine MACHINE_NAME onprem.cluster.gke.io/repair-machine=true

מחליפים את MACHINE_NAME בשם של אובייקט המכונה.

מחיקת אובייקט המכונה:

kubectl delete --kubeconfig CLUSTER_KUBECONFIG machine MACHINE_NAME

תיקון ידני של צומת כשהאשכול המתקדם מופעל

צומת אמצעי בקרה לאדמינים

אין תמיכה בתיקון ידני של צומת במישור הבקרה של האדמין

צומת מישור הבקרה של אשכול משתמשים / צמתי עובדים

כדי לקבל את השם של אובייקט המכונה של מלאי שמתאים לצומת, משתמשים בכתובת ה-IP של הצומת כדי להתאים את האובייקטים:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME get inventorymachines

מחליפים את הערכים הבאים: ADMIN_CLUSTER_KUBECONFIG: הנתיב של קובץ ה-kubeconfig של האדמין. ‫USER_CLUSTER_NAME: שם אשכול המשתמשים של היעד.

מוסיפים את ההערה force-remove לאובייקט Inventory Machine:

kubectl annotate --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME inventorymachine MACHINE_NAME baremetal.cluster.gke.io/force-remove=true

מחליפים את MACHINE_NAME בשם של אובייקט המכונה.

מחיקת האובייקט Inventory Machine:

kubectl delete --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME inventorymachine MACHINE_NAME

צריך ליצור מחדש את הצומת אחד אחרי השני עבור מישור בקרה של HA, אחרת יכול להיות שמישור הבקרה יושבת באופן בלתי צפוי.