איפוס צמתים ומחיקת אשכולות

במהלך ההתקנה של אשכול Google Distributed Cloud, קבצים בינאריים ושירותי systemd מותקנים בצמתים שמארחים את האשכול, והשירותים מתחילים להאזין ליציאות בצמתים.

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

בדף הזה מוסבר איך לבצע את פעולת הניקוי הזו של צמתים ספציפיים ואיך למחוק אשכול.

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

בחירת שיטת מחיקה

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

  • סוג האשכול.
  • אם רוצים לנקות רק צמתים ספציפיים ולא למחוק את כל האשכול.
  • איך האשכול נוצר.

‫Google Distributed Cloud מספקת את שיטות המחיקה הבאות:

  • במסוף Google Cloud או ב-Google Cloud CLI:

    • משתמשים במסוף או ב-CLI של gcloud כדי למחוק אשכולות משתמשים שמנוהלים על ידי GKE On-Prem API. אשכול משתמשים מנוהל על ידי GKE On-Prem API אם אחד מהתנאים הבאים מתקיים:

      • האשכול נוצר במסוף Google Cloud או באמצעות ה-CLI של gcloud, שמגדיר אוטומטית את GKE On-Prem API לניהול האשכול.

      • האשכול נוצר באמצעות bmctl, אבל הוגדר לניהול על ידי GKE On-Prem API.

  • bmctl:

    • אפשר להשתמש ב-bmctl reset nodes כדי לאפס צמתים ספציפיים.
    • משתמשים ב-bmctl reset כדי למחוק את סוגי האשכולות הבאים:

      • אשכולות אדמין, אשכולות היברידיים ואשכולות עצמאיים (שנקראים גם אשכולות בניהול עצמי). היא כוללת אשכולות אדמין שמנוהלים על ידי GKE On-Prem API.
      • אשכולות משתמשים שלא מנוהלים על ידי GKE On-Prem API.

    אם משתמשים בפקודה bmctl כדי לאפס צמתים או למחוק אשכול, הפקודה מצפה שקובץ התצורה של האשכול יהיה בספריית העבודה הנוכחית. כברירת מחדל, הנתיב נראה כך:

    bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml

    אם השתמשתם בדגל --workspace-dir כדי לציין ספרייה אחרת במהלך יצירת האשכול, אתם צריכים להשתמש בדגל כדי לציין את ספריית העבודה במהלך איפוס האשכול.

  • kubectl:

    • משתמשים ב-kubectl delete cluster כדי למחוק רק אשכולות משתמשים שלא מנוהלים על ידי אשכולות GKE On-Prem API. אל תריצו את הפקודה בסוגים אחרים של אשכולות.
    • שימו לב שאם משתמשים ב-kubectl delete cluster, צריך גם למחוק את מרחב השמות שהאשכול נמצא בו אחרי שמוחקים את האשכול.

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

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

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

bmctl reset --cluster CLUSTER_NAME

בפקודה, מחליפים את CLUSTER_NAME בשם של האשכול שרוצים לאפס.

הפלט מהפקודה bmctl cluster reset אמור להיראות כך:

Please check the logs at bmctl-workspace/example-cluster-1/log/reset-20221025-184705/reset.log
[2022-10-25 18:47:11+0000] Creating bootstrap cluster... OK
[2022-10-25 18:48:18+0000] Loading images... OK
[2022-10-25 18:48:18+0000] Waiting for reset jobs to finish...
[2022-10-25 18:48:28+0000] Operation reset in progress: 1       Completed: 0    Failed: 0
...
[2022-10-25 18:50:08+0000] Operation reset in progress: 0       Completed: 1    Failed: 0
[2022-10-25 18:50:08+0000] Flushing logs... OK
[2022-10-25 18:50:08+0000] Deleting GKE Hub member example-cluster-1 in project example-project-12345...
[2022-10-25 18:50:11+0000] Successfully deleted GKE Hub member example-cluster-1 in project example-project-12345
[2022-10-25 18:50:11+0000] Deleting bootstrap cluster... OK

בנוסף למחיקת האשכול, הפקודה מוחקת את החברות של האשכול בצי.

בנוסף, עבור אשכולות אדמין שמנוהלים על ידי GKE On-Prem API, צריך למחוק את משאבי ה-API ב- Google Cloud. אחרת, האשכול יוצג בדף GKE clusters במסוף Google Cloud . כדי למחוק את משאבי GKE On-Prem API עבור אשכול אדמין, משתמשים בפקודה הבאה:

gcloud container bare-metal admin-clusters unenroll CLUSTER_NAME \
    --project=FLEET_HOST_PROJECT_ID \
    --location=REGION \
    --ignore-errors

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

  • FLEET_HOST_PROJECT_ID: מזהה הפרויקט של ה-Fleet שהאשכול לניהול היה חבר בו.

  • REGION: האזור שבו GKE On-Prem API מאחסן את המטא-נתונים של האשכול. Google Cloud

הדגל --ignore-errors מבטיח שביטול ההרשמה של משאב אשכול אדמין של Bare Metal יצליח גם אם יתרחשו שגיאות במהלך ביטול ההרשמה.

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

