במאמר הזה מוסבר על מידרוג אוטומטי של אשכולות, ששולט באופן אוטומטי בגודל של מאגרי הצמתים. התכונה 'מידרוג אוטומטי של אשכולות' מופעלת כשמציינים ערכים מינימליים ומקסימליים למספר הצמתים במאגר הצמתים. מציינים את הערכים האלה כשיוצרים מאגר צמתים או מעדכנים מאגר צמתים.
GKE ב-AWS משתמש בכלי לשינוי גודל אשכולות Kubernetes בקוד פתוח.
שינוי אוטומטי של גודל מאגר צמתים
המידרוג האוטומטי של האשכול משנה באופן אוטומטי את מספר הצמתים במאגר צמתים נתון, בהתאם לדרישות של עומסי העבודה. אין צורך להוסיף או להסיר צמתים באופן ידני או להקצות יותר מדי משאבים למאגרי הצמתים. במקום זאת, מציינים גודל מינימלי ומקסימלי למאגר הצמתים, והשאר אוטומטי.
אם צריך למחוק או להעביר משאבים בזמן התאמה אוטומטית לעומס של האשכול, יכול להיות שיהיו שיבושים זמניים בעומסי העבודה. לדוגמה, אם עומס העבודה שלכם מורכב מבקר עם רפליקה יחידה, יכול להיות שה-Pod של הרפליקה הזו יתוזמן מחדש לצומת אחר אם הצומת הנוכחי שלו יימחק. לכן, צריך לתכנן את עומסי העבודה כך שיוכלו להתמודד עם שיבושים פוטנציאליים, או לוודא שלא יהיו הפרעות לפודים קריטיים.
איך פועל המידרוג האוטומטי של האשכול
המידרוג האוטומטי של האשכול פועל על בסיס מאגר צמתים. כשמשתמשים ב-cluster autoscaler כדי להגדיר מאגר צמתים, מציינים גודל מינימלי ומקסימלי למאגר הצמתים. אפשר לשנות את הגודל המינימלי והמקסימלי כשיוצרים מאגר צמתים או כשמעדכנים מאגר צמתים.
המידרוג האוטומטי של אשכולות מגדיל או מקטין את הגודל של מאגר הצמתים באופן אוטומטי, על סמך בקשות המשאבים (ולא על סמך ניצול המשאבים בפועל) במאגר הצמתים הזה. המידרוג האוטומטי של אשכולות מוסיף צמתים אם אי אפשר לתזמן אובייקטים של Pod ואין מספיק קיבולת במאגר הצמתים כדי לעמוד בדרישות.
המידרוג האוטומטי של האשכול גם מסיר צמתים אם לא נעשה בהם שימוש מספיק, ואפשר לתזמן את כל אובייקטי ה-Pod במספר קטן יותר של צמתים. אם לא ניתן לנקז את הצומת בצורה תקינה אחרי 10 דקות, הצומת מסתיים בכפייה. אי אפשר להגדיר את התקופה הזו.
אם Pod מבקש מעט מדי משאבים (לדוגמה, אם ערכי ברירת המחדל לא מספיקים), המידרוג האוטומטי באשכול לא יתקן את המצב. כדי לוודא שהמידרוג האוטומטי של האשכול פועל בצורה מדויקת ככל האפשר, צריך ליצור בקשות מתאימות למשאבים עבור כל עומסי העבודה. מידע נוסף זמין במאמר בנושא ניהול משאבים עבור מאגרי תגים.
הערות של Pod והתנהגות של מידרוג אוטומטי של אשכול
המידרוג האוטומטי באשכול מתחשב בהערות מסוימות של Pod כשמתקבלות החלטות לגבי מידרוג. לדוגמה, התוסף cluster autoscaler תומך בהערות של Pod כמו "cluster-autoscaler.kubernetes.io/safe-to-evict": "false". ההערה הזו, כשהיא מוגדרת כ-false, מונעת את ההסרה של הצומת שמארח את ה-Pod במהלך אירוע של הקטנת קנה מידה. הבנה של ההערות האלה והשימוש בהן יכולים לעזור לכם לכוונן את ההתנהגות של הכלי לשינוי גודל אוטומטי כדי לעמוד בדרישות של עומס העבודה.
למידע נוסף על הערות של Pod וההשפעות שלהן על מידרוג אוטומטי של האשכול, אפשר לעיין במקורות המידע הבאים:
- אילו סוגים של pods יכולים למנוע מ-CA להסיר צומת? במאמר בנושא שאלות נפוצות לגבי שינוי גודל אוטומטי של אשכולות.
- מאמרים רשמיים בנושא Cluster Autoscaler של Kubernetes
קריטריוני הפעלה
המידרוג האוטומטי של האשכול מניח את ההנחות הבאות כשמשנים את הגודל של מאגר צמתים:
- אפשר להפעיל מחדש את כל אובייקטי ה-Pod המשוכפלים בצומת אחר, מה שעלול לגרום לשיבוש קצר. אם עומס העבודה לא יכול לסבול שיבושים, צריך להגדיר את עומס העבודה כך שיפעל במאגר צמתים עם השבתה של שינוי גודל אוטומטי. מידע נוסף זמין במאמר שליטה בתזמון באמצעות כתמי צבע של צמתים.
- המידרוג האוטומטי של האשכול יכול לבטל פעולות ידניות לניהול צמתים שאתם מבצעים.
- לכל הצמתים במאגר צמתים יחיד יש את אותו סט של תוויות.
- המידרוג האוטומטי של אשכולות בוחר קבוצת צמתים עם הכי פחות מעבד במצב סרק או זיכרון לא בשימוש אחרי הגדלת הקיבולת. ההתנהגות הזו משפיעה על מאגרי הצמתים שמתרחבים אם יש לכם צמתים בגדלים שונים (לדוגמה, צמתים עם מעבד חזק או צמתים עם זיכרון גדול) באותו אשכול.
גודל מינימלי ומקסימלי של מאגר צמתים
אפשר לציין את הגודל המינימלי והמקסימלי של כל מאגר צמתים באשכול באמצעות הדגלים min-nodes ו-max-nodes. כדי להשבית את שינוי הגודל האוטומטי, מגדירים את min-nodes ואת max-nodes לאותו מספר. המידרוג האוטומטי של האשכול מקבל החלטות לגבי שינוי הגודל במסגרת הגבולות האלה.
כשמגדירים את הגודל המקסימלי של מאגרי הצמתים, צריך לוודא שהוא גדול מספיק כדי להריץ את כל עומסי העבודה. אם במאגרי הצמתים באשכול אין מספיק זיכרון ומעבד (CPU) כדי להריץ את כל עומסי העבודה, יכול להיות שיהיו הפסקות בשירות.
שימוש ב-PodDisruptionBudget כדי להגן על עומסי עבודה
אפשר להגדיר את GKE ב-AWS כדי להגן מפני שיבושים בעומסי עבודה באמצעות PodDisruptionBudget. כשיוצרים PodDisruptionBudget, מציינים את המספר המינימלי של העתקים של Pod שצריכים להיות זמינים, או את המספר המקסימלי של העתקים של Pod שלא יכולים להיות זמינים בכל זמן נתון. מידע נוסף זמין במאמר בנושא הגדרת תקציב שיבושים לאפליקציה.
הגדלת הקיבולת מאפס צמתים
החל מגרסאות GKE on AWS הבאות, מידרוג אוטומטי של אשכולות תומך בהגדלת מספר הצמתים במאגרי צמתים מאפס צמתים:
- גרסה 1.29 ואילך
- גרסאות 1.28 מ-1.28.8-gke.800 ואילך
- גרסאות 1.27 מ-1.27.12-gke.800 ואילך
אם אתם משתמשים בגרסה קודמת, אתם צריכים לשדרג את האשכול לאחת מהגרסאות האלה כדי להשתמש בתכונה הזו. כדי להפעיל את התכונה הזו באשכולות קיימים, צריך לעדכן את האשכול לגרסה נתמכת, ואז לבצע עדכון בהדרגה של מאגרי הצמתים על ידי עדכון גרסת Kubernetes שלהם. מידע נוסף על עדכון מאגרי צמתים זמין במאמר עדכון מאגר צמתים.
המידרוג האוטומטי של האשכול מתחשב בתוויות ובדחיות שאתם מגדירים במאגרי צמתים כשמתקבלות החלטות לגבי שינוי גודל, גם כשאין צמתים זמינים להפניה. GKE on AWS מגדיר באופן אוטומטי את התוויות והתגים הדרושים של taint בקבוצת ה-Auto Scaling של AWS שמהווה את הבסיס למאגר הצמתים. מידע נוסף על התגים האלה זמין בקטע Auto-Discovery Setup בדף GitHub שמתאר את ההגדרה של מידרוג אוטומטי של אשכולות ב-AWS.
הגדרת התגים האלה של תוויות ודחיות מאפשרת ל-GKE ב-AWS ליצור תבניות מדויקות של צמתים באמצעות המידרוג האוטומטי של האשכול. תבניות של צמתים הן ייצוגים וירטואליים של צמתים שכוללים את ההגדרה, התוויות וההכתמות הנכונות של הצומת, גם כשאין צמתים פיזיים במאגר הצמתים. התבניות המדויקות של הצמתים מאפשרות למידרוג האוטומטי של האשכול לקבל החלטות נכונות לגבי הגדלת האשכול.
כשמגדירים taints במאגרי הצמתים, חשוב לזכור שיש מגבלה בקבוצות של AWS Auto Scaling: אם מחילים כמה taints עם אותו מפתח אבל עם שילובי ערך-אפקט שונים, רק ה-taint האחרון שהוחל עם המפתח הכפול נלקח בחשבון על ידי הכלי לשינוי גודל האשכול.
מידע נוסף
מידע נוסף על המידרוג האוטומטי של האשכולות ועל מניעת שיבושים זמין במקורות המידע הבאים:
- שאלות נפוצות בנושא מידרוג אוטומטי של אשכול Kubernetes
- איך מצמצמים את מספר הליבות?
- האם Cluster Autoscaler פועל עם
PodDisruptionBudgetבהקטנת קנה מידה?