כיבוי מבוקר של צמתים ב-GKE ב-AWS

החל מגרסה 1.26, ‏GKE ב-AWS מפעיל באופן אוטומטי את הכיבוי המדורג של הצומת. התכונה הזו מנהלת את הסיום התקין של ה-Pods במהלך השבתת הצמתים. סיום תקין מאפשר ל-Pods לשמור את המצב שלהם ולשחרר משאבים לפני שהצומת מושבת. השיטה הזו לסיום הפעולה של ה-Pods מצמצמת את הסיכון לאובדן נתונים. בנוסף, כך מצמצמים את הסיכון להפרעות בפודים ובשירותים אחרים שמסתמכים על הפודים שמושבתים או מתקשרים איתם, וכך משפרים את העמידות של האשכולות.

איך זה עובד

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

המטרה של סיום תקין של צומת היא לסיים בצורה תקינה גם Pods לא של המערכת וגם Pods קריטיים של המערכת לפני שהצומת מושבת. נעשה שימוש בהגדרות ברירת המחדל הבאות:

  • ShutdownGracePeriod: 30 שניות
  • ShutdownGracePeriodCriticalPods: 15 שניות

ההגדרות האלה מאפשרות ל-Pods שאינם חלק מהמערכת להפסיק את הפעולה בצורה מסודרת תוך 15 שניות לפני שהפעולה שלהם מופסקת בכוח. לפודים קריטיים של המערכת יש 15 שניות להיסגר אחרי שהפודים שאינם של המערכת מסיימים את הפעולה. עם זאת, מכיוון שהתכונה פועלת על בסיס 'המאמץ הטוב ביותר', יכול להיות שצומת מסוים לא יוכל להיסגר בצורה תקינה בתוך פרק הזמן המיועד של 30 שניות.

מפעילים ומגבלות

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

  • כיבויים שבוצעו על ידי המשתמש
  • סיום של מכונות
  • תחזוקה מתוזמנת
  • הפחתה בהתאם לעומס (scaling) של אשכול

בתרחישים האלה, kubelet מזהה את אירוע השבתת הצומת ומתחיל את תהליך ההשבתה המבוקרת של הצומת.

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

  • ניתוקים מהרשת
  • תקלות בחומרה
  • משאבים לא מספיקים, כמו זיכרון או מעבד (CPU)
  • הפסקות חשמל לא צפויות.

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