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

בחירת גרסת תיעוד:

ב-AlloyDB Omni Kubernetes operator, ‏ scheduling הוא תהליך של התאמת פודים חדשים של מסד נתונים לצמתים כדי לאזן את חלוקת הצמתים באשכול ולעזור באופטימיזציה של הביצועים. התאמה בין פודים וצמתים מתבצעת על סמך כמה קריטריונים ומשאבים זמינים, כמו מעבד (CPU) וזיכרון.

מידע נוסף על תזמון זמין במאמר תזמון, קדימות ופינוי במאמרי העזרה של Kubernetes.

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

מידע על הגדרת taints בצמתים זמין במאמר Taints and Tolerations במסמכי Kubernetes.

ציון של tolerations

כדי לתזמן את ה-Pods של AlloyDB Omni לצמתים שאין בהם Pods של אפליקציות אחרות, או להתאים taint ספציפי שהוגדר בצמתים האלה, צריך להחיל סבילות אחת או יותר על הצמתים באופן הבא:

  1. משנים את המניפסט של קלאסטר האופרטור AlloyDB Omni Kubernetes כדי לכלול סעיף tolerations בסעיף schedulingConfig של אחד מהסעיפים הבאים:
    • primarySpec למכונות ראשיות
    • spec read pool instances
         tolerations:
          - key: "TAINT_KEY"
            operator: "OPERATOR_VALUE"
            value: "VALUE"
            effect: "TAINT_EFFECT"
       

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

    • TAINT_KEY: השם הייחודי הקיים של מפתח הדחייה, כמו שם המארח של הצומת או ערך אחר שמוסק באופן מקומי והטולרנטיות חלה עליו. מפתח הדחייה כבר מוגדר בצומת. שדה ריק והערך OPERATOR_VALUE שמוגדר כ-exists מציינים שהטולרנטיות צריכה להתאים לכל הערכים ולכל המפתחות.
    • OPERATOR_VALUE: מייצג את הקשר של מפתח לקבוצת ערכים. מגדירים את הפרמטר לאחת מהאפשרויות הבאות:
      • exists: Kubernetes מתאים לכל ערך אם ההכתמה מוגדרת, ללא קשר לערך ההכתמה.
      • equal: אם הערכים שונים, Kubernetes לא מתזמן את ה-Pod לצומת. האופרטור דורש את הערך true של ה-taint.
    • VALUE: ערך ה-taint שאליו מתאים ה-toleration. אם האופרטור הוא Exists, הערך ריק. אחרת, הערך הוא מחרוזת רגילה. לדוגמה, true.
    • TAINT_EFFECT: מציין את השפעת הכתם שתואמת. שדה ריק מציין שצריך להתאים את כל ההשפעות של ההרעלה. מגדירים את הפרמטר לאחת מהאפשרויות הבאות:
      • NoSchedule: מערכת Kubernetes לא מתזמנת קבוצות Pod חדשות בצומת המזוהם.
      • PreferNoSchedule: מערכת Kubernetes לא תציב Pods חדשים בצומת המזוהם, אלא אם הדבר הכרחי.
      • NoExecute: Kubernetes מסלק קבוצות Pod קיימות שלא יכולות להתמודד עם הכתם.
  2. מחילים מחדש את המניפסט.

