שינוי של בקשות למשאבי קונטיינר ומגבלות עליהן

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

אפשר לנהל את משאבי הקונטיינר באופן ידני דרך מסוף Google Cloud , לנתח המלצות באמצעות אובייקט VerticalPodAutoscaler או להגדיר התאמה אוטומטית לעומס באמצעות התאמה אנכית של קבוצות Pod לעומס.

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

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

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

ניתוח בקשות למשאבים

הכלי Vertical Pod Autoscaler מנתח באופן אוטומטי את הקונטיינרים ומספק הצעות לבקשות משאבים. אפשר לראות את בקשות המשאבים האלה באמצעותGoogle Cloud המסוף, Cloud Monitoring או Google Cloud CLI.

המסוף

כדי לראות הצעות לבקשות משאבים במסוף Google Cloud , צריך להיות לכם עומס עבודה קיים שפרסתם לפני 24 שעות לפחות. יכול להיות שחלק מההצעות לא יהיו זמינות או רלוונטיות לעומסי עבודה מסוימים, כמו אלה שנוצרו ב-24 השעות האחרונות, Pods עצמאיים ואפליקציות שנכתבו ב-Java.

  1. נכנסים לדף Workloads במסוף Google Cloud .

    כניסה לדף Workloads

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

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

    בקטע 'ניתוח נתוני ניצול המשאבים' מוצגים נתוני שימוש היסטוריים שהבקר של Vertical Pod Autoscaler ניתח כדי ליצור את בקשות המשאבים המוצעות בקטע 'התאמת בקשות המשאבים והמגבלות'.

Cloud Monitoring

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

  1. נכנסים לדף Metrics Explorer במסוף Google Cloud .

    לדף Metrics Explorer

  2. לוחצים על הגדרה.

  3. מרחיבים את התפריט בחירת מדד.

  4. בתפריט Resource בוחרים באפשרות Kubernetes Scale.

  5. בתפריט Metric category בוחרים באפשרות Autoscaler.

  6. בתפריט מדד, בוחרים באפשרות Recommended per replicate request bytes (מומלץ לכל בייט של בקשת שכפול) ובאפשרות Recommended per replica request core (מומלץ לכל ליבה של בקשת שכפול).

  7. לוחצים על אישור.

‫CLI של gcloud

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

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

    gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
    

    מחליפים את CLUSTER_NAME בשם האשכול.

  2. שומרים את קובץ המניפסט הבא בשם my-rec-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-rec-deployment
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: my-rec-deployment
      template:
        metadata:
          labels:
            app: my-rec-deployment
        spec:
          containers:
          - name: my-rec-container
            image: nginx
    

    קובץ המניפסט הזה מתאר Deployment שלא כולל בקשות למעבד או לזיכרון. הערך containers.name של my-rec-deployment מציין שכל ה-Pods ב-Deployment שייכים ל-VerticalPodAutoscaler.

  3. החלת המניפסט על האשכול:

    kubectl create -f my-rec-deployment.yaml
    
  4. שומרים את קובץ המניפסט הבא בשם my-rec-vpa.yaml:

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: my-rec-vpa
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       my-rec-deployment
      updatePolicy:
        updateMode: "Off"
    

    המניפסט הזה מתאר VerticalPodAutoscaler. הערך updateMode של Off מציין שכאשר נוצרים פודים, בקר ה-Vertical Pod Autoscaler מנתח את צורכי ה-CPU והזיכרון של הקונטיינרים ומתעד את ההמלצות האלה בשדה status של המשאב. הבקר Vertical Pod Autoscaler לא מעדכן אוטומטית את בקשות המשאבים עבור קונטיינרים שפועלים.

  5. החלת המניפסט על האשכול:

    kubectl create -f my-rec-vpa.yaml
    
  6. אחרי זמן מה, צופים בVerticalPodAutoscaler:

    kubectl get vpa my-rec-vpa --output yaml
    

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

    ...
      recommendation:
        containerRecommendations:
        - containerName: my-rec-container
          lowerBound:
            cpu: 25m
            memory: 262144k
          target:
            cpu: 25m
            memory: 262144k
          upperBound:
            cpu: 7931m
            memory: 8291500k
    ...
    

    בפלט הזה מוצגות המלצות לבקשות של מעבד וזיכרון.

