הגדרת התאמה רב-ממדית של Pod לעומס

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

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

דרישות מוקדמות

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

בדוגמה הזו אנחנו מראים איך ליצור Deployment (פריסה) ואובייקט MultidimPodAutoscalerכדי להתאים אוטומטית לעומס (autoscale) את ה-Deployment (פריסה).

יצירת פריסה

כדי ליצור MultidimPodAutoscaler, קודם צריך ליצור את עומס העבודה שעליו רוצים לפקח. בקובץ הבא, php-apache.yaml, מצוין ערך לבקשות של CPU:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 1
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 80
        resources:
        # Since MPA does not specify CPU requests, you must specify a request in
        # the Deployment
          limits:
            cpu: 500m
          requests:
            cpu: 200m

כדי ליצור את הפריסה, מפעילים את המניפסט php-apache.yaml:

kubectl apply -f php-apache.yaml

יצירת MultidimPodAutoscaler

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

מידע נוסף על השדות בדוגמה הזו מופיע בקטע מאמרי העזרה של ה-API.

apiVersion: autoscaling.gke.io/v1beta1
kind: MultidimPodAutoscaler
metadata:
  name: php-apache-autoscaler
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  goals:
    metrics:
    - type: Resource
      resource:
      # Define the target CPU utilization request here
        name: cpu
        target:
          type: Utilization
          averageUtilization: 60
  constraints:
    global:
      minReplicas: 1
      maxReplicas: 5
    containerControlledResources: [ memory ]
    container:
    - name: '*'
    # Define boundaries for the memory request here
      requests:
        minAllowed:
          memory: 1Gi
        maxAllowed:
          memory: 2Gi
  policy:
    updateMode: Auto

כדי ליצור את MultidimPodAutoscaler, צריך להחיל את php-apache-autoscaler.yaml manifest:

kubectl apply -f php-apache-autoscaler.yaml

צפייה ב-MultidimPodAutoscaler

כדי לראות את כל האובייקטים של MultidimPodAutoscaler, משתמשים בפקודה kubectl get:

kubectl get mpa

מחיקת MultidimPodAutoscaler

כדי למחוק אובייקט MultidimPodAutoscaler, משתמשים בפקודה kubectl delete:

kubectl delete -f php-apache-autoscaler.yaml

מאמרי העזרה של ה-API

בקטעים הבאים מפורטים השדות שאפשר להוסיף לאובייקט MultidimPodAutoscaler.

כל השדות הם עבור apiVersion v1beta1 autoscaling.gke.io.

MultidimPodAutoscaler

‫MultidimPodAutoscaler היא ההגדרה של מידרוג אוטומטי רב-ממדי של Pod, שמנהל באופן אוטומטי את משאבי ה-Pod ואת המספר שלהם על סמך נתוני שימוש היסטוריים ונתוני שימוש בזמן אמת.

שדה סוג תיאור
metadata ObjectMeta מטא-נתונים סטנדרטיים של אובייקטים.
spec MultidimPodAutoscalerSpec ההתנהגות הרצויה של הכלי הרב-ממדי להתאמת גודל ה-Pod באופן אוטומטי.
status MultidimPodAutoscalerStatus הסטטוס האחרון שנצפה של קנה המידה האוטומטי של ה-Pod הרב-ממדי.

MultidimPodAutoscalerSpec

‫MultidimPodAutoscalerSpec הוא המפרט שמגדיר את ההתנהגות של המידרוג האוטומטי.

שדה סוג תיאור
ScaleTargetRef autoscaling.CrossVersionObjectReference הפניה שמצביעה על משאב יעד לשינוי קנה מידה (באמצעות משאב המשנה Scale).
Goals *MultidimGoals מטרות שהמידרוג האוטומטי של Pod רב-ממדי מנסה להשיג ולשמור.
Constraints *MultidimConstraints תיאור האילוצים של התאמה אוטומטית לעומס. המגבלות חשובות יותר מהיעדים. אם מגבלות חוסמות יעד מסוים, לא תהיה אפשרות להשיג את היעד הזה. לדוגמה, אם תגיעו למספר המקסימלי של הרפליקות, לא תוכלו להרחיב אנכית גם אם הרפליקות יצטרכו להתרחב.
Policy *MultidimPolicy המדיניות מאפשרת לציין איך ההמלצות ייושמו.

MultidimGoals

