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

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

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

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

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

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

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

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

  1. התחברות באמצעות חשבון Google

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

    gcloud components update
    

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

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

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

gkectl

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

  1. בקטע nodePools של קובץ התצורה של אשכול המשתמשים, ממלאים את הפרטים.

    חובה לציין את השדות הבאים:

    • nodePools.[i].name
    • nodePools[i].cpus
    • nodePools.[i].memoryMB
    • nodePools.[i].replicas

    השדות הבאים הם אופציונליים. אם לא כוללים את התגים nodePools[i].bootDiskSizeGB או nodePools[i].osImageType, המערכת משתמשת בערכי ברירת המחדל.

    • nodePools[i].labels
    • nodePools[i].taints
    • nodePools[i].bootDiskSizeGB
    • nodePools[i].osImageType
    • nodePools[i].vsphere.datastore
    • nodePools[i].vsphere.tags
  2. מריצים את הפקודה הבאה:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

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

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

    • USER_CLUSTER_CONFIG עם הנתיב לקובץ התצורה של אשכול המשתמשים.

הגדרה לדוגמה

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

  • pool-1: מציינים רק את מאפייני החובה המינימליים
  • pool-2: כולל vsphere.datastore וגם vsphere.tags
  • pool-3: כולל taints וגם labels
  • pool-4: כולל osImageType וגם bootDiskSizeGB
nodePools:
- name: pool-1
  cpus: 4
  memoryMB: 8192
  replicas: 5
- name: pool-2
  cpus: 8
  memoryMB: 16384
  replicas: 3
  vsphere:
    datastore: my_datastore
    tags:
    - category: "purpose"
      name: "testing"
- name: pool-3
  cpus: 4
  memoryMB: 8192
  replicas: 5
  taints:
    - key: "example-key"
      effect: NoSchedule
  labels:
    environment: production
    app: nginx
- name: pool-4
  cpus: 4
  memoryMB: 8192
  replicas: 5
  osImageType: cos
  bootDiskSizeGB: 40

המסוף

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

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

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

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

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

  5. מגדירים את מאגר הצמתים:

    1. מזינים את שם מאגר הצמתים.
    2. מזינים את מספר vCPUs לכל צומת במאגר (מינימום 4 לכל עובד באשכול משתמשים).
    3. מזינים את גודל הזיכרון במביבייט (MiB) לכל צומת במאגר (מינימום 8,192MiB לכל צומת עובד באשכול משתמשים, והערך חייב להיות כפולה של 4).
    4. בשדה Nodes, מזינים את מספר הצמתים במאגר (מינימום 3).
    5. בוחרים את סוג תמונת מערכת ההפעלה: Ubuntu Containerd או COS.

    6. מזינים את גודל דיסק האתחול בגיביבייט (GiB) (ברירת המחדל היא 40GiB).

  6. בקטע Node pool metadata (optional) (מטא-נתונים של מאגר צמתים (אופציונלי)), אם רוצים להוסיף labels (תוויות) ו-taints (הכתמות) של Kubernetes, מבצעים את הפעולות הבאות:

    1. לוחצים על + הוספת תוויות Kubernetes. מזינים את המפתח ואת הערך של התווית. חוזרים לפי הצורך.
    2. לוחצים על + הוספת כתם. מזינים את המפתח, הערך וההשפעה של הכתם. חוזרים לפי הצורך.
  7. לוחצים על יצירה.

  8. Google Cloud במסוף מוצג Cluster status: changes in progress. לוחצים על הצגת פרטים כדי לראות את תנאי סטטוס המשאב והודעות הסטטוס.

‫CLI של gcloud

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

gcloud container vmware node-pools create NODE_POOL_NAME \
  --cluster=USER_CLUSTER_NAME  \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION \
  --image-type=IMAGE_TYPE  \
  --boot-disk-size=BOOT_DISK_SIZE \
  --cpus=vCPUS \
  --memory=MEMORY \
  --replicas=NODES

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

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

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

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

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

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

    • BOOT_DISK_SIZE: גודל דיסק האתחול בגיביבייט (GiB) לכל צומת במאגר. הנפח המינימלי הוא 40GiB.

    • vCPUs: מספר ה-vCPU לכל צומת במאגר הצמתים. הערך המינימלי הוא 4.

    • MEMORY: גודל הזיכרון במביבייט (MiB) לכל צומת במאגר. הערך המינימלי הוא 8,192MiB לכל צומת עובד באשכול משתמשים, והערך חייב להיות כפולה של 4.

    • NODES: מספר הצמתים במאגר הצמתים. המינימום הוא 3.

    לדוגמה:

    gcloud container vmware node-pools create default-pool \
      --cluster=user-cluster-1  \
      --location=us-west1 \
      --image-type=ubuntu_containerd  \
      --boot-disk-size=40 \
      --cpus=8 \
      --memory=8192 \
      --replicas=5
    

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

    • --enable-load-balancer: רלוונטי רק למאזן העומסים MetalLB. אם מציינים את ההגדרה הזו, אפשר להפעיל את הרמקול של MetalLB בצמתים במאגר. צריך להפעיל לפחות מאגר צמתים אחד בשביל איזון העומסים של MetalLB.

    • --image=IMAGE: השם של תמונת מערכת ההפעלה ב-vCenter.

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

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

    לדוגמה:

    gcloud container vmware node-pools create default-pool \
        --cluster=user-cluster-1  \
        --location=us-west1 \
        --image-type=ubuntu_containerd  \
        --boot-disk-size=40 \
        --cpus=8 \
        --memory=8192 \
        --replicas=5 \
        --node-taints=key1=val1:NoSchedule,key2=val2:NoExecute
    

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

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

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

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

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