הגדרה ידנית של בקשות למשאבי Pod

אפשר להגדיר בקשות למשאבי Pod באופן ידני באמצעות מסוף Google Cloud או kubectl. כדי להגדיר את הבקשות והמגבלות של משאבי הקונטיינר, מומלץ לפעול לפי השיטות המומלצות הבאות:

  • זיכרון: מגדירים את אותו נפח זיכרון לבקשה ולמגבלה.
  • ‫CPU: בבקשה, מציינים את המינימום של CPU שנדרש כדי להבטיח פעולה תקינה, בהתאם ל-SLO שלכם. הגדרת מגבלת מעבד ללא הגבלה.

המסוף

  1. נכנסים לדף Workloads במסוף Google Cloud .

    כניסה לדף Workloads

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

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

    1. בקטע התאמת בקשות ומגבלות של משאבים מוצגות הבקשות הנוכחיות למעבד ולזיכרון לכל מאגר, וגם הצעות לבקשות למעבד ולזיכרון.
  4. לוחצים על החלת ההצעות האחרונות כדי לראות את ההצעות לבקשות לכל מאגר תגים.

  5. לוחצים על שמירת השינויים.

  6. לוחצים על אישור.

kubectl

הגדלת עומס העבודה באופן אנכי עם הפרעה מינימלית

החל מKubernetes גרסה 1.33, אפשר להשתמש בפקודה kubectl patch כדי לשנות את עומס העבודה באופן אנכי על ידי עדכון המשאבים שמוקצים לקונטיינר, בלי ליצור מחדש את ה-Pod. מידע נוסף, כולל מגבלות, זמין במאמרי העזרה של Kubernetes בנושא שינוי הגודל של משאבי CPU וזיכרון.

כדי להשתמש בפקודה kubectl patch, מציינים את בקשת המשאב המעודכנת באמצעות הדגל --patch. לדוגמה, כדי לשנות את גודל ה-CPU של my-app ל-800 mCPU, מריצים את הפקודה הבאה:

kubectl patch pod my-app --subresource resize --patch \
  '{"spec":{"containers":[{"name":"pause", "resources":{"requests":{"cpu":"800m"}, "limits":{"cpu":"800m"}}}]}}'

הגדלת עומס העבודה באופן אנכי

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

  1. שומרים את קובץ המניפסט הבא בשם my-adjusted-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-rec-deployment
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: my-rec-deployment
      template:
        metadata:
          labels:
            app: my-rec-deployment
        spec:
          containers:
          - name: my-rec-container
            image: nginx
            resources:
              requests:
                cpu: 25m
                memory: 256Mi
    

    המניפסט הזה מתאר פריסה עם שני Pods. לכל Pod יש קונטיינר אחד שמבקש 25 מילי-CPU ו-256MiB של זיכרון.

  2. החלת המניפסט על האשכול:

    kubectl apply -f my-adjusted-deployment.yaml
    

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

התאמה אנכית של קבוצות Pod לעומס משתמשת באובייקט VerticalPodAutoscaler כדי להגדיר באופן אוטומטי בקשות למשאבים בקבוצות Pod כשהערך של updateMode הוא Auto. אפשר להגדיר VerticalPodAutoscaler באמצעות ה-CLI של gcloud או מסוףGoogle Cloud .

המסוף

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

הפעלת התאמה אנכית של קבוצות Pod לעומס

  1. נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .

    מעבר אל Google Kubernetes Engine

  2. ברשימת האשכולות, לוחצים על שם האשכול שרוצים לשנות.

  3. לוחצים על הכרטיסייה פרטים.

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

  5. מסמנים את תיבת הסימון Enable Vertical Pod Autoscaling (הפעלת התאמה אנכית של קבוצות Pod לעומס).

  6. לוחצים על שמירת השינויים.

