ניהול מאגרי צמתים באשכול

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

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

בחירת כלי לניהול מאגרי צמתים

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

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

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

אם GKE On-Prem API מנהל אשכול משתמשים, אפשר להשתמש במסוף או ב-CLI של gcloud כדי לנהל את מאגרי הצמתים. אם אשכול המשתמשים לא מנוהל על ידי GKE On-Prem API, משתמשים ב-kubectl בתחנת העבודה של האדמין כדי לנהל את מאגרי הצמתים. אפשר גם להשתמש ב-kubectl כדי לנהל מאגרי צמתים לכל סוגי האשכולות שיכולים להכיל מאגרי צמתים של צמתים עובדים (היברידיים, עצמאיים ואשכולות משתמשים).

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

  1. היכנס בעזרת חשבון Google שלך

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

    gcloud components update
    

בדיקת סטטוס הצומת

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

kubectl

באמצעות kubectl, אפשר לקבל את הסטטוס של הצמתים במרחב שמות ספציפי או באשכול כולו. בדוגמה הבאה מוצג הסטטוס של מאגרי הצמתים במרחב השמות של האשכול cluster-abm-cluster:

kubectl get nodepools.baremetal.cluster.gke.io -n cluster-abm-cluster

המערכת מחזירה תוצאות שדומות לתוצאות הבאות:

NAME                    READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
abm-cluster             3       0             0         0                  0
default-pool            2       0             0         0                  0
backup-pool             3       0             0         0                  0

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

כשמוסיפים צומת, הסטטוס שלו הוא Reconciling בזמן שהצומת מוקצה. אחרי שהצומת הופך לחלק מהאשכול, סטטוס הצומת משתנה ל-Ready.

אפשר גם להריץ את הפקודה הבאה כדי לבדוק את הסטטוס של הצמתים באשכול:

kubectl get nodes --kubeconfig=PATH_TO_KUBECONFIG

המסוף

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

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

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

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

  4. לוחצים על הכרטיסייה Nodes.

    מוצגת רשימה של מאגרי צמתים.

רשימת צמתים של צילומי מסך

‫CLI של gcloud

  1. מציגים ברשימה את מאגרי הצמתים באשכול:

    gcloud container bare-metal node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

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

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

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

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

  2. תיאור של מאגר צמתים:

    gcloud container bare-metal node-pools describe NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    מחליפים את NODE_POOL_NAME בשם של מאגר הצמתים.

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

הוספת מאגר צמתים חדש

kubectl

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

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

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

כדי להוסיף מאגרי צמתים חדשים לאשכול, יוצרים משאב nodepools.baremetal.cluster.gke.io חדש באשכול. בדוגמה הבאה, מאגר צמתים חדש בשם machine-learning-pool מתווסף למניפסט. מאגר הצמתים החדש כולל שני צמתים עם כתובות ה-IP‏ 10.200.0.7 ו-10.200.0.8:

apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
  name: machine-learning-pool
  namespace: cluster-abm-cluster
spec:
  clusterName: abm-cluster
  nodes:
  - address: 10.200.0.7
  - address: 10.200.0.8
  taints:
  - key: TAINT_KEY
    value: TAINT_VALUE
    effect: NoSchedule
  labels:
    key1: LABEL_1
    key2: LABEL_2

שומרים את ההגדרה בקובץ בשם machine-learning-pool.yaml ומחילים את ההגדרה על האשכול באמצעות הפקודה הבאה:

kubectl apply -f machine-learning-pool.yaml

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

  • ההגדרות של NodePool.spec.taints ושל NodePool.spec.labels מסונכרנות עם הצמתים. כל ההכתמות והתוויות שנוספו ישירות לצמתים יוסרו. מישור הבקרה לא מסיר את הכתמים והתוויות שמוסיפים ישירות במהלך תהליך הסנכרון. כדי לדלג על שלב ההתאמה הזה, אפשר להוסיף הערה לצומת עם baremetal.cluster.gke.io/label-taint-no-sync.

  • צריך ליצור את משאב מאגר הצמתים באותו מרחב שמות שבו נמצא האשכול המשויך, ומשאב מאגר הצמתים צריך להפנות לשם האשכול בשדה spec.clusterName.

המסוף

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

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

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

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

  4. לוחצים על הוספת מאגר צמתים.

  5. מזינים שם למאגר הצמתים.

  6. בשדה Nodes address 1, מזינים את כתובת ה-IP של מכונת צומת העובד.

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

  7. אפשר להוסיף תוויות Kubernetes ו/או Kubernetes taints.

  8. לוחצים על יצירה.

הסטטוס של מאגר הצמתים מוצג בכרטיסייה Nodes. יכול להיות שתצטרכו לרענן את הדף כדי לראות את הסטטוס המעודכן.

‫CLI של gcloud