כדי לעדכן מאגר צמתים באשכול משתמשים:

gkectl

  1. משנים את הערכים בשדות שרוצים לשנות בקטע nodePools של קובץ ההגדרה של אשכול המשתמשים.

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

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

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

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

    • USER_CLUSTER_CONFIG עם הנתיב לקובץ התצורה של אשכול המשתמשים.

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

כדי לעדכן מאגר צמתים כך שישתמש ב-osImageType אחר, צריך להשתמש בשורת הפקודה. כדי לשנות את osImageType שמשמש את מאגר הצמתים, מעדכנים את קובץ התצורה של מאגר הצמתים, כמו בדוגמה הבאה, ומריצים את gkectl update cluster.

nodePools:
- name: np-1
  cpus: 4
  memoryMB: 8192
  replicas: 3
  osImageType: ubuntu_containerd

המסוף

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

  • מספר העותקים המשוכפלים
  • זיכרון
  • מספר יחידות ה-vCPU

כדי לעדכן שדות אחרים, צריך להשתמש ב-CLI של gcloud או ב-gkectl.

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

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

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

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

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

  5. לוחצים על השם של מאגר הצמתים שרוצים לשנות.

  6. לוחצים על עריכה לצד השדה שרוצים לשנות, ואז לוחצים על סיום.

  7. לוחצים על כדי לחזור לדף הקודם.

  8. Google Cloud במסוף מוצג Cluster status: changes in progress. לוחצים על הצגת פרטים כדי לראות את תנאי סטטוס המשאב והודעות הסטטוס.

‫CLI של gcloud

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

    gcloud container vmware node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    
  2. מריצים את הפקודה הבאה כדי לעדכן את מאגר הצמתים:

    gcloud container vmware node-pools update NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION \
      --ATTRIBUTE_TO_UPDATE \
      ...
    

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

    • NODE_POOL_NAME: השם של מאגר הצמתים שרוצים לעדכן.

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

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

    • ATTRIBUTE_TO_UPDATE: דגל אחד או יותר לעדכון מאפייני מאגר הצמתים. לדוגמה, כדי לשנות את מספר ה-vCPU והצמתים במאגר, מריצים את הפקודה הבאה.

    gcloud container vmware node-pools update default-pool \
        --cluster=user-cluster-1  \
        --project=example-project-12345
        --location=us-west1 \
        --cpus=10 \
        --replicas=6
    

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

בדיקת השינויים

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

gkectl

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

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes -o wide

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

המסוף

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

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

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

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

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

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

‫CLI של gcloud

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

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

מחיקת מאגר צמתים

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

כדי למחוק מאגר צמתים מאשכול משתמשים:

gkectl

  1. מוודאים שאין עומסי עבודה שפועלים בצמתים המושפעים.

  2. מסירים את ההגדרה שלו מהקטע nodePools בקובץ התצורה של אשכול המשתמשים.

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

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

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

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

    • [USER_CLUSTER_CONFIG] עם הנתיב לקובץ התצורה של אשכול המשתמשים.

המסוף

  1. מוודאים שאין עומסי עבודה שפועלים בצמתים המושפעים.

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

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

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

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

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

  6. לוחצים על השם של מאגר הצמתים שרוצים למחוק.

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

  8. לוחצים על כדי לחזור לדף הקודם.

  9. Google Cloud במסוף מוצג Cluster status: changes in progress. לוחצים על הצגת פרטים כדי לראות את תנאי סטטוס המשאב והודעות הסטטוס.

‫CLI של gcloud

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

    gcloud container vmware node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    
  2. מריצים את הפקודה הבאה כדי למחוק את מאגר הצמתים:

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

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

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

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

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

פתרון בעיות

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

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

  • אפשר גם לעיין במאמר בנושא פתרון בעיות בעדכונים של Google Distributed Cloud.

  • לא ימשיך אחרי Creating node MachineDeployment(s) in user cluster….

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

    1. מריצים את הפקודה kubectl get nodes כדי לקבל את המצב של הצמתים.
    2. אם יש צמתים שלא מוכנים, מריצים את הפקודה kubectl describe node NODE_NAME כדי לקבל פרטים.