הגדרת התאמה אנכית של קבוצות Pod לעומס

  1. נכנסים לדף Workloads במסוף Google Cloud .

    כניסה לדף Workloads

  2. ברשימת עומסי העבודה, לוחצים על השם של ה-Deployment שרוצים להגדיר עבורה התאמה אנכית של קבוצות Pod לעומס.

  3. לוחצים על פעולות > עריכת שינוי גודל אוטומטי.

  4. בקטע התאמה אנכית של קבוצות Pod לעומס, לוחצים על Select and configure.

  5. בקטע מצב עדכון, בוחרים מצב של שינוי גודל אוטומטי:

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

    1. לוחצים על הוספת מדיניות.
    2. בוחרים את מאגר התגים שאליו רוצים להוסיף מדיניות, או בוחרים מדיניות ברירת מחדל שתחול על כל מאגרי התגים שלא הוגדרה להם מדיניות.
    3. בוחרים באפשרות אוטומטי במצב שינוי גודל.
    4. בקטע Controlled resources, בוחרים את המשאבים שרוצים להגדיר עבורם שינוי אוטומטי של גודל מאגר התגים.
    5. לוחצים על הוספת כלל כדי להגדיר טווח מינימלי או מקסימלי אחד או יותר לבקשות המשאבים של מאגר התגים:
      • הזיכרון המינימלי המותר: כמות הזיכרון המינימלית שהקונטיינר צריך לקבל תמיד, ב-MiB.
      • המעבד המינימלי המותר: כמות המעבד המינימלית שהקונטיינר צריך לקבל תמיד, ב-mCPU.
      • ‫Max allowed Memory: כמות הזיכרון המקסימלית שהקונטיינר צריך לקבל תמיד, ב-MiB.
      • Max allowed CPU: כמות ה-CPU המקסימלית שהקונטיינר צריך לקבל תמיד, ב-mCPU.
  7. לוחצים על שליחה.

gcloud

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

  1. באשכולות רגילים, מפעילים את התכונה 'התאמה אנכית של קבוצות Pod לעומס' באשכול:

    gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
    

    מחליפים את CLUSTER_NAME בשם האשכול.

  2. שומרים את קובץ המניפסט הבא בשם my-auto-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-auto-deployment
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: my-auto-deployment
      template:
        metadata:
          labels:
            app: my-auto-deployment
        spec:
          containers:
          - name: my-container
            image: registry.k8s.io/ubuntu-slim:0.14
            resources:
              requests:
                cpu: 100m
                memory: 50Mi
            command: ["/bin/sh"]
            args: ["-c", "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"]
    

    המניפסט הזה מתאר פריסה עם שני Pods. לכל Pod יש קונטיינר אחד שמבקש 100 מילי-CPU ו-50MiB של זיכרון.

    אם יוצרים קובץ מניפסט כדי להתאים לפרטים ספציפיים בפרויקט שלכם, חשוב לוודא שלא כוללים מידע אישי רגיש בשדות של Vertical Pod Autoscaler.

  3. החלת המניפסט על האשכול:

    kubectl create -f my-auto-deployment.yaml
    
  4. (אופציונלי) מגדירים את resizePolicy לעדכונים במקום.

    אם אתם מתכננים להשתמש במצב InPlaceOrRecreate, אתם יכולים להגדיר במפורש איך מאגרי התגים צריכים לטפל בשינויים במשאבים במניפסט הפריסה.

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

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-auto-deployment
    spec:
      ...
      template:
        ...
        spec:
          containers:
          - name: my-container
            image: registry.k8s.io/ubuntu-slim:0.14
            resizePolicy:
            - resourceName: cpu
              restartPolicy: NotRequired
            - resourceName: memory
              restartPolicy: RestartContainer
            resources:
              requests:
                cpu: 100m
                memory: 50Mi
            ...
    

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

  5. מציגים את ה-Pods הפועלים:

    kubectl get pods
    

    הפלט מציג את השמות של ה-Pods ב-my-deployment:

    NAME                            READY     STATUS             RESTARTS   AGE
    my-auto-deployment-cbcdd49fb-d6bf9   1/1       Running            0          8s
    my-auto-deployment-cbcdd49fb-th288   1/1       Running            0          8s
    
  6. שומרים את קובץ המניפסט הבא בשם my-vpa.yaml:

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: my-vpa
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       my-auto-deployment
      updatePolicy:
        updateMode: "Recreate"
    

    קובץ המניפסט הזה מתאר VerticalPodAutoscaler עם המאפיינים הבאים:

    • ‫targetRef.name: מציין שכל Pod שמבוקר על ידי Deployment בשם my-deployment שייך ל-VerticalPodAutoscaler הזה.
    • ‫updateMode: "Recreate": מציין שבקר Vertical Pod Autoscaler יכול למחוק Pod, לשנות את בקשות המעבד והזיכרון ואז להפעיל Pod חדש. זוהי התנהגות ברירת המחדל אם לא מצוין מצב (נקרא גם מצב Auto). אפשר גם לשנות את מצב העדכון לאחד מהערכים הבאים:
      • ‫updateMode: "Initial": התאמה אנכית של קבוצות Pod לעומס מקצה בקשות למשאבים רק בזמן יצירת ה-Pod.
      • ‫updateMode: "InPlaceOrRecreate" (תצוגה מקדימה): התאמה אנכית של קבוצות Pod לעומס מנסה לעדכן משאבים בלי ליצור מחדש את ה-Pod, וחוזרת ליצירה מחדש אם צריך. השיטה הזו הכי יעילה כשעומסי העבודה מוגדרים עם resizePolicy: NotRequired.
  7. החלת המניפסט על האשכול:

    kubectl create -f my-vpa.yaml
    
  8. מחכים כמה דקות ומציגים שוב את ה-Pods הפועלים:

    kubectl get pods
    

    הפלט מראה ששמות ה-Pod השתנו:

    NAME                                 READY     STATUS             RESTARTS   AGE
    my-auto-deployment-89dc45f48-5bzqp   1/1       Running            0          8s
    my-auto-deployment-89dc45f48-scm66   1/1       Running            0          8s
    

    אם השמות של ה-Pods לא השתנו, מחכים עוד קצת ואז מציגים שוב את ה-Pods הפועלים.

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

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