הגדרת זיקה לצומת

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

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

  1. משנים את המניפסט של אשכול מסד הנתונים כך שיכלול את הקטע nodeaffinity אחרי הקטע tolerations בקטע schedulingConfig של primarySpec עבור מופעים ראשיים או של spec עבור מופעים של מאגר לקריאה:
          nodeaffinity:
             NODE_AFFINITY_TYPE:
             - weight: WAIT_VALUE
               preference:
                 matchExpressions:
                 - key: LABEL_KEY
                   operator: OPERATOR_VALUE
                   values:
                   - LABEL_KEY_VALUE
        

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

    • NODE_AFFINITY_TYPE: מגדירים את הפרמטר לאחת מהאפשרויות הבאות:
      • requiredDuringSchedulingIgnoredDuringExecution: Kubernetes מתזמן את ה-Pod בדיוק על סמך הכללים המוגדרים.
      • preferredDuringSchedulingIgnoredDuringExecution: מתזמן Kubernetes מנסה למצוא צומת שעומד בכלל המוגדר לתזמון. עם זאת, אם אין צומת כזה, Kubernetes מתזמן לצומת אחר באשכול.
    • WAIT_VALUE: מציין את משקל ההעדפה של הצמתים שצוינו. ערכים גבוהים יותר מציינים העדפה חזקה יותר. הערכים החוקיים הם 1 עד 100.
    • LABEL_KEY: התווית של הצומת עבור המפתח שמשמש כאינדיקטור מיקום ומאפשר חלוקה שווה של ה-Pod באשכול. לדוגמה, disktype=ssd.
    • OPERATOR_VALUE: מייצג את הקשר של מפתח לקבוצת ערכים. מגדירים את הפרמטר לאחת מהאפשרויות הבאות:
      • In: מערך הערכים לא יכול להיות ריק.
      • NotIn: מערך הערכים לא יכול להיות ריק.
      • Exists: מערך הערכים חייב להיות ריק.
      • DoesNotExist: מערך הערכים חייב להיות ריק.
      • Gt: מערך הערכים חייב להכיל רכיב יחיד, שמתפרש כמספר שלם.
      • Lt: מערך הערכים חייב להכיל רכיב יחיד, שמתפרש כמספר שלם.
    • LABEL_KEY_VALUE: הערך של מפתח התווית. מגדירים את הפרמטר למערך של ערכי מחרוזת באופן הבא:
      • אם האופרטור הוא In או NotIn, מערך הערכים לא יכול להיות ריק.
      • אם האופרטור הוא Exists או DoesNotExist, מערך הערכים חייב להיות ריק.
      • אם האופרטור הוא Gt או Lt, מערך הערכים חייב להכיל רכיב יחיד, שמפורש כמספר שלם.
  2. מחילים מחדש את המניפסט.

דוגמה

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

    schedulingconfig:
      tolerations:
      - key: "node-role.kubernetes.io/control-plane"
        operator: "Exists"
        effect: "NoSchedule"
      nodeaffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
            - key: another-node-label-key
              operator: In
              values:
              - another-node-label-value

הדוגמה של טולרנטיות מאפשרת לתזמן את ה-Pod בצמתים שמסומנים כצמתים של מישור הבקרה, כי:

  • המפתח node-role.kubernetes.io/control-plane taint מציין שהצומת הוא צומת של מישור הבקרה.
  • האופרטור Exists אומר שהטולרנטיות תואמת לכל דחייה (taint) עם מפתח הדחייה (taint) שצוין, בלי קשר לערך.
  • האפקט NoSchedule אומר שלא תתבצע תזמון של Pod בצומת של מישור הבקרה, אלא אם יש לו התאמה לסבילות.

סוג ההעדפה של הצומת מציין שהכללים שמוגדרים להעדפה של הצומת הם מועדפים אבל לא נדרשים במהלך התזמון.preferredDuringSchedulingIgnoredDuringExecution אם הצמתים המועדפים לא זמינים, יכול להיות שה-Pod עדיין יתוזמן בצמתים אחרים. ערך המשקל 1 מציין העדפה חלשה. קריטריוני הבחירה של הצומת מוגדרים בקטע preference. בקטע matchExpressions מופיע מערך של ביטויים שמשמשים להתאמת צמתים. המפתח another-node-label-key מייצג את המפתח של תווית הצומת שצריך להתאים לה. האופרטור In מציין שלצומת צריך להיות מפתח עם אחד מהערכים שצוינו. למפתח another-node-label-key צריך להיות הערך another-node-label-value.

כלל ההעדפה לשימוש בצמתים לדוגמה מציין העדפה לתזמון של ה-Pod בצמתים עם התווית another-node-label-key והערך another-node-label-value. ההעדפה חלשה, ולכן היא לא דרישה מחייבת.

בדוגמה הזו משולבים הרכיבים הבאים:

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

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