הפעלת עומסי עבודה במצב Autopilot באשכולות Standard

אדמינים של אשכולות ומפעילים של אפליקציות יכולים ליהנות מהיתרונות של Google Kubernetes Engine‏ (GKE) Autopilot, כמו תמחור והגדרות שנקבעו מראש, באשכולות במצב רגיל. במאמר הזה מוסבר איך להשתמש ב-ComputeClasses כדי לפרוס עומס עבודה ב-Autopilot באשכול רגיל. כדאי להכיר את המושגים הבאים:

מידע על Autopilot ComputeClasses

‫GKE מספק משאבים מותאמים אישית של Kubernetes בשם ComputeClasses שאפשר לפרוס באשכול כמו כל משאב אחר של Kubernetes. ‫ComputeClass מגדיר רשימה של הגדרות צמתים, כמו סוגי מכונות או מכונות וירטואליות מסוג Spot. אתם יכולים לבחור ComputeClasses בעומסי העבודה שלכם, וכך לציין ל-GKE שכל הצמתים החדשים צריכים להשתמש באחת מההגדרות שברשימה.

אם עומס עבודה בוחר ComputeClass שבו השדה autopilot מופעל,‏ GKE מפעיל את ה-Pods במצב Autopilot. הצמתים שנוצרים על ידי GKE מנוהלים על ידי Google וכוללים הרבה מהתכונות והגדרות האבטחה שמוגדרות כברירת מחדל ב-Autopilot. מידע נוסף על ההשלכות של הפעלת עומס עבודה במצב Autopilot באשכולות Standard, כולל הבדלים שאולי תבחינו בהם כשפורסים את עומסי העבודה האלה, זמין במאמר מידע על עומסי עבודה במצב Autopilot ב-GKE Standard.

סוגים של Autopilot ComputeClasses

‫GKE מספקת ComputeClasses מובנות של Autopilot שאפשר להשתמש בהן ברוב עומסי העבודה למטרות כלליות. אפשר גם להגדיר ComputeClass חדש או קיים בהתאמה אישית לשימוש במצב Autopilot. סוג ה-ComputeClass של Autopilot שבו אתם משתמשים תלוי בשאלה אם עומסי העבודה שלכם צריכים חומרה ספציפית, באופן הבא:

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

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

תמחור

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

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

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

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

דרישות

  • באשכול צריך להפעיל אחת מהגרסאות הבאות של GKE:

    • כדי להשתמש ב-Autopilot ב-ComputeClasses, האשכול צריך להריץ גרסה 1.34.1-gke.1829001 ואילך.
    • כדי להשתמש בpodFamily כללי עדיפות ב-ComputeClasses בהתאמה אישית של Autopilot, האשכול צריך להריץ גרסה 1.35.2-gke.1485000 ואילך.
  • לפחות למאגר צמתים אחד באשכול לא צריכים להיות node taints.

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

  • צומתי GKE מוגנים נדרשים ומופעלים כברירת מחדל.

  • חובה להשתמש באשכול המותאם ל-VPC.

  • אם אתם משתמשים ב-Kubernetes NetworkPolicies, האשכול שלכם צריך להשתמש ב-GKE Dataplane V2. כברירת מחדל, כל האשכולות החדשים משתמשים ב-GKE Dataplane V2.

    אם באשכול שלכם לא נעשה שימוש ב-GKE Dataplane V2, אתם צריכים להשבית את האכיפה של מדיניות הרשת.

מגבלות

  • אפשר להשתמש ב-general-purpose-arm pod family וב-autopilot-arm compute class רק באשכולות של Autopilot. תמיכה באשכולות רגילים עם צמתים של Autopilot תהיה זמינה בגרסה מאוחרת יותר.
  • כדי לעדכן ComputeClasses קיימים באשכול לשימוש במצב Autopilot, צריך ליצור מחדש את ה-ComputeClasses האלה עם מפרט מעודכן. מידע נוסף זמין במאמר בנושא הפעלת Autopilot עבור ComputeClass מותאם אישית קיים.
  • ה-ComputeClasses המובנים של Autopilot לא תומכים בהפעלת Confidential GKE Nodes לכל האשכול. אם מפעילים צמתים סודיים של GKE באשכול, כל ה-Pods החדשים שבוחרים ב-ComputeClasses המובנה של Autopilot נשארים במצב Pending ללא הגבלת זמן.
  • אין תמיכה באכיפת מדיניות רשת Calico. צריך להשתמש ב-GKE Dataplane V2 או להשבית את אכיפת מדיניות הרשת.
  • השם של ComputeClass לא יכול להתחיל ב-gke או ב-autopilot, שהן קידומות שמורות.

