התכונה 'שינוי אוטומטי של גודל ה-Pod בכמה ממדים' מאפשרת לכם לבחור כמה דרכים לשנות את גודל האשכולות. באמצעות התאמה אוטומטית של קבוצות Pod לעומס בכמה ממדים, אתם יכולים להשתמש בהתאמה אופקית של קבוצות Pod לעומס על סמך מעבד (CPU) ובהתאמה אנכית של קבוצות Pod לעומס על סמך זיכרון בו-זמנית.
אובייקט MultidimPodAutoscaler משנה בקשות זיכרון ומוסיף רפליקות כדי שהשימוש הממוצע במעבד של כל רפליקה יתאים לשימוש היעד.
דרישות מוקדמות
- אשכול GKE בגרסה 1.19.4-gke.1700 ואילך.
- באשכולות רגילים, מפעילים התאמה אנכית של קבוצות Pod לעומס באשכול. התאמה אנכית של קבוצות Pod לעומס כבר מופעלת באשכולות Autopilot.
שימוש בהתאמה רב-ממדית של קבוצות 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 הוא קבוצת התנאים שנדרשים כדי שהמידרוג האוטומטי הזה ישנה את קנה המידה של היעד שלו, ומציין אם התנאים האלה מתקיימים או לא. |
המאמרים הבאים
- מידע נוסף על הגדרת התאמה אופקית של קבוצות Pod לעומס
- מידע נוסף על הגדרה של שינוי גודל אוטומטי של Pod אנכי