שליטה בתזמון באמצעות taints ו-tolerations

בדף הזה תוכלו לקרוא סקירה כללית על taints ו-tolerations ב-Google Distributed Cloud. כשמתזמנים פריסות של עומסי עבודה באשכול, כתמי הצומת עוזרים לקבוע באילו צמתים מותר להריץ אותם.

סקירה כללית

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

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

node taint מאפשר לסמן צומת כדי שהמתזמן יימנע משימוש בו עבור פודים מסוימים. תכונה משלימה, tolerations, מאפשרת לכם להגדיר Pods שאפשר להשתמש בהם בצמתים עם 'כתמים'.

התכונות Taints ו-Tolerations פועלות יחד כדי לוודא ש-Pods לא מתוזמנים לצמתים לא מתאימים.

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

אפקט תיאור
NoSchedule מערכות Pod שלא סובלות את ההכתמה הזו לא מתוזמנות בצומת, ומערכות Pod קיימות לא מפונות מהצומת.
PreferNoSchedule ‫Kubernetes לא מתזמן Pods שלא יכולים להתמודד עם ה-taint הזה בצומת.
NoExecute אם ה-Pod כבר פועל בצומת, הוא יסולק ממנו. אם הוא עדיין לא פועל בצומת, הוא לא יתוזמן בצומת.

היתרונות של הגדרת כתמי צבע לצמתים ב-Google Distributed Cloud

אפשר להגדיר כתמי צומת באמצעות הפקודה kubectl taint, אבל להגדרה של כתמי צומת באמצעות gkectl או מסוף Google Cloud יש את היתרונות הבאים לעומת kubectl:

  • הכתמים נשמרים כשמפעילים מחדש צומת או מחליפים אותו.
  • הכתמים נוצרים באופן אוטומטי כשמוסיפים צומת למאגר צמתים.
  • כשמשתמשים ב-gkectl כדי להוסיף דחיות (taint), הדחיות (taint) נוצרות באופן אוטומטי במהלך התאמה אוטומטית לעומס (automatic scaling) של האשכול. (בשלב הזה, לא ניתן להשתמש בהתאמה אוטומטית לעומס עבור מאגרי צמתים שנוצרו במסוףGoogle Cloud ).

הגדרת taints של צמתים

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

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

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

הגדרת כתמי רעל במאגר צמתים חדש

המסוף

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

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

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

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

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

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

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

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

  6. בקטע Node pool metadata (optional) (מטא-נתונים של מאגר צמתים (אופציונלי)), לוחצים על + Add Taint (+ הוספת כתם). מזינים את המפתח, הערך וההשפעה של הכתם. חוזרים לפי הצורך.

  7. אפשר גם ללחוץ על + הוספת תוויות Kubernetes. מזינים את המפתח ואת הערך של התווית. חוזרים לפי הצורך.

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

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

שורת הפקודה

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

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

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

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

  2. ממלאים את הקטע nodePools[i].taints. לדוגמה:

    nodePools:
    - name: "my-node-pool"
      taints:
      - key: "staging"
        value: "true"
        effect: "NoSchedule"
    
  3. אפשר למלא גם את הקטעים הבאים:

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

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

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

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

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

הגדרת כתמי צבע במאגר צמתים קיים

המסוף

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

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

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

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

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

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

  6. לוחצים על עריכה ליד הקטע Node pool metadata (optional) (מטא-נתונים של מאגר הצמתים (אופציונלי)) ואז על + Add Taint (הוספת כתם). מזינים את המפתח, הערך וההשפעה של הכתם. חוזרים לפי הצורך.

  7. לוחצים על סיום.

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

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

שורת הפקודה

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

  2. ממלאים את nodePools[i].taints לדוגמה:

    nodePools:
    - name: "my-node-pool"
      taints:
      - key: "staging"
        value: "true"
        effect: "NoSchedule"
    
  3. מריצים את הפקודה הבאה:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

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

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

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

הגדרת Pods כך שיוכלו לפעול למרות דחייה (taint)

כדי להגדיר את ה-Pods כך שיאפשרו taint, צריך לכלול את השדה tolerations במפרט של ה-Pods. בדוגמה הבאה, אפשר לתזמן את ה-Pod בצומת עם ה-Taint‏ dedicated=experimental:NoSchedule:

tolerations:
- key: dedicated
  operator: Equal
  value: experimental
  effect: NoSchedule

דוגמאות נוספות זמינות במאמר בנושא Taints and Tolerations.