gcloud container bare-metal node-pools create NODE_POOL_NAME \
  --cluster=USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION \
  --node-configs-from-file=NODE_POOL_CONFIG

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

  • NODE_POOL_NAME: שם שתבחרו למאגר הצמתים. השם צריך:

    • לכלול עד 40 תווים
    • להכיל רק תווים אלפאנומריים באותיות קטנות או מקף (-)
    • להתחיל בתו אלפביתי
    • להסתיים בתו אלפאנומרי
  • USER_CLUSTER_NAME: השם של אשכול המשתמשים.

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

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

  • NODE_POOL_CONFIG: הנתיב של קובץ תצורה שמתאר את מאגר הצמתים. לדוגמה:

    nodeConfigs:
    - nodeIP: 10.200.0.10
      labels:
        key1: value1
        key2: value2
    - nodeIP: 10.200.0.11
      labels:
        key3: value3
        key4: value4
    

אפשר גם לציין את הפרטים הבאים:

  • --node-labels=KEY=VALUE,...: רשימה מופרדת בפסיקים של תוויות Kubernetes (צמדי מפתח/ערך) שמוחלות על כל צומת במאגר.

  • --node-taints=KEY=VALUE:EFFECT,... רשימה מופרדת בפסיקים של Kubernetes taints

חל על כל צומת במאגר. הכתמים הם צמדי מפתח/ערך שמשויכים לאפקט. משתמשים ב-Taints עם tolerations לתזמון של Pod. צריך לציין אחד מהערכים הבאים בשביל EFFECT: NoSchedule,‏ PreferNoSchedule, ‏ NoExecute.

  • --validate-only מציינים את הדגל הזה אם רוצים לאמת את העדכון אבל לא לבצע שינויים.

עדכון מאגר צמתים

kubectl

כדי לעדכן מאגר צמתים, משנים את המשאב nodepools.baremetal.cluster.gke.io באשכול. אפשר לעדכן את המשאב ישירות באמצעות kubectl edit, או לעדכן את קובץ ה-YAML ולהשתמש ב-kubectl apply.

המסוף

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

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

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

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

  4. לוחצים על הכרטיסייה Nodes.

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

  6. בדף פרטים של מאגר הצמתים, לוחצים על עריכה.

  7. משנים את ההגדרות לפי הצורך ולוחצים על שמירה.

‫CLI של gcloud

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

    gcloud container bare-metal node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

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

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

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

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

  2. מריצים את הפקודה הבאה:

    gcloud container bare-metal node-pools update NODE_POOL_NAME  \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION \
      --node-configs-from-file=NODE_CONFIG_FILE
    

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

    • NODE_POOL_NAME בשם של מאגר הצמתים.

    • NODE_CONFIG_FILE: הנתיב של קובץ תצורה שמתאר את מאגר הצמתים. לדוגמה:

    nodeConfigs:
      - nodeIP: 10.200.0.10
        labels:
          key1: value1
      - nodeIP: 10.200.0.11
    

אפשר גם לציין את הפרטים הבאים:

  • --node-labels=KEY=VALUE,...: רשימה מופרדת בפסיקים של תוויות Kubernetes (צמדי מפתח/ערך) שמוחלות על כל צומת במאגר.

  • --node-taints=KEY=VALUE:EFFECT,... רשימה מופרדת בפסיקים של Kubernetes taints. הערכים האלה חלים על כל צומת במאגר. הכתמים הם צמדי מפתח/ערך שמשויכים להשפעה. משתמשים ב-Taints עם tolerations לתזמון של Pod. צריך לציין אחד מהערכים הבאים בשביל EFFECT: NoSchedule,‏ PreferNoSchedule, ‏ NoExecute.

  • --validate-only מציינים את הדגל הזה אם רוצים לאמת את העדכון אבל לא לבצע שינויים.

לדוגמה:

gcloud container bare-metal node-pools create default-pool \
    --cluster=user-cluster-1  \
    --location=us-west1 \
    --node-configs-from-file=node-pool-config.yaml \
    --node-taints=key1=val1:NoSchedule,key2=val2:NoExecute

הסרת מאגר צמתים

kubectl

אתם מסירים מאגרי צמתים באמצעות kubectl delete. לדוגמה, כדי להסיר את מאגר הצמתים שנוסף בקטע הקודם, machine-learning-pool, משתמשים בפקודה הבאה:

kubectl delete nodepool machine-learning-pool -n cluster-abm-cluster

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

המסוף

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

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

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

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

  4. לוחצים על הכרטיסייה Nodes (צמתים) ואז על מאגר הצמתים שרוצים למחוק.

  5. לוחצים על מחיקה.

  6. בתיבת הדו-שיח לאישור, מזינים את השם של מאגר הצמתים ולוחצים על אישור.

‫CLI של gcloud

gcloud container bare-metal node-pools delete NODE_POOL_NAME  \
  --cluster=USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION

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

  • NODE_POOL_NAME בשם של מאגר הצמתים.

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

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

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

הסרה של מאגר צמתי עובדים באשכול עלולה לגרום לשיבושים ב-Pod. אם יש תקציב להפרעות בפודים (PDB), יכול להיות שלא תהיה לכם אפשרות להסיר מאגר צמתים. מידע נוסף על מדיניות הפרעות ב-Pod זמין במאמר בנושא הסרת צמתים שנחסמו על ידי תקציב לשיבוש Pod.

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

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