העברת צמתים ל-Linux cgroupv2

החל מגרסה 1.33, ‏ Google Kubernetes Engine‏ (GKE) מעביר אשכולות שפועלים ב-cgroupv1 ל-cgroupv2. בדף הזה מוסבר איך:

  • בודקים באיזה מצב של cgroup פועלים הצמתים של האשכול, ואם עומס העבודה עלול להיות מושפע ממעבר בין מצבים של cgroup.
  • העברת צמתים של אשכול GKE Autopilot או מאגרי צמתים של אשכול Standard אל cgroupv2.
  • ביטול הסכמה זמני להעברה אוטומטית של צמתים ב-GKE באמצעות cgroupv1 אל cgroupv2. אם באשכול שלכם מופעלים עומסי עבודה שעשויים להיות מושפעים ממעבר בין מצבי cgroup, צריך לפעול לפי ההוראות האלה.

אם אתם יודעים שעומסי העבודה שלכם פועלים כמצופה ב-cgroupv2, או שלא מושפעים מהגדרת מצב cgroup, אתם יכולים לדלג על קריאת הדף הזה. ‫GKE מעביר באופן אוטומטי אשכולות שפועלים ב-cgroupv1 אל cgroupv2 בגרסה 1.33 ואילך.

מידע על קבוצות בקרה ב-Linux

‫kubelet וזמן הריצה של הקונטיינר משתמשים בקבוצות בקרה (cgroups) של ליבת לינוקס לניהול משאבים, כמו הגבלת כמות המעבד או הזיכרון שלכל קונטיינר ב-Pod יש גישה אליהם. יש שני מצבים של מערכת המשנה cgroup בקרנל: cgroupv1 ו-cgroupv2. התמיכה ב-Kubernetes ב-cgroupv2 הושקה כגרסת אלפא ב-Kubernetes גרסה 1.18, כגרסת בטא ב-1.22 וכגרסת GA ב-1.25. פרטים נוספים זמינים במסמכי התיעוד בנושא cgroups v2 ב-Kubernetes.

מידע על הגדרת מצב cgroup באשכולות רגילים זמין במאמר בנושא אפשרויות להגדרת מצב cgroup ב-Linux.

איך מתבצע המעבר של GKE אל cgroupv2

ציר הזמן הבא מציג את המעבר של אשכולות קיימים ב-GKE לשימוש ב-cgroupv2:

  • בגרסאות קודמות ל-1.26, ‏cgroupv1 הייתה ברירת המחדל לצמתים. בגרסה 1.26 ואילך, ‏cgroupv2 היא ברירת המחדל לצמתים חדשים. לא חל שינוי בצמתים קיימים. מידע נוסף על מצב cgroup שבו פועלים אשכולות GKE כברירת מחדל זמין במאמר בדיקת מצב cgroup של צמתי אשכול.
  • בגרסה משנית 1.31, ‏ GKE מוציא משימוש את cgroupv1.
  • החל מגרסה 1.33, ‏ GKE מעביר אשכולות שפועלים ב-cgroupv1 ל-cgroupv2. כדי למנוע באופן זמני את המעבר האוטומטי הזה, צריך לציין במפורש שמאגר הצמתים ישתמש ב-cgroupv1.
  • בגרסה המשנית 1.35, ‏ GKE מסירה את התמיכה ב-cgroupv1.

כדי לראות את התזמון המשוער של שדרוגים אוטומטיים לגרסאות משניות מאוחרות יותר, כמו 1.31 ו-1.33, אפשר לעיין בלוח הזמנים המשוער של ערוצי ההפצה.

לפני שמתחילים

לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:

  • מפעילים את ממשק Google Kubernetes Engine API.
  • הפעלת Google Kubernetes Engine API
  • כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את gcloud CLI. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.

בדיקת מצב ה-cgroup של צמתי האשכול

מצב ברירת המחדל של cgroup תלוי בסוג האשכול או מאגר הצמתים ובגרסה. בגרסה 1.26 ואילך, ברירת המחדל היא cgroupv2. בגרסה 1.25 או בגרסאות קודמות, ברירת המחדל היא cgroupv1:

  • במקרים של אשכולות Autopilot ושל מאגרי צמתים חדשים מסוג Standard שנוצרו באמצעות הקצאה אוטומטית של צמתים, מצב cgroup מבוסס על הגרסה הראשונית של האשכול. אי אפשר להגדיר את מצב ה-cgroup במהלך יצירת אשכול Autopilot. בצמתים חדשים שהוקצו אוטומטית, אי אפשר להגדיר את המצב באופן שונה ממצב ברירת המחדל של cgroup על סמך הגרסה המשנית.
  • במאגרי צמתים של אשכולות Standard שנוצרו באופן ידני ללא הקצאה אוטומטית של צמתים, מצב cgroup מבוסס על הגרסה הראשונית של מאגר הצמתים או על הגדרת המערכת המותאמת אישית של הצמתים.

כדי לבדוק את מצב cgroup, פועלים לפי ההוראות בהתאם למצב האשכול.

טייס אוטומטי

מריצים את הפקודה הבאה:

gcloud container clusters describe CLUSTER_NAME \
    --format='value(nodePools[0].config.effectiveCgroupMode)'

