הגדרת מדיניות ההוצאה של מכונות וירטואליות ב-Google Distributed Cloud

המסמך הזה מיועד לאדמינים של פלטפורמות שמריצים מכונות וירטואליות (VM) ב-Google Distributed Cloud. במאמר הזה מוסבר איך להגדיר את מדיניות ההוצאה מהזיכרון (eviction) שקובעת איך מכונות וירטואליות שמשתמשות ב-VM Runtime ב-GDC יכולות לעבור אוטומטית למארחים אחרים במהלך אירועי תחזוקה. הגדרות התצורה האלה מאפשרות למכונות וירטואליות להמשיך לפעול במארחים אחרים כשמשדרגים אשכול או מבצעים תחזוקה במארח.

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

כדי להשלים את המסמך הזה, צריך גישה לאשכול Google Distributed Cloud בגרסה 1.12.0 (anthosBareMetalVersion: 1.12.0) ומעלה. אפשר להשתמש בכל סוג של אשכול שיכול להריץ עומסי עבודה. אם צריך, אפשר לנסות את Google Distributed Cloud ב-Compute Engine או לעיין בסקירה הכללית על יצירת אשכולות.

הגדרות מדיניות בנושא פינוי

בעזרת Google Distributed Cloud אפשר להגדיר את התנהגות הצמתים כשמבצעים שדרוגים של אשכולות או כשמעבירים צמתים למצב תחזוקה. ‫VM Runtime ב-GDC משתמש במדיניות פינוי שקובעת איך האשכול מטפל במכונות וירטואליות שפועלות במהלך האירועים האלה.

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

אפשר להגדיר את ההגדרות הבאות של מדיניות ההסרה:

מאפיין (property) ברירת מחדל ערכים אפשריים
evictionStrategy LiveMigrate LiveMigrate, Restart
maxMigrationAttemptsPerVM 3 מספרים שלמים בטווח [1,5]
migrationTargetInitializationTimeout 30s כל מחרוזת תקינה של משך זמן, כמו 1m,‏ 2h או 1h30m

evictionStrategy

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

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

כשבוחרים באסטרטגיה LiveMigrate, זמן הריצה של מכונות וירטואליות ב-GDC חוזר לאסטרטגיה Restart עבור מכונות וירטואליות שלא ניתן להעביר.

maxMigrationAttemptsPerVM

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

המערכת מתעלמת מההגדרה הזו אם evictionStrategy מוגדר כ-Restart.

migrationTargetInitializationTimeout

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

המערכת מתעלמת מההגדרה הזו אם evictionStrategy מוגדר כ-Restart.

הפעלה והגדרה של מדיניות ההוצאה מהזיכרון

כדי להשתמש במדיניות ההוצאה מהזיכרון ב-VM Runtime ב-GDC, צריך להגדיר את ההגדרה evictionPolicy באובייקט VMRuntime של האשכול. ההגדרה הזו מופעלת כברירת מחדל. אם משדרגים מגרסה קודמת, צריך להפעיל את ההגדרה הזו באופן ידני.

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

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

  1. עורכים את VMRuntime המשאב המותאם אישית:

    kubectl edit vmruntime vmruntime
    
  2. מוסיפים או מעדכנים את הקטע evictionPolicy עם אובייקט ריק כדי להשתמש בהגדרות ברירת המחדל של מדיניות ההסרה, או מוסיפים את ההגדרות הרצויות:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      disableCDIUploadProxyVIP: false
      enabled: true
      evictionPolicy: {}
      useEmulation: false
    

    אם השדה evictionPolicy לא מאוכלס, למשל evictionPolicy: null או לא נכלל במניפסט, לא מתבצעת פעולה מיוחדת. המכונות הווירטואליות מוצאות בכוח.

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

    מיגרציה פעילה

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

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      disableCDIUploadProxyVIP: false
      enabled: true
      evictionPolicy:
        evictionStrategy: LiveMigrate
        maxMigrationAttemptsPerVM: 3
        migrationTargetInitializationTimeout: 30s
      useEmulation: false
    

    הפעלה מחדש

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

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      disableCDIUploadProxyVIP: false
      enabled: true
      evictionPolicy:
        evictionStrategy: Restart
      useEmulation: false
    
  3. שומרים וסוגרים את המשאב המותאם אישית VMRuntime בכלי העריכה.

    ‫VM Runtime on GDC מחיל עכשיו את מדיניות ההוצאה מהזיכרון על מכונות וירטואליות באשכול.

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