console

  1. נכנסים לדף Workloads במסוף Google Cloud .

    כניסה לדף Workloads

  2. ברשימת עומסי העבודה, לוחצים על השם של הפריסה שרוצים להגדיר.

  3. לוחצים על פעולות > שינוי גודל אוטומטי > התאמה אנכית של קבוצות Pod לעומס.

  4. לוחצים על הוספת מדיניות.

  5. בוחרים את מאגר התגים שרוצים להגדיר.

  6. לוחצים על הוספת כלל.

  7. מזינים ערכים בשדות מינימום מותר ומקסימום מותר עבור מעבד וזיכרון.

  8. לוחצים על סיום.

  9. לוחצים על Save.

gcloud

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

  1. שומרים את קובץ המניפסט הבא בשם my-constrained-vpa.yaml:

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: my-constrained-vpa
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       my-auto-deployment
      updatePolicy:
        updateMode: "Auto"
      resourcePolicy:
        containerPolicies:
        - containerName: my-container
          minAllowed:
            cpu: 100m
            memory: 50Mi
          maxAllowed:
            cpu: 1000m
            memory: 1024Mi
    

    ההגדרה הזו עוזרת לוודא שההמלצה לגבי my-container לא תהיה נמוכה מ-100 mCPU/50 MiB או גבוהה מ-1,000 mCPU/1,024 MiB.

  2. החלת המניפסט על האשכול:

    kubectl apply -f my-constrained-vpa.yaml
    

הצגת מידע על Vertical Pod Autoscaler

