הכנה לפריסת עומס עבודה (workload) של Arm באשכול רגיל

בדף הזה מוסבר איך להכין עומס עבודה לתזמון בצמתי Arm באשכול GKE Standard. מידע נוסף על תזמון עומסי עבודה של Arm באמצעות Autopilot זמין במאמר פריסת עומסי עבודה של Autopilot בארכיטקטורת Arm.

כדי לתזמן בהצלחה עומס עבודה לצומת Arm, אתם צריכים:

סקירה כללית

כברירת מחדל, GKE מתזמן עומסי עבודה רק לצמתים מבוססי x86 – סדרות מכונות של Compute Engine עם מעבדי Intel או AMD – על ידי הצבת כתם (kubernetes.io/arch=arm64:NoSchedule) בכל צמתי Arm. ההגדרה הזו מונעת מעומסי עבודה שתואמים ל-x86 להיות מתוזמנים בטעות לצמתים שלכם ב-Arm. אם רוצים לפרוס עומס עבודה בצומת Arm, צריך להשתמש בשדות שמתוארים בדף הזה כדי להנחות את מתזמן המשימות לשלוח את עומס העבודה לסוג הצומת הרצוי.

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

כשמשתמשים בבורר צמתים או בכלל קרבה לצומת, GKE יתזמן רק את עומסי העבודה שתואמים ל-Arm אם הצהרתם שקובץ אימג' של קונטיינר של עומס העבודה יכול לפעול בארכיטקטורה של הצומת.

אם מתזמנים עומס עבודה שתואם ל-Arm עם בורר צמתים או עם כלל שיוך צמתים כמו שמתואר בקטעים הבאים, GKE מוסיף באופן אוטומטי toleration להגדרת עומס העבודה כדי שה-Pods יוכלו לפעול בצמתי Arm.

הסבילות הזו שנוספה לעומס העבודה תואמת ל-taint ‏ (kubernetes.io/arch=arm64:NoSchedule) שנוסף לכל צמתי ה-Arm כדי לאפשר תזמון של עומס העבודה בצמתי Arm.

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

שימוש בבורר צמתים כדי לתזמן עומס עבודה של Arm

מוסיפים את בורר הצמתים הבא למפרט:

nodeSelector:
    kubernetes.io/arch: arm64

בורר הצמתים מציין שצריך לתזמן את עומס העבודה הזה רק לצמתים עם התווית arm64, שקיימת בכל צמתי Arm באשכולות GKE.

כשבורר הצמתים הזה נכלל בהגדרת עומס העבודה,‏ GKE מוסיף את הטולרנטיות כדי להתאים את הדחייה (taint) ולאפשר את תזמון עומס העבודה בצמתים של Arm.

שימוש בכלל של שיוך צומת כדי לתזמן עומס עבודה של Arm

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

תזמון עומס עבודה לארכיטקטורה אחת

מוסיפים את ההגדרה הבאה של צירוף צומת למפרט:

  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/arch
            operator: In
            values:
            - arm64

כלל ההתאמה לצומת מציין שעומס העבודה צריך להיות מתוזמן רק לצמתים עם התווית arm64, שקיימת בכל צמתי Arm באשכולות GKE.

כשכלל ההתאמה של הצומת הזה נכלל בהגדרת עומס העבודה,‏ GKE מוסיף את הטולרנטיות כדי להתאים את הדחייה (taint) ולאפשר את התזמון של עומס העבודה בצמתי Arm.

תזמון עומס עבודה לארכיטקטורות x86 ו-Arm

אם רוצים לתזמן עומס עבודה גם בארכיטקטורות x86 (מעבדי Intel ו-AMD) וגם בארכיטקטורות Arm, אפשר לציין זאת בכמה דרכים.

שימוש ב-toleration לתזמון עומסי עבודה מרובי-ארכיטקטורות לכל הארכיטקטורות

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

מוסיפים את ההרשאה:

  tolerations:
    - key: kubernetes.io/arch
      operator: Equal
      value: arm64
      effect: NoSchedule

באמצעות הסבילות הזו, GKE יכול לתזמן עומס עבודה לצמתים עם כל סוג ארכיטקטורה.

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

  • my-c4a-node-pool, באמצעות מכונות וירטואליות מסוג c4a-standard-16‏ (arm64).
  • my-c2-node-pool, באמצעות מכונות וירטואליות מסוג c2-standard-8 ‏ (amd64).
  • my-t2d-node-pool, באמצעות מכונות וירטואליות מסוג t2-standard-48 ‏ (amd64).

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

שימוש בכלל של זיקה לצומת לתזמון עומסי עבודה מרובי-ארכיטקטורה לכל ארכיטקטורה

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

במקרה של עומסי עבודה מבוססי x86, לא צריך את בוררי הצמתים, את כללי ההתאמה לצמתים או את ההחרגות האלה כדי לתזמן את עומס העבודה. אם יש לכם תמונה שאתם רוצים לתזמן רק לצמתים מבוססי x86, אתם לא צריכים להשתמש בשדות האלה.

כדי לתזמן עומסי עבודה לכל סוג של ארכיטקטורה, צריך לציין את arm64 ואת amd64 בקטע values של שדה ההתאמה לצומת. ‫amd64 כולל את כל הצמתים שמשתמשים במעבדי x86.

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

  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/arch
            operator: In
            values:
            - arm64
            - amd64

התוויות לכל סוג ארכיטקטורה הן:

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

  • my-c4a-node-pool, באמצעות מכונות וירטואליות מסוג c4a-standard-16‏ (arm64).
  • my-c2-node-pool, באמצעות מכונות וירטואליות מסוג c2-standard-8 ‏ (amd64).
  • my-t2d-node-pool, באמצעות מכונות וירטואליות מסוג t2-standard-48 ‏ (amd64).

אם פורסים באשכול הזה עומס עבודה שמשתמש בתמונה מרובת-ארכיטקטורות, והזיקה לצומת עם arm64 כלולה ברשימה values,‏ GKE מוסיף את הטולרנטיות בהגדרות של עומס העבודה, ויכול לתזמן את עומס העבודה בכל מאגרי הצמתים.

פריסת עומס העבודה

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

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

פתרון בעיות

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

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