פריסת עומסי עבודה של Autopilot בארכיטקטורת Arm

בדף הזה מוסבר איך להגדיר פריסות של Google Kubernetes Engine‏ (GKE) במצב Autopilot כדי לבקש צמתים שמגובים על ידי ארכיטקטורת Arm.

מידע על ארכיטקטורת Arm בטייס אוטומטי

ב-Autopilot clusters מוצעים compute classes לעומסי עבודה עם דרישות חומרה ספציפיות. חלק מהמכונות הווירטואליות האלה תומכות בכמה ארכיטקטורות של מעבדים, כמו amd64 ו-arm64.

תרחישים לדוגמה לשימוש בצמתי Arm

צמתים עם ארכיטקטורת Arm מציעים ביצועים חסכוניים יותר בהשוואה לצמתי x86 דומים. כדאי לבחור בארכיטקטורת Arm עבור עומסי העבודה של Autopilot במצבים הבאים:

  • הסביבה שלכם מסתמכת על ארכיטקטורת Arm לצורך בנייה ובדיקה.
  • אתם מפתחים אפליקציות למכשירי Android שפועלות על מעבדי Arm.
  • אתם משתמשים בתמונות מרובות ארכיטקטורות ורוצים לבצע אופטימיזציה של העלויות בזמן הפעלת עומסי העבודה.

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

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

  • מפעילים את ממשק ה-API של Google Kubernetes Engine.
  • הפעלת Google Kubernetes Engine API
  • אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
  • כדאי לעיין בדרישות ובמגבלות של צמתי Arm.
  • מוודאים שיש לכם מכסה לסוגי המכונות C4A,‏ N4A או Tau T2A של Compute Engine.
  • מוודאים שיש לכם Pod עם קובץ אימג' של קונטיינר שנבנה לארכיטקטורת Arm.

איך מבקשים צמתי Arm ב-Autopilot

כדי להגדיר ל-Autopilot להריץ את ה-Pods שלכם בצמתי Arm, צריך לציין אחת מהתוויות הבאות ב-nodeSelector או בכלל node affinity:

  • kubernetes.io/arch: arm64. GKE ממקם Pods בC4A סוגי מכונות כברירת מחדל באשכולות שמופעלת בהם גרסה 1.31.3-gke.1056000 ואילך. אם האשכול מריץ גרסה קודמת, GKE ממקם את ה-Pods בסוגי מכונות T2A.
  • cloud.google.com/machine-family: ARM_MACHINE_SERIES. מחליפים את ARM_MACHINE_SERIES בסדרת מכונות Arm כמו C4A,‏ N4A או T2A. ‫GKE ממקם את ה-Pods בסדרה שצוינה.

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

אפשר גם להשתמש בתווית Scale-Out עם התווית arm64 כדי לבקש T2A. אפשר גם לבקש ארכיטקטורת Arm עבור Spot Pods.

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

  1. הקצאת צמתים של Arm באופן אוטומטי להפעלת ה-Pods.
  2. הצביעה של הצמתים החדשים מתבצעת באופן אוטומטי כדי למנוע תזמון של Pods שאינם מסוג Arm בצמתים האלה.
  3. הוספה אוטומטית של טולרנטיות ל-Arm Pods כדי לאפשר תזמון בצמתים החדשים.

דוגמה לבקשה לארכיטקטורת Arm

בדוגמאות הבאות אפשר לראות איך משתמשים בבורר צמתים או בכלל זיקה לצמתים כדי לבקש ארכיטקטורת Arm ב-Autopilot.

nodeSelector

בדוגמה הבאה של קובץ מניפסט אפשר לראות איך מבקשים צמתי Arm ב-nodeSelector:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-arm
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-arm
  template:
    metadata:
      labels:
        app: nginx-arm
    spec:
      nodeSelector:
        cloud.google.com/compute-class: Performance
        kubernetes.io/arch: arm64
      containers:
      - name: nginx-arm
        image: nginx
        resources:
          requests:
            cpu: 2000m
            memory: 2Gi

nodeAffinity

אפשר להשתמש בהעדפת צומת כדי לבקש צמתי Arm. אפשר גם לציין את סוג ההתאמה של הצומת לשימוש:

  • requiredDuringSchedulingIgnoredDuringExecution: חובה להשתמש בסוג המחשוב ובארכיטקטורה שצוינו.
  • preferredDuringSchedulingIgnoredDuringExecution: שימוש במחלקה ובארכיטקטורה שצוינו למחשוב על בסיס המאמץ המרבי. לדוגמה, אם צומת x86 קיים ניתן להקצאה, GKE ממקם את ה-Pod בצומת x86 במקום להקצות צומת Arm חדש. אלא אם אתם משתמשים במניפסט של תמונה מרובת ארכיטקטורות, ה-Pod שלכם יקרוס. מומלץ מאוד לבקש במפורש את הארכיטקטורה הספציפית שרוצים.

במניפסט לדוגמה הבא נדרשת המחלקה Performance וצמתי Arm:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-arm
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-arm
  template:
    metadata:
      labels:
        app: nginx-arm
    spec:
      terminationGracePeriodSeconds: 25
      containers:
      - name: nginx-arm
        image: nginx
        resources:
          requests:
            cpu: 2000m
            memory: 2Gi
            ephemeral-storage: 1Gi
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: cloud.google.com/compute-class
                operator: In
                values:
                - Performance
              - key: kubernetes.io/arch
                operator: In
                values:
                - arm64

המלצות

  • פיתוח ושימוש בתמונות מרובות ארכיטקטורות כחלק מצינור עיבוד הנתונים. תמונות מרובות ארכיטקטורות מבטיחות שה-Pods יפעלו גם אם הם ממוקמים בצמתי x86.
  • מבקשים במפורש ארכיטקטורה וסוגי מחשוב במניפסטים של עומסי העבודה. אם לא תבחרו, Autopilot ישתמש בארכיטקטורת ברירת המחדל של סוג המחשוב שנבחר, שיכול להיות שלא מבוסס על Arm.

זמינות

אפשר לפרוס עומסי עבודה של Autopilot בארכיטקטורת Arm במיקומים שלGoogle Cloud שתומכים בארכיטקטורת Arm. פרטים נוספים זמינים במאמר אזורים ותחומים זמינים.

פתרון בעיות

מידע על פתרון בעיות ושגיאות נפוצות מופיע במאמר פתרון בעיות של עומסי עבודה ב-Arm.

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