מחליפים את CLUSTER_NAME בשם האשכול.

אם הפלט הוא EFFECTIVE_CGROUP_MODE_V2, האשכול פועל ב-cgroupv2. אם הפלט הוא EFFECTIVE_CGROUP_MODE_V1, האשכול פועל ב-cgroupv1.

אשכולות GKE Autopilot שנוצרו במקור עם GKE מגרסה 1.25 או מגרסה מוקדמת יותר מריצים cgroupv1 עד שתעבירו אותם.

רגילה

באשכולות GKE Standard, מצב cgroup מוגדר ברמת מאגר הצמתים. כדי לבדוק את המצב של מאגרי צמתים נפרדים, פועלים לפי ההוראות לאימות ההגדרה של cgroup. אם הצמתים באשכול כבר משתמשים ב-cgroupv2, לא צריך לבצע פעולות נוספות.

העברת צמתים אל cgroupv2

מומלץ להעביר את הצמתים הקיימים לפני ש-GKE יעביר אותם באופן אוטומטי בגרסה 1.33 ואילך.

כדי להעביר צמתים שמופעלים באמצעות cgroupv1, פועלים לפי השלבים הבאים:

  1. בדיקת מצב ה-cgroup של הצמתים אם הצמתים באשכול כבר משתמשים ב-cgroupv2, לא צריך לבצע פעולות נוספות.
  2. כדאי לעיין בשיקולים לגבי ההעברה, העברה ל-cgroup v2, כדי לוודא שעומסי העבודה מוכנים לשימוש בגרסה החדשה של ה-API.
  3. מעבירים את הצמתים של האשכול.

    טייס אוטומטי

    מגדירים במפורש את הצמתים של האשכול לשימוש ב-cgroupv2:

    gcloud container clusters update CLUSTER_NAME \
        --autoprovisioning-cgroup-mode=v2
    

    מחליפים את CLUSTER_NAME בשם האשכול.

    רגילה

    1. אם אתם משתמשים בהקצאה אוטומטית של צמתים לאשכול, מריצים את הפקודה הבאה כדי לוודא שמאגרי צמתים קיימים ועתידיים שנוצרו באמצעות הקצאה אוטומטית של צמתים משתמשים ב-cgroupv2:

      gcloud container clusters update CLUSTER_NAME \
          --autoprovisioning-cgroup-mode=v2
      

      מחליפים את CLUSTER_NAME בשם האשכול.

    2. במאגרי צמתים קיימים שנוצרו ללא הקצאת צמתים אוטומטית, צריך לעדכן את מאגר הצמתים כדי להוסיף את ההגדרות הבאות להגדרת מערכת הצמתים:

      linuxConfig:
        cgroupMode: 'CGROUP_MODE_V2'
      

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

      כשיוצרים מאגרי צמתים חדשים באופן ידני בלי הקצאה אוטומטית של צמתים, GKE משתמש ב-cgroupv2 כברירת מחדל.

ביטול זמני של ההסכמה להעברה אוטומטית אל cgroupv2

כדי להימנע באופן זמני מהעברה אוטומטית של צמתים שמופעלים ב-cgroupv1 ל-cgroupv2 עם גרסאות משניות 1.33 ואילך, צריך להגדיר במפורש את cgroupv1. אפשר גם להשתמש בהוראות האלה כדי לחזור באופן זמני ל-cgroupv1 אם העברת צמתים ל-cgroupv2 גרמה לבעיה בעומסי העבודה של האשכול.

טייס אוטומטי

מריצים את הפקודה הבאה עבור אשכולות שנוצרו במקור באמצעות גרסה 1.25 או גרסה מוקדמת יותר. אם האשכול נוצר עם גרסה 1.26 או גרסה מתקדמת יותר, אי אפשר להגדיר את מצב cgroup ל-cgroupv1.

מגדירים במפורש את הצמתים של האשכול לשימוש ב-cgroupv1:

gcloud container clusters update CLUSTER_NAME \
    --autoprovisioning-cgroup-mode=v1

מחליפים את CLUSTER_NAME בשם האשכול.

רגילה

כדי להמשיך להפעיל את cgroupv1 עם מאגר צמתים של אשכול GKE Standard בגרסה 1.33 ואילך, צריך לבצע את השלבים הבאים:

  1. אם אתם משתמשים בהקצאת משאבים אוטומטית של צמתים, והאשכול שלכם נוצר בגרסה 1.25 או בגרסה קודמת, אתם צריכים להשתמש בפקודה הבאה כדי לוודא שמאגרי צמתים קיימים ועתידיים שנוצרו באמצעות הקצאת משאבים אוטומטית של צמתים משתמשים ב-cgroupv1. אם האשכול נוצר עם גרסה 1.26 ואילך, אי אפשר להגדיר את מצב cgroup ל-cgroupv1:

    gcloud container clusters update CLUSTER_NAME \
        --autoprovisioning-cgroup-mode=v1
    

    מחליפים את CLUSTER_NAME בשם האשכול.

  2. במאגרי צמתים קיימים מסוג Standard, מעדכנים את מאגר הצמתים כדי להוסיף את ההגדרות הבאות להגדרת מערכת הצמתים:

    linuxConfig:
      cgroupMode: 'CGROUP_MODE_V1'
    

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

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

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