המסמך הזה מיועד לבעלי אפליקציות ולאדמינים של פלטפורמות שמריצים את Google Distributed Cloud. במאמר הזה מוסבר איך להשתמש בהגדרות של תזמון, כמו זיקה ודחייה, למכונות וירטואליות שמשתמשות ב-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 מתזמן את המכונה הווירטואלית רק בצמתים שיש להם תווית שצוינה. - זיקה (Affinity): מציין את כללי הזיקה של מכונת ה-VM. היא כוללת זיקה (affinity) של צמתים וזיקה או אנטי-זיקה בין מכונות וירטואליות. מגדירים דרישה גמישה או מחמירה לתזמן:
-
preferredDuringSchedulingIgnoredDuringExecution: היא דרישה לא מחייבת. כלי התזמון ינסה למלא את הבקשה שלכם. אם המתזמן לא יכול למלא את הבקשה, יכול להיות שהמכונה הווירטואלית תתוזמן בצומת לא מועדף. requiredDuringSchedulingIgnoredDuringExecution: היא דרישה מחייבת. כלי התזמון ינסה להיענות לבקשה שלכם. אם אין צמתים זמינים שתואמים לדרישה, המכונה הווירטואלית לא מתוזמנת.
-
-
Tolerations: מאפשרת לתזמן את המכונה הווירטואלית בצמתים עם כתמי צבע תואמים.
אתם יכולים להגדיר כל אחת מההגדרות האלה כדי לתמוך בעומסי העבודה של המחשוב ובצרכים שלכם לגבי תזמון. בנוסף להגדרות התזמון, תזמון מכונות ה-VM תלוי במשאבים הזמינים.
VM Runtime ב-GDC משתמש באותה לוגיקה של תזמון מכונות וירטואליות ובאותה מבנה של מניפסט כמו Kubernetes כדי להקצות Pods לצמתים. מידע נוסף על הגדרות התזמון האלה זמין בקישורים הבאים:
העברת מכונות וירטואליות לצומת ספציפי
אם יש לכם צמתים עם הגדרות חומרה ספציפיות, אתם יכולים לתזמן מכונות וירטואליות כך שהן יפעלו רק בצמתים האלה. לדוגמה, יכול להיות ש-VM מסוים יזדקק לערכת שבבים מסוימת של CPU או לתמיכה ב-GPU. אתם יכולים להשתמש ב-nodeSelector בסיסי או בכללי קירבה גמישים יותר כדי לתזמן את הפעלת המכונות הווירטואליות בצמתים האלה.
nodeSelector
קובץ המניפסט VirtualMachine הבא משתמש ב-nodeSelector כדי להגדיר דרישה קשיחה לתזמון. אם אין צומת זמין שעומד בהגדרות התזמון, אי אפשר לתזמן את המכונה הווירטואלית.
יוצרים קובץ
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: 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_NAME-boot-dvחייב להיות קיים. מידע נוסף זמין במאמר יצירת דיסק אתחול של מכונה וירטואלית.-
שומרים את מניפסט המכונה הווירטואלית וסוגרים את העורך.
יוצרים את המכונה הווירטואלית ואת הגדרת התזמון באמצעות
kubectl:kubectl apply -f my-scheduled-vm.yaml
תזמון מכונות וירטואליות בצמתים עם כתמים
Taints הם מאפיין תזמון שמאפשר לצמתים לאפשר תזמון של מכונות וירטואליות להפעלה בהם רק אם יש להן tolerations שצוינו. אפשר להחיל taint על צומת, ואז להגדיר ב-manifest של VirtualMachine toleration כדי לאפשר למכונה הווירטואלית לפעול בצומת. מידע נוסף זמין במאמר בנושא 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: שם המפתח של הטולרנטיות שתואם לדחייה בצומת. -
KEY_VALUE: הערך של המפתח של הטולרנטיות שמתאים לדחייה (taint) בצומת.
דיסק האתחול בשם
VM_NAME-boot-dvחייב להיות קיים. מידע נוסף זמין במאמר יצירת דיסק אתחול של מכונה וירטואלית.-
שומרים את מניפסט המכונה הווירטואלית וסוגרים את העורך.
יוצרים את המכונה הווירטואלית ואת הגדרת התזמון באמצעות
kubectl:kubectl apply -f my-scheduled-vm.yaml