מחיקת אשכולות משתמשים

אם אשכול המשתמשים מנוהל על ידי GKE On-Prem API, צריך למחוק את האשכול באמצעות המסוף או ה-CLI של gcloud. אחרת, משתמשים ב-bmctl או ב-kubectl כדי למחוק את האשכול.

bmctl

אתם יכולים להשתמש ב-bmctl כדי למחוק אשכולות משתמשים שנוצרו באמצעות bmctl או kubectl, ושלא רשומים ב-GKE On-Prem API.

מריצים את הפקודה הבאה כדי למחוק אשכול משתמשים באמצעות bmctl:

bmctl reset --cluster USER_CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG_PATH

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

  • USER_CLUSTER_NAME: השם של אשכול המשתמשים שרוצים למחוק.

  • ADMIN_KUBECONFIG_PATH: הנתיב לקובץ kubeconfig של אשכול האדמין המשויך. ‫bmctl תומך בשימוש ב---kubeconfig ככינוי לדגל --admin-kubeconfig.

הפלט מהפקודה bmctl cluster reset אמור להיראות כך:

Please check the logs at bmctl-workspace/example-cluster-1/log/reset-20221025-184705/reset.log
[2022-10-25 18:47:11+0000] Creating bootstrap cluster... OK
[2022-10-25 18:48:18+0000] Loading images... OK
[2022-10-25 18:48:18+0000] Waiting for reset jobs to finish...
[2022-10-25 18:48:28+0000] Operation reset in progress: 1       Completed: 0    Failed: 0
...
[2022-10-25 18:50:08+0000] Operation reset in progress: 0       Completed: 1    Failed: 0
[2022-10-25 18:50:08+0000] Flushing logs... OK
[2022-10-25 18:50:08+0000] Deleting GKE Hub member example-cluster-1 in project example-project-12345...
[2022-10-25 18:50:11+0000] Successfully deleted GKE Hub member example-cluster-1 in project example-project-12345
[2022-10-25 18:50:11+0000] Deleting bootstrap cluster... OK

kubectl

אתם יכולים להשתמש ב-kubectl כדי למחוק אשכולות משתמשים שנוצרו באמצעות bmctl או kubectl, ושלא רשומים ב-GKE On-Prem API. כדי להשתמש ב-kubectl כדי למחוק אשכול משתמשים, צריך קודם למחוק את אובייקט האשכול ואז את מרחב השמות שלו. אחרת, אי אפשר ליצור את המשימות לאיפוס המכונות, ותהליך המחיקה עלול להיתקע ללא הגבלת זמן.

כדי למחוק אשכול משתמשים באמצעות kubectl:

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

    kubectl delete cluster USER_CLUSTER_NAME -n USER_CLUSTER_NAMESPACE \
        --kubeconfig ADMIN_KUBECONFIG_PATH

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

    • USER_CLUSTER_NAME: השם של אשכול המשתמשים שרוצים למחוק.

    • USER_CLUSTER_NAMESPACE: מרחב השמות של האשכול. כברירת מחדל, מרחבי השמות של האשכולות ב-Google Distributed Cloud הם השם של האשכול עם הקידומת cluster-. לדוגמה, אם שם האשכול הוא test, שם מרחב השמות יהיה cluster-test.

    • ADMIN_KUBECONFIG_PATH: הנתיב לקובץ kubeconfig של אשכול האדמין המשויך.

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

    kubectl delete namespace USER_CLUSTER_NAMESPACE --kubeconfig ADMIN_KUBECONFIG_PATH

המסוף

אם אשכול המשתמשים מנוהל על ידי GKE On-Prem API, צריך לבצע את השלבים הבאים כדי למחוק את האשכול:

  1. במסוף, נכנסים לדף Google Kubernetes Engine clusters overview.

    מעבר לאשכולות GKE

  2. בוחרים את הפרויקט Google Cloud שבו נמצא אשכול המשתמשים.

  3. ברשימת האשכולות, לוחצים על האשכול שרוצים למחוק.

  4. ברשימת האשכולות, מאתרים את האשכול שרוצים למחוק. אם הסוג הוא חיצוני, זה מצביע על כך שהאשכול נוצר באמצעות bmctl ולא נרשם ל-GKE On-Prem API. במקרה כזה, פועלים לפי השלבים בכרטיסייה bmctl או kubectl כדי למחוק את האשכול.

    אם הסמל בעמודה סטטוס מציין שיש בעיה, צריך לפעול לפי השלבים בכרטיסייה ה-CLI של gcloud כדי למחוק את האשכול. תצטרכו להוסיף את הדגל --ignore-errors לפקודת המחיקה.

  5. לוחצים על השם של האשכול שרוצים למחוק.

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

  7. כשמופיעה בקשה לאישור, מזינים את שם האשכול ולוחצים על הסרה.

‫CLI של gcloud