כדי לראות פרטים על Vertical Pod Autoscaler:

  1. כדי לקבל מידע מפורט על אחד מ-Pods שפועלים:

    kubectl get pod POD_NAME --output yaml
    

    מחליפים את POD_NAME בשם של אחד מה-Pods שאחזרתם בשלב הקודם.

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

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        vpaUpdates: 'Pod resources updated by my-vpa: container 0: cpu capped to node capacity, memory capped to node capacity, cpu request, memory request'
    ...
    spec:
      containers:
      ...
        resources:
          requests:
            cpu: 510m
            memory: 262144k
        ...
    

    מהפלט הזה אפשר לראות שבקר Vertical Pod Autoscaler כולל בקשת זיכרון של 262144k ובקשת מעבד של 510m.

  2. מידע מפורט על VerticalPodAutoscaler:

    kubectl get vpa my-vpa --output yaml
    

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

    ...
      recommendation:
        containerRecommendations:
        - containerName: my-container
          lowerBound:
            cpu: 536m
            memory: 262144k
          target:
            cpu: 587m
            memory: 262144k
          upperBound:
            cpu: 27854m
            memory: "545693548"
    

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

    • ‫target: מציין שכדי שהקונטיינר יפעל בצורה אופטימלית, הוא צריך לבקש 587 אלפיות של CPU ו-262,144 קילובייט של זיכרון.
    • ‫lowerBound ו-upperBound: התאמה אנכית של קבוצות Pod לעומס משתמשת במאפיינים האלה כדי להחליט אם למחוק קבוצת Pod ולהחליף אותה בקבוצת Pod חדשה. אם בקשות של Pod נמוכות מהגבול התחתון או גבוהות מהגבול העליון, Vertical Pod Autoscaler מוחק את ה-Pod ומחליף אותו ב-Pod שעומד בדרישות של מאפיין היעד.
  3. בודקים אם יש אירועי שינוי גודל. אם אתם משתמשים במצב InPlaceOrRecreate, אתם יכולים לבדוק אם בוצע עדכון במקום על ידי בדיקת האירועים של ה-Pods:

    kubectl get events --field-selector involvedObject.kind=Pod
    

    מחפשים אירועים של ResizeCompleted, שמציינים עדכון מוצלח במקום:

    Reason            Message
    ------            -------
    ResizeCompleted   Pod resize completed: {"containers":[...]}
    

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

אפשר להחריג קונטיינרים ספציפיים מהתאמה אנכית של קבוצות Pod לעומס באמצעות ה-CLI של gcloud או מסוף Google Cloud .

המסוף

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

הפעלת התאמה אנכית של קבוצות Pod לעומס

  1. נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .

    מעבר אל Google Kubernetes Engine

  2. ברשימת האשכולות, לוחצים על שם האשכול שרוצים לשנות.

  3. לוחצים על הכרטיסייה פרטים.

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

  5. מסמנים את תיבת הסימון Enable Vertical Pod Autoscaling (הפעלת התאמה אנכית של קבוצות Pod לעומס).

  6. לוחצים על שמירת השינויים.

הגדרת התאמה אנכית של קבוצות Pod לעומס

  1. נכנסים לדף Workloads במסוף Google Cloud .

    כניסה לדף Workloads

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

  3. לוחצים על פעולות > עריכת שינוי גודל אוטומטי.

  4. בקטע התאמה אנכית של קבוצות Pod לעומס, לוחצים על Select and configure.

  5. בקטע מצב עדכון, בוחרים מצב של שינוי גודל אוטומטי:

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

  7. בוחרים את מאגר התגים שרוצים להשבית.

  8. בקטע מצב שינוי גודל, בוחרים באפשרות מושבת.

  9. לוחצים על שליחה.

gcloud

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

  1. שומרים את קובץ המניפסט הבא בשם my-opt-vpa.yaml:

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: my-opt-vpa
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       my-opt-deployment
      updatePolicy:
        updateMode: "Recreate"
      resourcePolicy:
        containerPolicies:
        - containerName: my-opt-sidecar
          mode: "Off"
    

    המניפסט הזה מתאר VerticalPodAutoscaler. הערך mode: "Off" משבית את ההמלצות למאגר התגים my-opt-sidecar.

  2. החלת המניפסט על האשכול:

    kubectl apply -f my-opt-vpa.yaml
    
  3. שומרים את קובץ המניפסט הבא בשם my-opt-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-opt-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: my-opt-deployment
      template:
        metadata:
          labels:
            app: my-opt-deployment
        spec:
          containers:
          - name: my-opt-container
            image: nginx
          - name: my-opt-sidecar
            image: busybox
            command: ["sh","-c","while true; do echo Doing sidecar stuff!; sleep 60; done"]
    
  4. החלת המניפסט על האשכול:

    kubectl apply -f my-opt-deployment.yaml
    
  5. אחרי זמן מה, צופים ב-Vertical Pod Autoscaler:

    kubectl get vpa my-opt-vpa --output yaml
    

    הפלט מציג המלצות לבקשות של מעבד וזיכרון:

    ...
      recommendation:
        containerRecommendations:
        - containerName: my-opt-container
    ...
    

    בפלט הזה, יש רק המלצות לגבי מאגר תגים אחד. אין המלצות לmy-opt-sidecar.

    הכלי Vertical Pod Autoscaler אף פעם לא מעדכן משאבים בקונטיינרים שהשימוש בהם בוטל. אם מחכים כמה דקות, ה-Pod נוצר מחדש, אבל רק בקונטיינר אחד מתעדכנות בקשות המשאבים.

