אתם יכולים לקבוע את המיקום הפיזי של הצמתים של Google Kubernetes Engine (GKE) ביחס זה לזה באזור באמצעות מדיניות מיקום קומפקטית.
סקירה כללית
כשיוצרים מאגרי צמתים ועומסי עבודה באשכול GKE, אפשר להגדיר מדיניות מיקום קומפקטית, שמציינת שהצמתים או עומסי העבודה האלה צריכים להיות ממוקמים בקרבה פיזית זה לזה באזור. אם הצמתים קרובים יותר זה לזה, אפשר לצמצם את זמן האחזור ברשת בין הצמתים. זה יכול להיות שימושי במיוחד לעומסי עבודה של אצווה עם צימוד הדוק.
שימוש במיקום קומפקטי עם GKE Autopilot
ב-clusters של Autopilot, אפשר לבקש מיקום קומפקטי לעומסי עבודה ספציפיים על ידי הוספת סלקטורים של צמתים למפרט ה-Pod. אתם יכולים להשתמש במדיניות ברירת המחדל של Autopilot להצבת מכונות וירטואליות בצפיפות, או במדיניות קיימת של Compute Engine להצבת מכונות וירטואליות בצפיפות שמשתמשת בסדרת המכונות N2 או בסדרת המכונות N2D.
מגבלות
- GKE מקצה עומסי עבודה במיקום קומפקטי באותו אזור.
- אפשר להשתמש ב-GPU Pods או ב-
Balancedוב-PerformanceComputeClasses. - זמין רק בסוגי המכונות C2, C2D, C3, C3D, C4A, C4D, C4N, H3, H4D, N2, N2D ו-Z4D.
- זמין רק עם מעבדי GPU מסוג A100, L4 ו-H100.
- מיקום קומפקטי זמין ל-Pods שמקובצים בעד 1,500 צמתים.
הפעלת מדיניות למיקום קומפקטי
כדי להפעיל מיקום קומפקטי ב-GKE Autopilot, מוסיפים nodeSelector למפרט ה-Pod עם המפתחות הבאים:
cloud.google.com/gke-placement-group: המזהה שאתם מקצים לקבוצת ה-Pods שצריכים לפעול יחד, באותה קבוצת מיקום קומפקטית. כל קבוצת מיקומי מודעות מוגבלת ל-1,500 צמתים. מומלץ להגביל את קבוצת המיקום רק לעומסי העבודה שמרוויחים מהקיבוץ, ולפזר את עומסי העבודה לקבוצות מיקום נפרדות ככל האפשר.אחד מהמפתחות הבאים להגדרת סוג המשאב:
cloud.google.com/compute-class: "Balanced"cloud.google.com/gke-accelerator: "nvidia-tesla-a100"
cloud.google.com/placement-policy-name: אופציונלי, השם של מדיניות קיימת למיקום קומפקטי ב-Compute Engine. אפשר לציין מדיניות מותאמת אישית למיקום קומפקטי רק ב-GKE מגרסה 1.31.1-gke.2010000 ואילך.הוראות מפורטות זמינות בקטע יצירת מדיניות למיקום קומפקטי בדף הזה.
הדוגמה הבאה של מפרט Pod מאפשרת מיקום קומפקטי עם מדיניות מיקום קומפקטי בהתאמה אישית:
apiVersion: v1
kind: Pod
metadata:
# lines omitted for clarity
spec:
nodeSelector:
cloud.google.com/gke-placement-group: "placement-group-1"
cloud.google.com/compute-class: "Balanced"
cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME
מחליפים את PLACEMENT_POLICY_NAME בשם של מדיניות מיקום קומפקטית קיימת ב-Compute Engine. כדי להשתמש במדיניות ברירת המחדל למיקום קומפקטי ב-Autopilot, משמיטים את השורה cloud.google.com/placement-policy-name.
שימוש במדיניות מותאמת אישית למיקום קומפקטי ללא קבוצות מיקומים
כדי להשתמש במדיניות למיקום קומפקטי מותאמת אישית בלי קבוצות מיקום, צריך להוסיף את cloud.google.com/placement-policy-name בורר הצומת למפרט של ה-Pod או להגדיר custom compute class עם עדיפות למיקום.
הוספת בורר הצמתים cloud.google.com/placement-policy-name למפרט ה-Pod
הגישה הזו יכולה להיות שימושית אם רוצים להשתמש ב-JobSet כדי לתזמן כל משימה בנפרד, אבל גם רוצים להשתמש במדיניות מיקום קומפקטית בהתאמה אישית כדי למקם את הצמתים שמריצים את אותה משימה קרוב יותר זה לזה.
מכיוון ש-JobSet לא תומך בציון סלקטורים שונים של צמתים לכל משימה, אי אפשר להשתמש ב-JobSet עם קבוצות מיקום בתרחיש הזה. עם זאת, אפשר להשתמש בתמיכה המובנית של JobSet בטופולוגיות בלעדיות כדי להשיג את אותה התוצאה.
בדוגמה הבאה של מפרט Pod מופעל מיקום קומפקטי עם מדיניות למיקום קומפקטי מותאמת אישית של עומס עבודה מסוג JobSet:
apiVersion: jobset.x-k8s.io/v1alpha2
kind: JobSet
metadata:
name: my-jobset
annotations:
alpha.jobset.sigs.k8s.io/exclusive-topology: cloud.google.com/gke-nodepool
spec:
replicatedJobs:
- name: my-job
template:
spec:
# lines omitted for clarity
template:
spec:
nodeSelector:
cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME
cloud.google.com/machine-family: "n2"
# lines omitted for clarity
מחליפים את PLACEMENT_POLICY_NAME בשם של מדיניות מיקום קומפקטית קיימת ב-Compute Engine.
שימוש בסוג מחשוב מותאם אישית להגדרת מדיניות מיקום
לפרטים נוספים, אפשר לעיין במסמכים בנושא סוגי מחשוב בהתאמה אישית עם עדיפות למיקום.
במקום להוסיף nodeSelector עם שם המדיניות ישירות למפרט של עומס העבודה, אפשר להחיל מדיניות מיקום קומפקטית על ידי הגדרת השדה placement בהגדרה של ComputeClass. פרטים נוספים מופיעים במאמר בנושא סוגי מכונות וירטואליות בהתאמה אישית עם עדיפות למיקום.
שימוש במיקום קומפקטי עם GKE Standard
מגבלות
יש מגבלות על מיקום קומפקטי במאגרי צמתים רגילים ב-GKE:
- התכונה נתמכת רק במאגרי צמתים חדשים. אי אפשר להפעיל או להשבית מיקום קומפקטי במאגרי צמתים קיימים.
- האפשרות זמינה רק למאגרי צמתים שפועלים בתחום אחד.
- זמין רק בסוגי המכונות הבאים: A2, A3, A4, C2, C2D, C3, C3D, C4, C4D, G2, G4, H3, H4D, N2 ו-N2D. עם זאת, עבור A3 Ultra ו-A4, אנחנו ממליצים להשתמש בהזמנות עם טירגוט לחסימות במקום במיקום קומפקטי. פרטים נוספים מופיעים במאמר בנושא הזמנת קיבולת.
- תמיכה בעד 1,500 מכונות וירטואליות של Compute Engine בכל מדיניות. אם מספר הצמתים במאגר חורג מהמגבלה הזו בכל שלב, המאגר יידחה במהלך היצירה.
- אי אפשר לספק מדיניות מותאמת אישית של משאבים באמצעות הדגל
placement-policyבשדרוגים מסוג כחול-ירוק.
יצירת מדיניות למיקום קומפקטי
כדי ליצור מדיניות מיקום קומפקטית, ב-Google Cloud CLI מציינים את האפשרות placement-type=COMPACT במהלך יצירת מאגר צמתים או אשכול. בהגדרה הזו, מערכת GKE מנסה למקם צמתים במאגר צמתים בקרבה פיזית זה לזה.
כדי להשתמש במדיניות משאבים קיימת באשכול, מציינים את המיקום של המדיניות המותאמת אישית באמצעות הדגל placement-policy במהלך יצירת מאגר הצמתים או האשכול. כך אפשר להשתמש במיקומי מודעות מוזמנים, בכמה מאגרי צמתים עם אותה מדיניות מיקום ובאפשרויות מתקדמות אחרות למיקום מודעות. עם זאת, היא גם דורשת יותר פעולות ידניות מאשר ציון הדגל --placement-type=COMPACT. לדוגמה, אתם צריכים ליצור, למחוק ולתחזק את כללי המדיניות המותאמים אישית של המשאבים. חשוב לוודא שהמספר המקסימלי של מכונות וירטואליות נשמר בכל מאגרי הצמתים באמצעות מדיניות המשאבים. אם תגיעו למגבלה הזו לפני שמאגרי הצמתים שלכם יגיעו לגודל המקסימלי שלהם, הוספה של צמתים נוספים תיכשל.
אם לא מציינים את הדגלים placement-type ו-placement-policy, כברירת מחדל אין דרישות לגבי מיקום הצומת.
יצירת מדיניות מיקום קומפקטית באשכול חדש
כשיוצרים אשכול חדש, אפשר לציין מדיניות מיקום קומפקטית שתחול על מאגר הצמתים שמוגדר כברירת מחדל. לכל מאגר צמתים נוסף שתיצרו עבור האשכול, תצטרכו לציין אם להחיל מיקום קומפקטי.
כדי ליצור אשכול חדש שבו מדיניות המיקום הקומפקטי מוחלת על מאגר הצמתים שמוגדר כברירת מחדל, משתמשים בפקודה הבאה:
gcloud container clusters create CLUSTER_NAME \
--machine-type MACHINE_TYPE \
--placement-type COMPACT \
--max-surge-upgrade 0 \
--max-unavailable-upgrade MAX_UNAVAILABLE
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול החדש. -
MACHINE_TYPE: סוג המכונה שבה רוצים להשתמש לצמתים, שחייב להיות סוג מכונה נתמך שמופיע במגבלות של אשכול רגיל. -
--placement-type COMPACT: החלת מיקום קומפקטי על הצמתים במאגר הצמתים שמוגדר כברירת מחדל. -
MAX_UNAVAILABLE: המספר המקסימלי של צמתים שיכולים להיות לא זמינים בו-זמנית במהלך שדרוג של מאגר צמתים. למיקום קומפקטי, מומלץ להשתמש בשדרוגים מהירים ללא עליות פתאומיות כדי לשפר את הסיכוי למצוא צמתים במיקום משותף במהלך השדרוגים.
יצירת מדיניות למיקום קומפקטי באשכול קיים
בקלאסטר קיים, אפשר ליצור מאגר צמתים עם מדיניות מיקום קומפקטית.
כדי ליצור מאגר צמתים עם מדיניות מיקום קומפקטית, משתמשים בפקודה הבאה:
gcloud container node-pools create NODEPOOL_NAME \
--machine-type MACHINE_TYPE \
--cluster CLUSTER_NAME \
--placement-type COMPACT \
--max-surge-upgrade 0 \
--max-unavailable-upgrade MAX_UNAVAILABLE
מחליפים את מה שכתוב בשדות הבאים:
NODEPOOL_NAME: השם של מאגר הצמתים החדש.-
MACHINE_TYPE: סוג המכונה שבה רוצים להשתמש לצמתים, שחייב להיות סוג מכונה נתמך שמופיע במגבלות של אשכול רגיל. -
CLUSTER_NAME: השם של האשכול הקיים. -
--placement-type COMPACT: מציין שיש להחיל מיקום קומפקטי על הצמתים במאגר הצמתים החדש. -
MAX_UNAVAILABLE: המספר המקסימלי של צמתים שיכולים להיות לא זמינים בו-זמנית במהלך שדרוג של מאגר צמתים. כדי להשיג מיקום קומפקטי, מומלץ לבצע שדרוגים מהירים ללא עליות פתאומיות כדי למקסם את הסיכוי למצוא צמתים שמוצבים יחד במהלך השדרוגים.
יצירת מאגרי צמתים באמצעות מדיניות מיקום משותפת בהתאמה אישית
אפשר ליצור מדיניות משאבים באופן ידני ולהשתמש בה בכמה מאגרי צמתים.
יוצרים את מדיניות המשאבים באזור Google Cloud האשכול:
gcloud compute resource-policies create group-placement POLICY_NAME \ --region REGION \ --collocation collocatedמחליפים את מה שכתוב בשדות הבאים:
-
POLICY_NAME: השם של מדיניות המשאבים. -
REGION: האזור של האשכול.
-
יצירת מאגר צמתים באמצעות מדיניות מותאמת אישית של משאבים:
gcloud container node-pools create NODEPOOL_NAME \ --machine-type MACHINE_TYPE \ --cluster CLUSTER_NAME \ --placement-policy POLICY_NAME \ --max-surge-upgrade 0 \ --max-unavailable-upgrade MAX_UNAVAILABLEמחליפים את מה שכתוב בשדות הבאים:
NODEPOOL_NAME: השם של מאגר הצמתים החדש.-
MACHINE_TYPE: סוג המכונה שבה רוצים להשתמש לצמתים. הסוג צריך להיות סוג מכונה נתמך שמופיע במגבלות של אשכול רגיל. -
CLUSTER_NAME: השם של האשכול הקיים. -
MAX_UNAVAILABLE: המספר המקסימלי של צמתים שיכולים להיות לא זמינים בו-זמנית במהלך שדרוג של מאגר צמתים. כדי להשיג מיקום קומפקטי, מומלץ לבצע שדרוגים מהירים ללא עליות פתאומיות כדי למקסם את הסיכוי למצוא צמתים שמוצבים יחד במהלך השדרוגים.
שימוש במקום שמור ב-Compute Engine עם מדיניות למיקום קומפקטי
הזמנות עוזרות לכם להבטיח שהחומרה תהיה זמינה באזור מסוים, וכך להקטין את הסיכון לכשל ביצירת מאגר צמתים בגלל חוסר בחומרה.
יצירת בקשה לשמירת מקום שמציינת מדיניות למיקום קומפקטי:
gcloud compute reservations create RESERVATION_NAME \ --vm-count MACHINE_COUNT \ --machine-type MACHINE_TYPE \ --resource-policies policy=POLICY_NAME \ --zone ZONE \ --require-specific-reservationמחליפים את מה שכתוב בשדות הבאים:
-
RESERVATION_NAME: השם של ההזמנה. -
MACHINE_COUNT: מספר הצמתים שמוזמנים. -
MACHINE_TYPE: סוג המכונה שבה רוצים להשתמש לצמתים. הסוג צריך להיות סוג מכונה נתמך שמופיע במגבלות של אשכול רגיל. -
POLICY_NAME: השם של מדיניות המשאבים. -
ZONE: האזור שבו רוצים ליצור את ההזמנה.
-
יוצרים מאגר צמתים על ידי ציון מדיניות המיקום הקומפקטי וההזמנה שיצרתם בשלב הקודם:
gcloud container node-pools create NODEPOOL_NAME \ --machine-type MACHINE_TYPE \ --cluster CLUSTER_NAME \ --placement-policy POLICY_NAME \ --reservation-affinity specific \ --reservation RESERVATION_NAME \ --max-surge-upgrade 0 \ --max-unavailable-upgrade MAX_UNAVAILABLE
מחליפים את מה שכתוב בשדות הבאים:
NODEPOOL_NAME: השם של מאגר הצמתים החדש.-
MACHINE_TYPE: סוג המכונה שבה רוצים להשתמש לצמתים, שחייב להיות סוג מכונה נתמך שמופיע במגבלות של אשכול רגיל. -
CLUSTER_NAME: השם של האשכול הקיים.
יצירת עומס עבודה בצמתים שמשתמשים במיקום קומפקטי
כדי להפעיל עומסי עבודה בצמתים ייעודיים שמשתמשים במיקום קומפקטי, אפשר להשתמש בכמה מנגנונים של Kubernetes, כמו הקצאת פודים לצמתים ומניעת תזמון של פודים לא רצויים בקבוצת צמתים.
בדוגמה הבאה, אנחנו מוסיפים taint לצמתים הייעודיים ומוסיפים toleration ותאימות מתאימים ל-Pods.
מוסיפים taint לצמתים במאגר הצמתים שיש לו מדיניות למיקום קומפקטי:
kubectl taint nodes -l cloud.google.com/gke-nodepool=NODEPOOL_NAME dedicated-pool=NODEPOOL_NAME:NoScheduleבהגדרת עומס העבודה, מציינים את הסבילות הנדרשת ואת ההתאמה של הצומת. דוגמה עם Pod יחיד:
apiVersion: v1 kind: Pod metadata: ... spec: ... tolerations: - key: dedicated-pool operator: "Equal" value: "NODEPOOL_NAME" effect: "NoSchedule" affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: dedicated-pool operator: In values: - NODEPOOL_NAME
במיקומים מסוימים, יכול להיות שלא תהיה אפשרות ליצור מאגר צמתים גדול באמצעות מדיניות למיקום קומפקטי. כדי להגביל את הגודל של מאגרי צמתים כאלה למה שנדרש, כדאי ליצור מאגר צמתים לכל עומס עבודה שדורש מיקום קומפקטי.
שימוש במיקום קומפקטי להקצאת צמתים אוטומטית (NAP)
באמצעות הקצאת צמתים אוטומטית (NAP), GKE מקצה באופן אוטומטי מאגרי צמתים על סמך הביקוש למשאבי אשכול. מידע נוסף זמין במאמר בנושא הקצאת צמתים אוטומטית (NAP).
כדי להפעיל הקצאת צמתים אוטומטית (NAP) עם מיקום קומפקטי, מוסיפים nodeSelector למפרט של ה-Pod, כמו בדוגמה הבאה:
apiVersion: v1
kind: Pod
metadata:
# lines omitted for clarity
spec:
nodeSelector:
cloud.google.com/gke-placement-group: PLACEMENT_GROUP_IDENTIFIER
cloud.google.com/machine-family: MACHINE_FAMILY
cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME
# lines omitted for clarity
מחליפים את מה שכתוב בשדות הבאים:
-
PLACEMENT_GROUP_IDENTIFIER: המזהה שאתם מקצים לקבוצת ה-Pods שצריכה לפעול יחד, באותה קבוצת מיקום קומפקטית. -
MACHINE_FAMILY: השם של משפחת המכונות. משתמשים באחת מקבוצות המכונות שתומכות במיקום קומפקטי. מומלץ להשתמש במשפחות המכונות C2 או C2D לעומסי עבודה עם דרישות ביצועים של מחשוב ורשת.
PLACEMENT_POLICY_NAME: אופציונלי, השם של מדיניות קיימת למיקום קומפקטי ב-Compute Engine. GKE משתמש במדיניות למיקום קומפקטי שצוינה כשמופעלת הקצאת צמתים אוטומטית (NAP) ונוצר מאגר צמתים חדש כדי לקבץ את ה-Pods. אפשר לציין מדיניות למיקום קומפקטי מותאמת אישית רק ב-GKE מגרסה 1.31.1-gke.2010000 ואילך.הוראות מפורטות זמינות בקטע יצירת מדיניות למיקום קומפקטי בדף הזה.
אפשר להשמיט את המפתח cloud.google.com/machine-family אם הגדרת ה-Pod כבר מגדירה סוג מכונה שנתמך במיקום קומפקטי. לדוגמה, אם מפרט ה-Pod כולל nvidia.com/gpu והאשכול מוגדר לשימוש במעבדי GPU מסוג A100, לא צריך לכלול את המפתח cloud.google.com/machine-family.
בדוגמה הבאה מוצג מפרט של Pod שמגדיר בקשת nvidia.com/gpu והאשכול מוגדר לשימוש ב-GPU מסוג A100. ה-Pod spec הזה לא כולל את המפתח cloud.google.com/machine-family:
apiVersion: v1
kind: Pod
metadata:
...
spec:
...
nodeSelector:
cloud.google.com/gke-placement-group: PLACEMENT_GROUP_IDENTIFIER
cloud.google.com/gke-accelerator: "nvidia-tesla-a100"
resources:
limits:
nvidia.com/gpu: 2
מידע נוסף זמין במאמר בנושא הגדרת Pods לשימוש ב-GPU.
אופטימיזציה של גודל קבוצת מיקומי המודעות
מכיוון ש-GKE מוצא את המיקום הכי טוב לפריסות קטנות יותר, מומלץ להנחות את GKE להימנע מהרצת סוגים שונים של Pod באותה קבוצת מיקום. מוסיפים מפתח toleration עם המפתח cloud.google.com/gke-placement-group ומזהה המיקום הקומפקטי שהגדרתם.
הדוגמה הבאה היא מפרט של Pod שמגדיר טולרנטיות של Pod עם מיקום קומפקטי:
apiVersion: v1
kind: Pod
metadata:
...
spec:
...
tolerations:
- key: cloud.google.com/gke-placement-group
operator: "Equal"
value: PLACEMENT_GROUP_IDENTIFIER
effect: "NoSchedule"
מידע נוסף על הקצאת צמתים אוטומטית (NAP) עם טולרנטיות של Pod זמין במאמר בנושא הפרדה של עומסי עבודה.