המסמך הזה מיועד לבעלי אפליקציות ולאדמינים של פלטפורמות שמריצים את Google Distributed Cloud. במאמר הזה מוסבר איך להשתמש בהגדרות של תזמון, כמו זיקה (affinity) ודחייה (anti-affinity), למכונות וירטואליות שמשתמשות ב-VM Runtime ב-GDC.
לפני שמתחילים
כדי להשלים את המסמך הזה, תצטרכו גישה למקורות המידע הבאים:
- גישה לאשכול ב-Google Distributed Cloud בגרסה 1.12.0 (
anthosBareMetalVersion: 1.12.0) ומעלה. אפשר להשתמש בכל סוג של אשכול שיכול להריץ עומסי עבודה. אם צריך, אפשר להתנסות ב-Google Distributed Cloud ב-Compute Engine או לעיין בסקירה הכללית על יצירת אשכולות. - כלי הלקוח
virtctlמותקן כפלאגין שלkubectl. במקרה הצורך, מתקינים את כלי הלקוח virtctl.
סקירה כללית של הגדרות לוחות זמנים
הגדרות התזמון הן ערכים אופציונליים ב-VM Runtime ב-GDC. אם לא מציינים הגדרות תזמון, ברירת המחדל של מכונת ה-VM היא התנהגות התזמון של Kubernetes.
בהתנהגות התזמון שמוגדרת כברירת מחדל, המכונות הווירטואליות מפוזרות באשכול. מתזמן המשימות בודק את זמינות המשאבים הנוכחית של הצומת, כמו CPU וזיכרון, ומתזמן מכונות וירטואליות בצמתים כדי לחלק את דרישות המחשוב. אם אין לכם דרישות ספציפיות, אתם לא צריכים להגדיר תצורות של לוחות זמנים.
אפשר לתזמן מכונות וירטואליות באמצעות שלושת השדות הבאים:
-
nodeSelector: מציין תוויות של צמתים שצומת המארח של מכונה וירטואלית חייב לכלול. VM Runtime on GDC מתזמן את המכונה הווירטואלית רק בצמתים שיש להם תווית שצוינה. - קרבה: מציין את כללי הקרבה של המכונה הווירטואלית. הוא כולל קרבה של צומת וקרבה או אנטי-קרבה בין מכונות וירטואליות. מגדירים דרישה גמישה או מחייבת לתזמן:
-
preferredDuringSchedulingIgnoredDuringExecution: זו דרישה גמישה. מתזמן המשימות מנסה לפעול בהתאם לבקשה. אם הוא לא מצליח, יכול להיות שהמכונה הווירטואלית תתוזמן בצומת לא מועדף. requiredDuringSchedulingIgnoredDuringExecution: היא דרישה מחייבת. מתזמן הפגישות ינסה להיענות לבקשה שלכם. אם אין צמתים זמינים שתואמים לדרישה, המכונה הווירטואלית לא מתוזמנת.
-
-
Tolerations: מאפשרת לתזמן את המכונה הווירטואלית בצמתים עם כתמים תואמים.
אתם יכולים להגדיר כל אחת מההגדרות האלה של תזמון כדי לתמוך בעומסי העבודה של המחשוב ובצרכים שלכם לגבי תזמון. בנוסף להגדרות התזמון, התזמון של מכונות ה-VM תלוי במשאבים הזמינים.
VM Runtime ב-GDC משתמש באותה לוגיקה של תזמון מכונות וירטואליות ובאותו מבנה של מניפסט כמו Kubernetes כדי להקצות Pods לצמתים. מידע נוסף על הגדרות התזמון האלה זמין בקישורים הבאים:
הצבת מכונות וירטואליות בצומת ספציפי
אם יש לכם צמתים עם הגדרות חומרה ספציפיות, אתם יכולים לתזמן מכונות וירטואליות כך שהן יפעלו רק בצמתים האלה. לדוגמה, יכול להיות ש-VM מסוים יזדקק לערכת שבבים מסוימת של CPU או לתמיכה ב-GPU. אתם יכולים להשתמש ב-nodeSelector בסיסי או בכללי קירבה גמישים יותר כדי לתזמן את הפעלת המכונות הווירטואליות בצמתים האלה.
nodeSelector
קובץ המניפסט VirtualMachine הבא משתמש ב-nodeSelector כדי להגדיר דרישה קשיחה לתזמון. אם אין צומת זמין שעומד בהגדרות התזמון, אי אפשר לתזמן את המכונה הווירטואלית.
יוצרים קובץ
VirtualMachinemanifest, כמו my-scheduled-vm.yaml,בכלי העריכה הרצוי:nano my-scheduled-vm.yamlמעתיקים ומדביקים את מניפסט ה-YAML הבא:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: true scheduling: nodeSelector: kubernetes.io/hostname: NODE_NAMEמחליפים את הערכים הבאים:
-
VM_NAME: השם של ה-VM. -
NODE_NAME: הצמתים שרוצים לתזמן את המכונה הווירטואלית עליהם.
דיסק האתחול בשם
VM_NAME-boot-dvצריך להיות קיים. מידע נוסף זמין במאמר יצירת דיסק אתחול של מכונה וירטואלית.-
שומרים את מניפסט המכונה הווירטואלית וסוגרים את העורך.
יוצרים את המכונה הווירטואלית ואת הגדרת התזמון באמצעות
kubectl:kubectl apply -f my-scheduled-vm.yaml
תחום עניין משותף
במניפסט VirtualMachine הבא נעשה שימוש בהעדפה כדי להגדיר דרישה גמישה לתזמון. כלי התזמון מנסה לפעול לפי הבקשה שלכם. אם המתזמן לא יכול
למלא את הבקשה, המכונה הווירטואלית מתוזמנת בצומת לא מועדף.
יוצרים מניפסט
VirtualMachine, כמו my-scheduled-vm.yaml, בעורך לבחירתכם:nano my-scheduled-vm.yamlמעתיקים ומדביקים את מניפסט ה-YAML הבא:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: true scheduling: affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 preference: matchExpressions: - key: kubernetes.io/hostname operator: In values: - NODE_NAMEמחליפים את הערכים הבאים:
-
VM_NAME: השם של ה-VM. -
NODE_NAME: הצמתים שרוצים לתזמן את המכונה הווירטואלית עליהם.
דיסק האתחול בשם
VM_NAME-boot-dvצריך להיות קיים. מידע נוסף זמין במאמר יצירת דיסק אתחול של מכונה וירטואלית.-
שומרים את מניפסט המכונה הווירטואלית וסוגרים את העורך.
יוצרים את המכונה הווירטואלית ואת הגדרת התזמון באמצעות
kubectl:kubectl apply -f my-scheduled-vm.yaml
איך מונעים הצבה של מכונות וירטואליות בצומת ספציפי
יכול להיות שלמכונות וירטואליות מסוימות יש עומסי עבודה שלא פועלים בצומת מסוים. אפשר להשתמש בכללי אנטי-אפיניות כדי למנוע תזמון של מכונות וירטואליות בצמתים האלה.
במניפסט VirtualMachine הבא נעשה שימוש בהעדפה כדי להגדיר דרישה גמישה לתזמון. מתזמן הפגישות ינסה להיענות לבקשה שלכם. אם הכלי לתזמון לא יכול למלא את הבקשה, יכול להיות שהמכונה הווירטואלית תתוזמן בצומת לא מתאים.
יוצרים מניפסט
VirtualMachine, כמו my-scheduled-vm.yaml, בעורך לבחירתכם:nano my-scheduled-vm.yamlמעתיקים ומדביקים את מניפסט ה-YAML הבא:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VVM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: true scheduling: affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 preference: matchExpressions: - key: kubernetes.io/hostname operator: NotIn values: - NODE_NAMEמחליפים את הערכים הבאים:
-
VM_NAME: השם של ה-VM. -
NODE_NAME: הצומת שבו רוצים לתזמן את המכונה הווירטואלית.
דיסק האתחול בשם
VM_NAME-boot-dvצריך כבר להתקיים. מידע נוסף זמין במאמר יצירת דיסק אתחול של מכונה וירטואלית.-
שומרים את מניפסט המכונה הווירטואלית וסוגרים את העורך.
יוצרים את המכונה הווירטואלית ואת הגדרת התזמון באמצעות
kubectl:kubectl apply -f my-scheduled-vm.yaml
הפרדה בין מכונות וירטואליות
יכול להיות שבעומסי העבודה שלכם יש מכונות וירטואליות שצריך לפזר בין הצמתים כדי להשיג זמינות גבוהה, כמו מאגר של מכונות וירטואליות של קצה קדמי. אתם יכולים להשתמש בכללי אנטי-אפיניות בין מכונות וירטואליות כדי למנוע תזמון של מכונות וירטואליות יחד בצמתים.
במניפסט VirtualMachine הבא נעשה שימוש בהעדפה כדי להגדיר דרישה גמישה לתזמון. מתזמן הפגישות ינסה להיענות לבקשה שלכם. אם הכלי לתזמון לא יכול למלא את הבקשה, יכול להיות שהמכונה הווירטואלית תתוזמן בצומת לא מתאים.
יוצרים מניפסט
VirtualMachine, כמו my-scheduled-vm.yaml, בעורך לבחירתכם:nano my-scheduled-vm.yamlמעתיקים ומדביקים את מניפסט ה-YAML הבא:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME labels: KEY:VALUE spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: true scheduling: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: topologyKey: kubernetes.io/hostname labelSelector: matchLabels: KEY:VALUEמחליפים את הערכים הבאים:
-
VM_NAME: השם של ה-VM. -
KEY:VALUE: התוויתkey:valueשרוצים להחיל על מכונות וירטואליות שרוצים לתזמן על פני צמתים שונים. מידע נוסף זמין במאמר תוויות וסלקטורים.
דיסק האתחול בשם
VM_NAME-boot-dvצריך כבר להתקיים. מידע נוסף זמין במאמר יצירת דיסק אתחול של מכונה וירטואלית.-
שומרים את מניפסט המכונה הווירטואלית וסוגרים את העורך.
יוצרים את המכונה הווירטואלית ואת הגדרת התזמון באמצעות
kubectl:kubectl apply -f my-scheduled-vm.yaml
שמירה של מכונות וירטואליות ביחד
יכול להיות שבעומסי העבודה שלכם יש מכונות וירטואליות שצריך לשמור יחד בצמתים כדי לצמצם את זמן האחזור, כמו שכבת ביניים ומסד נתונים. אתם יכולים להשתמש בכללי קירבה בין מכונות וירטואליות כדי לתזמן מכונות וירטואליות יחד בצמתים.
במניפסט VirtualMachine הבא נעשה שימוש בהעדפה כדי להגדיר דרישה גמישה לתזמון. כלי התזמון מנסה לפעול לפי הבקשה שלכם. אם הכלי לתזמון לא יכול למלא את הבקשה, יכול להיות שהמכונה הווירטואלית תתוזמן בצומת לא מתאים.
יוצרים מניפסט
VirtualMachine, כמו my-scheduled-vm.yaml, בעורך לבחירתכם:nano my-scheduled-vm.yamlמעתיקים ומדביקים את מניפסט ה-YAML הבא:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME labels: KEY:VALUE spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: true scheduling: affinity: podAffinity: preferredDuringSchedulingIgnoredDuringExecution - podAffinityTerm: topologyKey: kubernetes.io/hostname labelSelector: matchLabels: KEY:VALUE weight: 100מחליפים את הערכים הבאים:
-
VM_NAME: השם של ה-VM. -
KEY:VALUE: צמד התוויותkey:valueשרוצים להחיל על מכונות ה-VM שרוצים לתזמן בין צמתים שונים. מידע נוסף זמין במאמר תוויות ובוררים.
דיסק האתחול בשם
VM_NAME-boot-dvצריך כבר להתקיים. מידע נוסף זמין במאמר יצירת דיסק אתחול של מכונה וירטואלית.-
שומרים את מניפסט המכונה הווירטואלית וסוגרים את העורך.
יוצרים את המכונה הווירטואלית ואת הגדרת התזמון באמצעות
kubectl:kubectl apply -f my-scheduled-vm.yaml
תזמון מכונות וירטואליות בצמתים עם כתמים
Taints הם מאפיין תזמון שמאפשר לצמתים לאפשר רק למכונות וירטואליות עם tolerations ספציפיים להיות מתוזמנות להפעלה בהם. אפשר להחיל taint על צומת, ואז להגדיר toleration במניפסט VirtualMachine כדי לאפשר למכונה וירטואלית לפעול בצומת. מידע נוסף זמין במאמר Taints and tolerations.
יוצרים מניפסט
VirtualMachine, כמו my-scheduled-vm.yaml, בעורך לבחירתכם:nano my-scheduled-vm.yamlמעתיקים ומדביקים את מניפסט ה-YAML הבא:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: true scheduling: tolerations: - key: KEY_NAME operator: "Equal" value: KEY_VALUE effect: "NoSchedule"מחליפים את הערכים הבאים:
-
VM_NAME: השם של ה-VM. -
KEY_NAME: שם המפתח של הטולרנטיות שתואם לדחייה (taint) בצומת. -
KEY_VALUE: הערך של המפתח של הסבילות שמתאים לכתם בצומת.
דיסק האתחול בשם
VM_NAME-boot-dvצריך כבר להתקיים. מידע נוסף זמין במאמר יצירת דיסק אתחול של מכונה וירטואלית.-
שומרים את מניפסט המכונה הווירטואלית וסוגרים את העורך.
יוצרים את המכונה הווירטואלית ואת הגדרת התזמון באמצעות
kubectl:kubectl apply -f my-scheduled-vm.yaml