העברת צמתים ל-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) של ליבת Linux לניהול משאבים, כמו הגבלת כמות המעבד או הזיכרון שלכל קונטיינר ב-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, אפשר לעיין בלוח הזמנים המשוער של ערוצי ההפצה.

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

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

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

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

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

  • במקרים של קלאסטרים של Autopilot ומאגרי צמתים חדשים של קלאסטרים רגילים שנוצרו באמצעות הקצאת צמתים אוטומטית, מצב 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. אם אתם משתמשים בהקצאת צמתים אוטומטית (NAP) לאשכול, מריצים את הפקודה הבאה כדי לוודא שמאגרי צמתים קיימים ועתידיים שנוצרו באמצעות הקצאת צמתים אוטומטית (NAP) משתמשים ב-cgroupv2:

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

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

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

      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'
    

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

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

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