אם אשכול המשתמשים מנוהל על ידי GKE On-Prem API, מבצעים את השלבים הבאים כדי למחוק את האשכול במחשב שמותקן בו ה-CLI של gcloud:

  1. מתחברים לחשבון Google:

    gcloud auth login
    
  2. עדכון רכיבים:

    gcloud components update
    
  3. כדי לוודא שמציינים את שם האשכול הנכון בפקודת המחיקה, אפשר לקבל רשימה של אשכולות:

    gcloud container bare-metal clusters list \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

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

    • FLEET_HOST_PROJECT_ID: מזהה הפרויקט שבו נוצר האשכול.

    • LOCATION: Google Cloud המיקום שמשויך לאשכול המשתמשים.

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

    NAME                      LOCATION    VERSION         ADMIN_CLUSTER            STATE
    example-user-cluster-1a   us-west1    1.34.100-gke.93          example-admin-cluster-1  RUNNING
    
  4. מריצים את הפקודה הבאה כדי למחוק את האשכול:

    gcloud container bare-metal clusters delete USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION \
      --force \
      --allow-missing
    

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

    • USER_CLUSTER_NAME: השם של אשכול המשתמשים שרוצים למחוק.

    • FLEET_HOST_PROJECT_ID: מזהה הפרויקט שבו נוצר האשכול.

    • LOCATION: Google Cloud המיקום שמשויך לאשכול המשתמשים.

    הדגל --force מאפשר למחוק אשכול שיש בו מאגרי צמתים. בלי התג --force, צריך קודם למחוק את מאגרי הצמתים ואז למחוק את האשכול.

    הדגל --allow-missing הוא דגל סטנדרטי של Google API. כשמציינים את הדגל הזה, הפקודה מחזירה הצלחה אם לא נמצא אשכול.

    אם הפקודה מחזירה שגיאה שמכילה את הטקסט failed connecting to the cluster's control plane, זה מצביע על בעיות בקישוריות לאחד מהרכיבים הבאים: אשכול האדמין, Connect Agent או הסביבה המקומית. כדי לפתור בעיות ב-Connect Agent, אפשר לעיין במאמר בנושא איסוף יומנים של Connect Agent.

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

    • אם אתם יודעים שקלאסטר האדמין נמחק, או אם המכונות של הצומת בקלאסטר האדמין או בקלאסטר המשתמש הושבתו או שהן לא מחוברות לאינטרנט, צריך לכלול את הדגל --ignore-errors ולנסות שוב להריץ את הפקודה.

      צריך לכלול גם את --ignore-errors אם האשכול נמחק באמצעות bmctl או kubectl, מה שמשאיר משאבי GKE On-Prem API ב- Google Cloud. אחד מהסימפטומים לכך הוא שהאשכול עדיין מוצג בדף GKE clusters (אשכולות GKE) במסוף במצב לא תקין.

למידע על דגלים אחרים, אפשר לעיין במדריך העזר ל-CLI של gcloud.

איפוס של צמתי מקבץ ספציפיים

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

כדי לאפס צמתים, צריך חשבון שירות עם גישת קריאה ל-Artifact Registry. הפקודה bmctl מצפה לקבל כארגומנט את קובץ מפתח ה-JSON של חשבון השירות הזה. כדי לאפס צמתים בודדים באשכול, מריצים את הפקודה הבאה:

bmctl reset nodes --addresses NODE_1_IP_ADDRESS,NODE_2_IP_ADDRESS \
    --ssh-private-key-path SSH_KEY_PATH \
    --gcr-service-account-key SERVICE_ACCOUNT_KEY_PATH \
    --login-user root

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

  • NODE_1_IP_ADDRESS , NODE_2_IP_ADDRESS: רשימה מופרדת בפסיקים של כתובות ה-IP של הצמתים שרוצים למחוק.

  • SSH_KEY_PATH: הנתיב למפתח SSH פרטי. זה המפתח שישמש ליצירת חיבורי SSH עם הצמתים במהלך האיפוס.

  • SERVICE_ACCOUNT_KEY_PATH: הנתיב לקובץ ה-JSON שמכיל את המפתח של חשבון השירות. המפתח הזה מעניק ל-bmctl הרשאה לשלוף תמונות מ-Artifact Registry. אפשר ליצור מפתח של חשבון שירות באמצעות המסוף או ה-CLI של gcloud. פרטים נוספים זמינים במאמר יצירה וניהול של מפתחות לחשבונות שירות. דרך נוספת ליצור את קובץ המפתח של חשבון השירות היא להריץ את הפקודה create config עם הדגל --create-service-accounts. פרטים על הפקודה הזו זמינים במאמר יצירה של קובץ הגדרות של אדמין קלאסטר באמצעות bmctl.

פרטים על מחיקת אשכול

במהלך המחיקה, הרישום של חברות בצי של האשכול, נקודות החיבור של האחסון והנתונים מ-anthos-system StorageClass נמחקים.

בכל הצמתים, ממשקי המנהור שמשמשים לחיבור הרשת של האשכול מוסרים, והספריות הבאות נמחקות:

  • /etc/kubernetes
  • /etc/cni/net.d
  • /root/.kube
  • /var/lib/kubelet

עבור צמתים של מאזן עומסים:

  • השירותים keepalived ו-haproxy נמחקים.
  • קבצי ההגדרות של keepalived ו-haproxy נמחקים.