תפקידים והרשאות נדרשים

כדי לקבל את ההרשאות שנדרשות לפריסת ComputeClasses, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד מפתח Kubernetes Engine (roles/container.developer) באשכול או בפרויקט . כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

שינוי אשכולות כדי לעמוד בדרישות של Autopilot

אתם יכולים להשתמש במסוף כדי לבדוק אם אשכול Standard עומד בכל הדרישות להפעלת עומסי עבודה במצב Autopilot. Cloud de Confiance אפשר גם להשתמש במסוף Cloud de Confiance כדי לשנות את האשכול כך שיעמוד בדרישות האלה.

שינוי של אשכול קיים

  1. נכנסים לדף Kubernetes clusters במסוף Cloud de Confiance .

    מעבר אל Kubernetes clusters

  2. בשורה של האשכול שרוצים לשנות, לוחצים על פעולות נוספות > עריכה. הדף Cluster details נפתח.

  3. בקטע Cluster basics (היסודות של האשכול), מחפשים את הקטע Autopilot compute class compatibility (תאימות של מחלקת מחשוב ב-Autopilot).

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

  4. אם בקטע Autopilot compute class compatibility (תאימות של מחלקת מחשוב ב-Autopilot) מוצגת האפשרות Disabled (מושבת), לוחצים על Edit Autopilot compute class compatibility (עריכת התאימות של מחלקת מחשוב ב-Autopilot).

    אם אי אפשר לערוך את הקטע הזה, המשמעות היא שהאשכול משתמש בהגדרה קבועה שלא תואמת למצב Autopilot. לדוגמה, אי אפשר לשנות אשכולות כך שיהיו מותאמים ל-VPC אחרי יצירת האשכול. אם אי אפשר ליצור אינטראקציה עם הקטע Autopilot compute class compatibility, צריך ליצור אשכול חדש.

  5. בחלונית Autopilot compute class compatibility שנפתחת, בודקים את הגדרות האשכול שצריך לשנות כדי לעמוד בדרישות של מצב Autopilot.

  6. לוחצים על הפעלת סוג מחשוב ב-Autopilot. ‫GKE משנה את האשכול לפי הצורך.

שינוי אשכול חדש

  1. נכנסים לדף Create a Kubernetes cluster במסוף Cloud de Confiance .

    מעבר אל יצירת אשכול Kubernetes

  2. בדף Cluster basics (יסודות האשכול), מחפשים את הקטע Maximize deployment options with Autopilot compute class (מיקסום אפשרויות הפריסה באמצעות סוג מחשוב של Autopilot). בקטע הזה מפורטות הגדרות האשכול שצריך לשנות כדי לעמוד בדרישות של מצב Autopilot.

  3. לוחצים על הפעלת סוג מחשוב ב-Autopilot. ‫GKE משנה את האשכול לפי הצורך.

  4. מגדירים הגדרות אחרות של האשכול בהתאם לדרישות. אם תשנו הגדרה שתגרום לכך שהאשכול לא יהיה תואם ל-Autopilot, תוצג הודעת אזהרה.

בחירת ComputeClass של Autopilot בעומס עבודה

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

המסוף

  1. נכנסים לדף Workloads של GKE במסוף Cloud de Confiance .

    כניסה לדף Workloads

  2. לוחצים על Deploy (פריסה) או על Create Job (יצירת משימה). מופיע הדף ליצירת עומס עבודה לפריסה או למשימה.

  3. בקטע Nodes, בוחרים באפשרות Autopilot compute class.

  4. בקטע Select compute class, בתפריט הנפתח Compute class, בוחרים ComputeClass שמשתמש במצב Autopilot. הערך של ComputeClass יכול להיות כל אחת מהאפשרויות הבאות:

  5. מגדירים ויוצרים את עומס העבודה.

kubectl CLI