‫MultidimGoals הן מטרות שהמידרוג האוטומטי של Pod רב-ממדי מנסה להשיג.

שדה סוג תיאור
Metrics []MetricSpec הוא מכיל את רשימת המדדים יחד עם הערך הרצוי. המידרוג האוטומטי של Pod בכמה ממדים מנסה להתקרב לערכים הרצויים.

MultidimConstraints

MultidimConstraints תיאור האילוצים של התאמה אוטומטית לעומס. למגבלות יש עדיפות על פני מטרות.

שדה סוג תיאור
Global *GlobalConstraints אילוצים שחלים על האפליקציה כולה, כשהיא מותאמת אוטומטית.
Pod *PodConstraints אילוצים שחלים על Pods בודדים מהאפליקציה המטורגטת.
ContainerControlledResources []ResourceName משאבי קונטיינר שצריכים להיות בשליטת המידרוג האוטומטי. הערך הנתמך היחיד הוא memory.
Container []ContainerConstraints מגבלות שחלות על קונטיינרים של Pod.

ResourceConstraints

‫ResourceConstraints מגדירים את הכמות המינימלית והמקסימלית של משאבים שאפשר להקצות לקונטיינר, ל-Pod או לאפליקציה.

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

GlobalConstraints

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

שדה סוג תיאור
MinReplicas *Int32 המספר המינימלי של רפליקות שיכולות להיות לאפליקציה. אם לא מציינים ערך, המערכת משתמשת בערך 1.
MaxReplicas *Int32 המספר המקסימלי של העתקים שהאפליקציה יכולה לכלול. אם לא מציינים את הערך הזה, אין הגבלה על מספר הרפליקות המקסימלי.
Requests *ResourceConstraints כמות המשאבים המינימלית והמקסימלית שאפליקציה יכולה לבקש, בסיכום של כל הפודים.

PodConstraints

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

שדה סוג תיאור
Requests *ResourceConstraints הכמות המינימלית והמקסימלית של משאבים ש-Pod יחיד יכול לבקש, מסוכמת בכל הקונטיינרים ששייכים ל-Pod.

ContainerConstraints

ContainerConstraints הן מגבלות שחלות על קונטיינרים של Pods.

שדות סוג תיאור
Name String שם המאגר שבו מצוינות ההגבלות. אפשר גם להשתמש ב-* כדי לציין אילוצים לכל הקונטיינרים ב-Pod.
Requests *ResourceConstraints הכמות המינימלית והמקסימלית של משאבים שהקונטיינר שצוין יכול לבקש.

UpdateMode

אפשר להשתמש ב-UpdateMode כדי לקבוע איך ההמלצות המחושבות ייושמו.

שדות סוג תיאור
AutoUpdates UpdateMode = "Auto" המשמעות של 'עדכונים אוטומטיים' היא שאפשר ליישם את כל ההמלצות של הכלי להתאמת קנה מידה אוטומטית בכל שלב.

MultidimPolicy

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

MultidimPodAutoscalerStatus

‫MultidimPodAutoscalerStatus מתאר את מצב זמן הריצה של המידרוג האוטומטי.

שדות סוג תיאור
ObservedGeneration *Int64 הדור האחרון שנצפה על ידי המידרוג האוטומטי הזה.
RecommendedPodResources *RecommendedPodResources כמות המשאבים שחושבה לאחרונה ומומלצת על ידי ה-autoscaler לפודים המבוקרים.
CurrentReplicas Int32 ‫CurrentReplicas הוא מספר הרפליקות הנוכחי של ה-Pods שמנוהלים על ידי המידרוג האוטומטי הזה, כפי שנראה לאחרונה על ידי המידרוג האוטומטי.
DesiredReplicas Int32 ‫DesiredReplicas הוא מספר הרפליקות הרצוי של ה-Pods שמנוהלים על ידי הסקיילר האוטומטי הזה, כפי שחושב לאחרונה על ידי הסקיילר האוטומטי.
CurrentMetrics []autoscaling.MetricStatus המצב האחרון של המדדים שנעשה בהם שימוש על ידי המידרוג האוטומטי הזה.
Conditions []metav1.Condition ‫Conditions הוא קבוצת התנאים שנדרשים כדי שהמידרוג האוטומטי הזה ישנה את קנה המידה של היעד שלו, ומציין אם התנאים האלה מתקיימים או לא.

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