זיהוי עומסי עבודה ללא בקשות או מגבלות של משאבים

מומלץ לזהות עומסי עבודה ללא בקשות וגבולות מוגדרים למשאבים, כי GKE ממליץ להגדיר בקשות וגבולות למשאבים לכל עומסי העבודה כשיטה מומלצת, כדי למנוע סיום פתאומי של Pod במצב של עומס על משאבי הצומת ולשפר את הדיוק של הקצאת העלויות. הגדרה של תרמילי BestEffort או של תרמילי Burstable זיכרון עלולה לגרום לבעיות באמינות כשבצומת יש עומס על הזיכרון. כדי להגדיר את הבקשות והמגבלות של משאבי הקונטיינר, מומלץ לפעול לפי השיטות המומלצות הבאות:

  • זיכרון: מגדירים את אותו נפח זיכרון לבקשה ולמגבלה.
  • ‫CPU: בבקשה, מציינים את המינימום של CPU שנדרש כדי להבטיח פעולה תקינה, בהתאם ל-SLO שלכם. הגדרת מגבלת מעבד ללא הגבלה.

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

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

סוג משנה של תובנה תרחיש של הגדרות חסרות פרטים
REQUEST_OR_LIMIT_NOT_SET לא הוגדרו בקשת זיכרון ומגבלת זיכרון. (MEMORY_REQUEST_AND_LIMIT_NOT_SET) הפודים פועלים בלי בקשות זיכרון ובלי הגבלות שהוגדרו לקונטיינרים שלהם. ‫GKE לא יכול להגביל את השימוש בזיכרון, ויכול להיות שהוא יפסיק את הפעולה של Pods כאלה באופן פתאומי אם בצומת מסוים יש עומס על הזיכרון, מה שעלול לגרום לבעיות באמינות.
REQUEST_OR_LIMIT_NOT_SET לא הוגדרו מגבלות זיכרון. (MEMORY_LIMIT_NOT_SET) הפודים פועלים בלי הגבלות זיכרון שהוגדרו לקונטיינרים שלהם. ‫GKE לא יכול להגביל את השימוש בזיכרון, ויכול להיות שהוא יפסיק באופן פתאומי את הפעולה של Pods כאלה אם בצומת יש עומס על הזיכרון והשימוש בזיכרון של ה-Pods חורג מהבקשות, מה שעלול לגרום לבעיות באמינות. כדי למנוע מצבים שבהם ה-Pods משתמשים ביותר זיכרון ממה שהוגדר, צריך להגדיר את אותה כמות זיכרון לבקשות ולמגבלות.
REQUEST_OR_LIMIT_NOT_SET לא הוגדרו בקשה ומגבלה של מעבד (CPU). (CPU_REQUEST_AND_LIMIT_NOT_SET) הפודים פועלים בלי בקשות למעבד והגבלות שהוגדרו לקונטיינרים. כך גדל הסיכוי לניצול יתר של משאבי הצומת, וסביר יותר שפעולות של Pods יוגבלו כשהשימוש במעבד של הצומת קרוב למגבלה שלו, ועלולות להיגרם בעיות בביצועים.

כדי לקבל מידע נוסף על התובנות האלה, פועלים לפי ההוראות לצפייה בתובנות ובהמלצות.

בדיקה ידנית של בקשות למשאבים ומגבלות

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

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

  1. נכנסים לדף Workloads במסוף Google Cloud .

    כניסה לדף Workloads

  2. ברשימת עומסי העבודה, לוחצים על השם של עומס העבודה שרוצים לבדוק.

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

    1. בקטע Adjust resource requests and limits (שינוי בקשות וגבולות של משאבים) מוצגות הבקשות הנוכחיות של המעבד והזיכרון לכל מאגר.

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