אופטימיזציה של הביצועים של Autopilot Pod באמצעות בחירה של סדרת מכונות

במאמר הזה מוסבר איך להציב עומסי עבודה בסדרה ספציפית של מכונות Compute Engine, כדי לשפר את הביצועים של עומסי העבודה באשכולות של Google Kubernetes Engine (GKE) Autopilot.

חשוב לוודא שאתם מכירים את הנושאים הבאים:

איך פועלת בחירת סדרת המכונות

אתם יכולים להוסיף בורר צומתי cloud.google.com/machine-family למפרט ה-Pod כדי ש-Autopilot יקצה חומרת Compute Engine ספציפית לאותו Pod. לדוגמה, אתם יכולים לבחור את סדרת המכונות C3 לפודים שצריכים יותר כוח מעבד, או את סדרת המכונות N1 לפודים שצריכים יותר זיכרון. כדי להריץ את עומס העבודה בצורה אופטימלית, Autopilot מקצה את אחת מהמכונות עם קונפיגורציה מוגדרת (predefined) מסדרת המכונות שבחרתם.

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

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

  • עומסי עבודה עם פרצי שימוש: אתם יכולים להגדיר Pods לפרצי שימוש בקיבולת המשאבים שלא בשימוש בצומת, על ידי הגדרת מגבלות משאבים גבוהות יותר מהבקשות שלכם. פרטים נוספים זמינים במאמר הגדרת התפרצות Pod ב-GKE.

תכנון צומת ייעודי לכל Pod

אם יש לכם עומסי עבודה שדורשים הרבה משאבי מעבד (CPU) וגישה אמינה לכל המשאבים של הצומת, אתם יכולים להגדיר את ה-Pod כך ש-Autopilot ימקם Pod שמבקש סדרת מכונות בצומת משלו.

מומלץ להשתמש בצמתים ייעודיים לכל Pod כשמריצים עומסי עבודה גדולים שדורשים הרבה משאבי מעבד (CPU), כמו עומסי עבודה של אימון AI/ML או עומסי עבודה של מחשוב עתיר ביצועים (HPC).

בחירה בין תזמון של כמה פודים לבין תזמון של פוד אחד

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

תמחור

החיוב מתבצע על המכונה הווירטואלית הבסיסית ועל כל חומרה שמצורפת אליה על ידי Compute Engine, בתוספת תשלום על ניהול הצמתים של Autopilot ועל יכולת ההתאמה לעומס. פרטים נוספים זמינים במאמר התמחור של GKE.

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

לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:

  • מפעילים את Google Kubernetes Engine API.
  • הפעלת Google Kubernetes Engine API
  • כדי להשתמש ב-Google Cloud CLI למשימה הזו, מתקינים ואז מאתחלים את ה-CLI של gcloud. אם כבר התקנתם את ה-CLI של gcloud, הריצו את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שבגרסאות קודמות של ה-CLI של gcloud אי אפשר להריץ את הפקודות שבמסמך הזה.
  • מוודאים שיש לכם אשכול Autopilot קיים שפועל בגרסה 1.30.1-gke.1396000 ואילך. כדי ליצור אשכול, קראו את המאמר יצירת אשכול Autopilot.

בחירת סדרת מכונות

בקטע הזה מוסבר איך לבחור סדרה ספציפית של מכונות Compute Engine ב-Pod.

  1. שומרים את המניפסט הבא בתור machine-series-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: machine-series-pod
    spec:
      nodeSelector:
        cloud.google.com/machine-family: MACHINE_SERIES
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 5
            memory: "25Gi"
          limits:
            cpu: 20
            memory: 100Gi
    

    מחליפים את MACHINE_SERIES בסדרת המכונות של Compute Engine לפוד, כמו c3. בקטע סדרות מכונות נתמכות שבדף הזה מפורטים הערכים הנתמכים.

  2. פורסים את ה-Pod:

    kubectl apply -f machine-series-pod.yaml
    

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

שימוש ב-SSD מקומיים

פודים שבוחרים סדרת מכונות יכולים להשתמש בכונני SSD מקומיים לאחסון זמני, אם מציינים סדרת מכונות שמציעה כונן SSD מקומי. ב-Autopilot, בקשות לאחסון זמני נלקחות בחשבון כשבוחרים סוג מכונה של Compute Engine בשביל ה-Pod.

מידע נוסף זמין במאמר שימוש באחסון זמני שמגובה ב-SSD מקומי באשכולות Autopilot.

בקשת צומת ייעודי ל-Pod

