מדיניות הזמינות הגבוהה של VM Runtime on GDC מאפשרת לכם לנהל את האופן שבו המכונות הווירטואליות (VM) מתאוששות כשצומת באשכול נכשל. שימוש במדיניות הזו עוזר לשמור על זמן הפעולה התקינה של עומסי העבודה במהלך שיבושים בלתי צפויים במארח.
כשמפעילים את VM Runtime on GDC, באשכול נוצר אובייקט VMHighAvailabilityPolicy בשם default. האובייקט הזה מגדיר אם האשכול מתזמן מחדש באופן אוטומטי את ה-VM בצומת אחר באשכול (Reschedule) או לא מבצע שום פעולה (Ignore). בהתחלה, אסטרטגיית השחזור שמוגדרת כברירת מחדל היא Reschedule.
אסטרטגיית ברירת המחדל לשחזור
אסטרטגיית ברירת המחדל לשחזור של Reschedule מתאימה במצב הבא:
באשכול יש לפחות שני צומתי עובדים.
הקצאת הדיסקים של ה-VM מתבצעת באמצעות מחלקת אחסון שמבוססת על קובץ רשת. כלומר, מחלקת האחסון מבוססת על מערכת קובצי רשת (NFS) שמתאמת נעילות קבצים של POSIX בין לקוחות שונים. מערכת קובצי רשת (NFS) היא דוגמה למחלקת אחסון שמבוססת על קובצי רשת.
אם המכונות הווירטואליות משתמשות באחסון מקומי או במערכת אחסון מבוססת-בלוקים, מומלץ להגדיר את אסטרטגיית השחזור שמוגדרת כברירת מחדל ל-Ignore. אנחנו ממליצים על כך מהסיבות הבאות:
אם המכונות הווירטואליות משתמשות באחסון מקומי, וצומת נכשל, אין דרך לשחזר את הנתונים המאוחסנים ולהעביר אותם לצומת חדש.
אם המכונות הווירטואליות משתמשות במערכת אחסון מבוססת-בלוקים, יכול להיות שאין לאחסון מספיק ערבויות לניתוק. זה יכול לגרום לגישה בו-זמנית לדיסק ולפגיעה בנתונים במהלך תזמון המכונה הווירטואלית.
בדיקת האובייקט VMHighAvailabilityPolicy
מוודאים שיש אובייקט VMHighAvailabilityPolicy:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get VMHighAvailabilityPolicy --namespace vm-system
מחליפים את USER_CLUSTER_KUBECONFIG בנתיב של קובץ ה-kubeconfig של אשכול המשתמש.
בפלט מוצג שיש אובייקט VMHighAvailabilityPolicy בשם default. בפלט אפשר לראות גם את הערך הנוכחי של defaultRecoveryStrategy. לדוגמה, הפלט הבא מראה שהערך הנוכחי של defaultRecoveryStrategy הוא Reschedule:
vm-system default 5m55s Reschedule 15s 1m30s
מציגים תצוגה מפורטת של האובייקט VMHighAvailabilityPolicy:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get VMHighAvailabilityPolicy \
--namespace vm-system --output yaml
פלט לדוגמה:
apiVersion: vm.cluster.gke.io/v1alpha1
kind: VMHighAvailabilityPolicy
metadata:
...
labels:
app.kubernetes.io/component: kubevirt
app.kubernetes.io/managed-by: virt-operator
kubevirt.io: virt-api
name: default
namespace: vm-system
..
spec:
defaultRecoveryStrategy: Reschedule
nodeHeartbeatInterval: 15s
nodeMonitorGracePeriod: 1m30s
שינוי אסטרטגיית ברירת המחדל לשחזור
במצבים מסוימים, מומלץ לשנות את אסטרטגיית השחזור שמוגדרת כברירת מחדל. לדוגמה, אם המכונות הווירטואליות משתמשות באחסון מקומי או במערכת קבצים שלא מבוססת על קובץ רשת, מומלץ לשנות את הערך של defaultRecoveryStrategy ל-Ignore.
כדי לשנות את הערך של defaultRecoveryStrategy, פותחים את האובייקט VMHighAvailabilityPolicy לעריכה:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG edit VMHighAvailabilityPolicy \
default --namespace vm-system
בכלי לעריכת טקסט, משנים את הערך של defaultRecoveryStrategy לערך הרצוי: Reschedule או Ignore. סוגרים את הכלי לעריכת טקסט.
שינוי אסטרטגיית ברירת המחדל לשחזור של VM
אסטרטגיית השחזור שמוגדרת כברירת מחדל חלה על כל המכונות הווירטואליות שפועלות באשכול. עם זאת, יכול להיות שתצטרכו לשנות את אסטרטגיית ברירת המחדל לשחזור של מכונות וירטואליות ספציפיות.
לדוגמה, נניח שרוב המכונות הווירטואליות שלכם מוקצות עם מחלקת אחסון מבוססת-קובץ-רשת, אבל כמה מכונות וירטואליות מוקצות עם מחלקת אחסון מבוססת-בלוק. לכל VM שמשתמש באחסון מבוסס-בלוקים, מומלץ לשנות את אסטרטגיית השחזור שמוגדרת כברירת מחדל, ולהגדיר את אסטרטגיית השחזור של ה-VM הספציפי ל-Ignore.
כדי לשנות את אסטרטגיית ברירת המחדל לשחזור של מכונה וירטואלית, מוסיפים הערה vm.cluster.gke.io/vm-ha-recovery-strategy לאובייקט VirtualMachineInstance (VMI) ולאובייקט GVM.
לדוגמה, הפקודות הבאות מגדירות את אסטרטגיית השחזור ל-Ignore במכונה וירטואלית בשם my-vm:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ annotate vmi my-vm \ vm.cluster.gke.io/vm-ha-recovery-strategy=Ignore --overwrite kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ annotate gvm my-vm \ vm.cluster.gke.io/vm-ha-recovery-strategy=Ignore --overwrite
אם רוצים להסיר את ההערות מאוחר יותר, צריך להשתמש במקף בסוף שם ההערה. לדוגמה:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ annotate vmi my-vm \ vm.cluster.gke.io/vm-ha-recovery-strategy- kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ annotate gvm my-vm \ vm.cluster.gke.io/vm-ha-recovery-strategy-
הגדרה מתקדמת
בנוסף להגדרת אסטרטגיית ברירת המחדל לשחזור, אתם יכולים להגדיר את האפשרויות הבאות:
מרווח בין פעימות לב של צומת: הזמן בין פעימות הלב שנשלחות על ידי כל צומת באשכול
תקופת החסד של מעקב הצמתים: משך הזמן המקסימלי שבו צומת יכול להיכשל בשליחת אות חיים לפני שהוא נחשב לא תקין.
ברוב המקרים, ערכי ברירת המחדל של מרווח האותות ותקופת החסד מתאימים. עם זאת, אתם יכולים לשנות את הערכים האלה אם אתם רוצים לכוונן את יחסי הגומלין בין מהירות השחזור לבין התקורה. מרווח קצר יותר של אותות פעימה יקצר את זמן השחזור, אבל גם יגדיל את התקורה. באשכול גדול, יכול להיות שתבחרו להאריך את מרווח האותות, כי אותות תכופים מצמתים רבים עלולים ליצור עומס בלתי קביל על שרת ה-API של Kubernetes.
כדי למנוע מצבים שבהם אות חיים אחד שלא התקבל גורם לכך שצומת נחשב לא תקין, מרווח הזמן בין אותות החיים צריך להיות קצר יותר מתקופת החסד.
מריצים את kubectl edit כדי לפתוח את האובייקט VMHighAvailabilityPolicy לעריכה. מגדירים את nodeHeartbeatInterval ו-nodeMonitorGracePeriod לערכים הרצויים.
spec: defaultRecoveryStrategy: Reschedule nodeHeartbeatInterval: 15s nodeMonitorGracePeriod: 1m30s