מידע נוסף על תזמון זמין במאמר תזמון, קדימות ופינוי במאמרי העזרה של Kubernetes.
בדף הזה מוסבר איך מציינים סבילות והגדרות תזמון של זיקה לצומת עבור מופעים של מאגרים ראשיים ומאגרי קריאה במניפסט של Kubernetes.
מידע על הגדרת taints בצמתים זמין במאמר Taints and Tolerations במסמכי Kubernetes.
ציון של tolerations
כדי לתזמן את ה-Pods של AlloyDB Omni לצמתים שאין בהם Pods של אפליקציות אחרות, או להתאים taint ספציפי שהוגדר בצמתים האלה, צריך להחיל סבילות אחת או יותר על הצמתים באופן הבא:
- משנים את המניפסט של קלאסטר האופרטור AlloyDB Omni Kubernetes כדי לכלול סעיף
tolerationsבסעיףschedulingConfigשל אחד מהסעיפים הבאים:primarySpecלמכונות ראשיות-
specread 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 קיימות שלא יכולות להתמודד עם הכתם.
-
- מחילים מחדש את המניפסט.
הגדרת זיקה לצומת
מתזמן Kubernetes משתמש בזיקת צומת כקבוצת כללים כדי לקבוע איפה למקם Pod. זיקת צומת היא גרסה גמישה יותר של בוררי צומת.
כדי לציין אילו צמתים צריך לתזמן להרצת מסד הנתונים, פועלים לפי השלבים הבאים:
- משנים את המניפסט של אשכול מסד הנתונים כך שיכלול את הקטע
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, מערך הערכים חייב להכיל רכיב יחיד, שמפורש כמספר שלם.
- אם האופרטור הוא
-
- מחילים מחדש את המניפסט.
דוגמה
בדוגמה הבאה מוצגת תזמון של 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-planetaint מציין שהצומת הוא צומת של מישור הבקרה. - האופרטור
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. - העדפה של צמתים עם תווית ספציפית, אבל לא דרישה מחייבת. לכן, יש גמישות בתזמון.