אם לפוד יש דרישות ביצועים ספציפיות, כמו גישה אמינה לכל המשאבים של הצומת, אתם יכולים לבקש צומת ייעודי לכל פוד על ידי ציון בורר הצומת cloud.google.com/compute-class: Performance יחד עם בורר הצומת של סדרת המכונות. כך Autopilot ימקם את ה-Pod בצומת חדש שמשתמש בסדרת המכונות שצוינה ומוקדש לאותו Pod. בורר הצמתים הזה גם מונע מ-Autopilot לתזמן Pods אחרים בצומת הזה.

  1. שומרים את המניפסט הבא בתור dedicated-node-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: dedicated-node-pod
    spec:
      nodeSelector:
        cloud.google.com/machine-family: MACHINE_SERIES
        cloud.google.com/compute-class: Performance
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 12
            memory: "50Gi"
            ephemeral: "200Gi"
    

    מחליפים את MACHINE_SERIES בסדרת מכונות נתמכת שתומכת גם בתזמון של Pod אחד לכל צומת. אם סדרת המכונות שצוינה לא תומכת בתזמון של Pod אחד לכל צומת, הפריסה תיכשל ותופיע הודעת שגיאה.

  2. פורסים את ה-Pod:

    kubectl apply -f dedicated-node-pod.yaml
    

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

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

סדרות מכונות נתמכות

הבורר machine-family תומך בסדרות המכונות הבאות:

אם לא תציינו סדרת מכונות כשתבחרו את סוג הביצועים, GKE ישתמש בסדרת המכונות C4 אם סוגי המכונות C4 זמינים באזור.

כדי להשוות בין סדרות המכונות האלה ותרחישי השימוש שלהן, קראו את המאמר השוואה בין סדרות של מכונות במסמכי התיעוד של Compute Engine.

מגבלות

  • ה-Performance ComputeClass המוגדר מראש לא תומך בסוגי מכונות Bare Metal, כמו c3-standard-192-metal,‏ c4a-standard-72-metal ו-c4d-standard-384-metal. כדי להשתמש בסוגי המכונות האלה עם Autopilot או עם יצירה אוטומטית של מאגרי צמתים, צריך לציין את סוג המכונה המדויק ב-ComputeClass בהתאמה אישית.

דרישות לגבי הגרסה

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

  • ‫C4N: גרסת GKE‏ 1.36.0-gke.3009002 ואילך
  • ‫C4D: גרסה 1.32.9-gke.1711000 של GKE ואילך
  • N4D:
    • ‫GKE בגרסה 1.33.13-gke.1079000 ואילך
    • ‫GKE בגרסה 1.34.1-gke.2037000 ואילך
  • סוגי שרתים פיזיים C3 ו-C4A: גרסת GKE‏ 1.35.3-gke.1389000 ואילך (באמצעות ComputeClass בהתאמה אישית).
  • ‫C4D bare metal types: גרסת GKE ‏1.37.0-gke.4713000 ואילך (באמצעות ComputeClass בהתאמה אישית).
  • Z4D: גרסה 1.36.3-gke.1244000 של GKE ואילך.

תאימות לתכונות אחרות של GKE

פודים שבוחרים סדרת מכונות יכולים להשתמש ביכולות ובתכונות של GKE שנתמכות על ידי אותה סדרת מכונות, כמו:

פודים מסוג Spot ופודים עם זמן ריצה מורחב הם בלעדיים זה לזה. ‫GKE לא אוכף בקשות מינימליות גבוהות יותר למשאבים עבור Pods ייעודיים לכל צומת, למרות שהם משתמשים בהפרדת עומסי עבודה.

איך GKE בוחר סוג מכונה

כדי לבחור סוג מכונה בסדרת המכונות שצוינה, GKE מחשב את סך כל הבקשות ל-CPU, לזיכרון ולאחסון זמני של הפודים ושל כל DaemonSet שיפעלו בצומת החדש. ‫GKE מעגל את הערכים האלה כלפי מעלה לסוג המכונה הקרוב ביותר שזמין ב-Compute Engine, שתומך בכל הסכומים האלה.

  • דוגמה 1: נניח שיש פריסה עם ארבע רפליקות שבוחרת את סדרת המכונות C3D. אתם לא מבקשים צמתים ייעודיים לכל Pod. אלה בקשות המשאבים של כל רפליקה:

    • ‫500m vCPU (0.5 vCPU)
    • זיכרון בנפח 1GiB

    מצב Autopilot ממקם את כל ארבעת ה-Pods בצומת שמגובה על ידי סוג המכונה c3d-standard-4, שיש לה 4 יחידות vCPU וזיכרון בנפח 16GB.

  • דוגמה 2: נניח שיש Pod שבוחר בסדרת המכונות C3D וב-Local SSD לאחסון זמני. אתם מבקשים צומת ייעודי ל-Pod. אלה בקשות המשאבים הכוללות, כולל DaemonSets:

    • ‫12 vCPU
    • זיכרון בנפח ‎50 GiB
    • אחסון זמני בנפח 200GiB

    מצב Autopilot ממקם את ה-Pod בצומת שמשתמש בסוג המכונה c3d-standard-16-lssd, שיש לה 16 vCPUs, זיכרון של 64 GiB וקיבולת של 365 GiB ב-SSD מקומי.

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