כדי לבחור ComputeClass של Autopilot בעומס עבודה, משתמשים בnode selector (בורר צמתים) עבור התווית cloud.google.com/compute-class. זו אותה תווית שמשמשת לבחירת ComputeClass אחר ב-GKE. בשלבים הבאים מוסבר איך ליצור פריסה לדוגמה שבוחרת ComputeClass ואיך לוודא שה-Pods פועלים במצב Autopilot:

  1. שומרים את פריסת הדוגמה הבאה בתור autopilot-cc-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: helloweb
      labels:
        app: hello
    spec:
      selector:
        matchLabels:
          app: hello
      template:
        metadata:
          labels:
            app: hello
        spec:
          nodeSelector:
            # Replace with the name of a compute class
            cloud.google.com/compute-class: COMPUTE_CLASS 
          containers:
          - name: hello-app
            image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
            ports:
            - containerPort: 8080
            resources:
              requests:
                cpu: "250m"
                memory: "1Gi"

    מחליפים את COMPUTE_CLASS בשם של סוג המחשוב שרוצים להשתמש בו. הערך הזה יכול להיות כל אחת מהאפשרויות הבאות:

  2. פורסים את עומס העבודה:

    kubectl apply -f autopilot-cc-deployment.yaml
    

הגדרה של ComputeClass מותאם אישית ב-Autopilot

אפשר להגדיר ComputeClasses בהתאמה אישית לשימוש ב-Autopilot. אפשר להשתמש ב-ComputeClass מותאם אישית של Autopilot במצבים כמו:

  • עומסי העבודה שלכם דורשים חומרה ספציפית כדי לפעול בצורה אופטימלית, כמו מעבדי GPU או סדרה מסוימת של מכונות Compute Engine.
  • אתם רוצים לשנות הגדרות של צמתים כמו אזורים או taints בזמן שאתם משתמשים בפלטפורמת המחשוב האופטימלית ל-container של Autopilot.

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

יצירת ComputeClass חדש בהתאמה אישית ב-Autopilot

  1. שומרים אחד ממניפסטים לדוגמה של ComputeClass:

    • בחירת מכונות ספציפיות:

      apiVersion: cloud.google.com/v1
      kind: ComputeClass
      metadata:
        name: n4-class
      spec:
        autopilot:
          enabled: true
        priorities:
        - machineFamily: n4
          spot: true
          minCores: 16
        - machineFamily: n4
          spot: true
        - machineFamily: n4
          spot: false
        activeMigration:
          optimizeRulePriority: true
      

      המניפסט הזה כולל את השדות הבאים:

      • autopilot: מפעיל את מצב Autopilot עבור ComputeClass. אם מציינים את השדה הזה ב-ComputeClass שפורסים באשכול Autopilot, ‏ GKE מתעלם מהשדה.
      • priorities: מגדיר מערך של שלוש הגדרות שונות של משפחת מכונות N4.
      • activeMigration: מאפשר ל-GKE להעביר Pods להגדרות שמופיעות גבוה יותר ברשימת העדיפויות כשמשאבים הופכים לזמינים.
    • שימוש בפלטפורמת מחשוב שעברה אופטימיזציה לקונטיינרים עם שינויים:

      apiVersion: cloud.google.com/v1
      kind: ComputeClass
      metadata:
        name: general-purpose-class
      spec:
        autopilot:
          enabled: true
        priorities:
        - podFamily: general-purpose
        priorityDefaults:
          location:
            zones: ['us-central1-a','us-central1-b','us-central1-f']
      

      המניפסט הזה כולל את השדות הבאים:

      • autopilot: מפעיל את מצב Autopilot עבור ComputeClass. אם מציינים את השדה הזה ב-ComputeClass שפורסים באשכול Autopilot, ‏ GKE מתעלם מהשדה.
      • priorities.podFamily: משתמש בpodFamily כלל העדיפות כדי להריץ Pods בפלטפורמת המחשוב האופטימלית לקונטיינרים של Autopilot.
      • priorityDefaults.location: מגדיר את האזורים שבהם GKE צריך ליצור צמתים עבור Pods שמשתמשים ב-ComputeClass.
  2. פורסים את ComputeClass:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    מחליפים את PATH_TO_COMPUTECLASS_MANIFEST בנתיב למניפסט של ComputeClass מהשלב הקודם.

  3. מוודאים ש-ComputeClass קיים:

    kubectl get computeclasses
    

    הפלט אמור להיראות כך:

    NAME                  AGE
    n4-class              3s
    

הפעלת Autopilot עבור ComputeClass מותאם אישית קיים

אפשר להפעיל את Autopilot ב-ComputeClasses מותאמים אישית קיימים שנמצאים באוסף Standard. להפעלת Autopilot ב-ComputeClass שנמצא באשכול Autopilot אין השפעה, כי האשכול כולו משתמש במצב Autopilot.

אחרי שמפעילים את Autopilot עבור ComputeClass קיים,‏ GKE משתמש ב-Autopilot כדי להריץ Pods חדשים שבוחרים את ComputeClass. אם יש לכם פודים קיימים בצמתים רגילים שבוחרים את ComputeClass של Autopilot, הפודים האלה משתמשים ב-Autopilot רק כשהם נוצרים מחדש.

כדי לעדכן ComputeClass מותאם אישית קיים לשימוש במצב Autopilot:

  1. בכלי לעריכת טקסט, מעדכנים את קובץ המניפסט של ComputeClass הקיים כדי להוסיף את השדה spec.autopilot:

    spec:
      autopilot:
        enabled: true
    
  2. מחליפים את משאב ComputeClass הקיים ב-Kubernetes API במפרט המעודכן:

    kubectl replace --force -f PATH_TO_UPDATED_MANIFEST
    

    מחליפים את הערך ב-PATH_TO_UPDATED_MANIFEST בנתיב לקובץ המניפסט המעודכן.

  3. כדי להפעיל יצירה של צומת חדש, צריך ליצור מחדש את כל עומסי העבודה שמשתמשים במחלקת המחשוב.

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

אימות השימוש ב-Autopilot בעומס העבודה

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

המסוף

  1. נכנסים לדף Workloads של GKE במסוף Cloud de Confiance .

    כניסה לדף Workloads

  2. בודקים את הערך בעמודה Node type בשביל עומס העבודה. אם עומס העבודה משתמש במצב Autopilot, הערך הזה הוא Autopilot-managed.

kubectl CLI

בודקים את השמות של הצמתים שמריצים את ה-Pods:

kubectl get pods -l=app=hello -o wide

הפלט אמור להיראות כך:

NAME                       READY   STATUS    RESTARTS   AGE     IP             NODE                                         NOMINATED NODE   READINESS GATES
helloweb-79b9f6f75-5wwc9   1/1     Running   0          152m    10.102.1.135   gk3-cluster-1-nap-10abc8ya1-f66c6cef-wg5g   <none>           <none>
helloweb-79b9f6f75-9skb9   1/1     Running   0          4d3h    10.102.0.140   gk3-cluster-1-nap-10abc8ya1-632bac02-hjl6   <none>           <none>
helloweb-79b9f6f75-h7bdv   1/1     Running   0          152m    10.102.1.137   gk3-cluster-1-nap-10abc8ya1-f66c6cef-wg5g   <none>           <none>

בפלט הזה, התוספת לשם של מאפיין gk3- בעמודה Node מציינת שהצומת מנוהל על ידי Autopilot.

החלת ComputeClass של Autopilot כברירת מחדל

אתם יכולים להגדיר ComputeClass מובנה או מותאם אישית כ-ComputeClass שמוגדר כברירת מחדל למרחב שמות או לאשכול שלם. ה-ComputeClass שמוגדר כברירת מחדל חל על כל Pod שלא נבחר בו במפורש ComputeClass אחר. אם מגדירים ComputeClass של Autopilot כברירת מחדל, אפשר לוודא שכל ה-Pods יפעלו במצב Autopilot, אלא אם עומס עבודה בוחר באפשרות אחרת.

אם ComputeClass שהגדרתם כברירת מחדל משתמש בpodFamily כללי עדיפות, אפשר להפעיל את ה-Pods שלא בחרו ComputeClass אחר כ-Pods של Autopilot למטרות כלליות. השיטה הזו מאפשרת להשתמש במודל התמחור מבוסס-ה-Pod כברירת מחדל באשכול או במרחב השמות, והיא שימושית כשלהרבה מעומסי העבודה שלכם אין דרישות חומרה מיוחדות.

מידע נוסף זמין במאמר בנושא החלת ComputeClasses על Pods כברירת מחדל.

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