בדף הזה מוסבר איך לשנות את קנה המידה של אפליקציה שנפרסה ב-Google Kubernetes Engine (GKE).
סקירה כללית
כשפורסים אפליקציה ב-GKE, מגדירים כמה עותקים של האפליקציה רוצים להריץ. כל רפליקה של האפליקציה מייצגת Pod של Kubernetes שמכיל את הקונטיינרים של האפליקציה.
כשמרחיבים אפליקציה, מגדילים או מקטינים את מספר העותקים של עומס העבודה, או משנים את המשאבים שזמינים לעותקים במקום. יש שתי שיטות להגדלת הקיבולת של אפליקציה:
- הרחבה אופקית, שבה מגדילים או מקטינים את מספר העותקים של עומס העבודה.
- שינוי קנה מידה אנכי, שבו משנים את המשאבים שזמינים לרפליקות במקום.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק Google Kubernetes Engine API. הפעלת Google Kubernetes Engine API
- כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את gcloud CLI. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
בדיקת אפליקציה
לפני שמגדילים את הקיבולת של האפליקציה, צריך לבדוק אותה ולוודא שהיא תקינה.
כדי לראות את כל האפליקציות שנפרסו באשכול, מריצים את הפקודה הבאה:
kubectl get CONTROLLER
מחליפים את CONTROLLER ב-deployments, ב-statefulsets או בסוג אחר של אובייקט בקר.
לדוגמה, אם מריצים את הפקודה kubectl get deployments ויצרתם רק פריסה אחת, הפלט של הפקודה אמור להיראות כך:
NAME READY UP-TO-DATE AVAILABLE AGE
my-app 1/1 1 1 10m
הפלט של הפקודה הזו דומה לכל האובייקטים, אבל יכול להיות שיהיו הבדלים קלים. בפריסה, הפלט כולל חמש עמודות:
-
NAMEמציג את השמות של הפריסות באשכול. READYמציג את מספר הרפליקות הפעילות שמוכנות, בפורמט ready replicas / desired replicas. כשיוצרים את הפריסה, מגדירים את המצב הרצוי.-
UP-TO-DATEמציג את מספר העותקים המשוכפלים שעודכנו כדי להשיג AVAILABLEמציג כמה עותקים של האפליקציה זמינים למשתמשים.-
AGEמציג את משך הזמן שהאפליקציה פעלה באשכול.
בדוגמה הזו יש רק פריסה אחת, my-app, שיש לה רק עותק אחד כי המצב הרצוי שלה הוא עותק אחד. אתם מגדירים את המצב הרצוי בזמן היצירה, ואתם יכולים לשנות אותו בכל שלב על ידי שינוי גודל האפליקציה.
בדיקת StatefulSets
לפני שמגדילים את מספר העותקים של StatefulSet, כדאי לבדוק אותו באמצעות הפקודה הבאה:
kubectl describe statefulset my-app
בפלט של הפקודה הזו, בודקים את השדה Pods Status. אם הערך של Failed גדול מ-0, יכול להיות שהשינוי לא יצליח.
אם נראה ש-StatefulSet לא תקין, מבצעים את הפעולות הבאות:
קבלת רשימה של פודים וזיהוי הפודים הבעייתיים:
kubectl get podsמסירים את ה-Pod הלא תקין:
kubectl delete pod POD_NAME
ניסיון לשנות את גודל ה-StatefulSet בזמן שהוא לא תקין עלול לגרום לכך שהוא לא יהיה זמין.
שינוי קנה מידה של אפליקציה
בקטעים הבאים מתוארת כל אחת מהשיטות שבהן אפשר להשתמש כדי לשנות את גודל האפליקציה.
שיטת kubectl scale היא הדרך הכי מהירה להרחבת הפעילות. עם זאת, יכול להיות שתעדיפו שיטה אחרת במצבים מסוימים, למשל כשמעדכנים קובצי הגדרה או כשמבצעים שינויים במקום.
kubectl scale
הפקודה kubectl scale מאפשרת לשנות באופן מיידי את מספר הרפליקות שרוצים להריץ באפליקציה.
כדי להשתמש ב-kubectl scale, צריך לציין את מספר הרפליקות החדש באמצעות הדגל --replicas. לדוגמה, כדי לשנות את קנה המידה של my-app לארבעה עותקים משוכפלים, מריצים את הפקודה הבאה ומחליפים את CONTROLLER ב-deployment, ב-statefulset או בסוג אחר של אובייקט בקרה:
kubectl scale CONTROLLER my-app --replicas 4
אם הפקודה מסתיימת בלי שגיאות, הפלט שלה אמור להיות דומה לזה שמוצג בdeployment
"my-app" scaled.
לאחר מכן, מריצים את הפקודה:
kubectl get CONTROLLER my-app
הפלט אמור להיראות כך:
NAME READY UP-TO-DATE AVAILABLE AGE
my-app 4/4 4 4 15m
kubectl patch
החל מגרסה 1.33 של Kubernetes, אפשר להשתמש בפקודה 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"}}}]}}'
kubectl apply
אפשר להשתמש ב-kubectl apply כדי להחיל קובץ הגדרה חדש על אובייקט בקרה קיים. kubectl
apply שימושי לביצוע כמה שינויים במשאב, ויכול להיות שימושי למשתמשים שמעדיפים לנהל את המשאבים שלהם בקובצי תצורה.
כדי לשנות את קנה המידה באמצעות kubectl apply, קובץ התצורה שאתם מספקים צריך לכלול מספר חדש של רפליקות בשדה replicas של מפרט האובייקט.
בהמשך מופיעה גרסה מעודכנת של קובץ ההגדרות לאובייקט my-app לדוגמה. בדוגמה מוצגת פריסה, לכן אם אתם משתמשים בסוג אחר של בקר, כמו StatefulSet, צריך לשנות את kind בהתאם. הדוגמה הזו פועלת בצורה הטובה ביותר באשכול עם לפחות שלושה צמתים.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
containers:
- name: my-container
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0
בקובץ הזה, הערך של השדה replicas הוא 3. כשקובץ ההגדרות הזה מוחל, האובייקט my-app מתרחב לשלוש רפליקות.
כדי להחיל קובץ תצורה מעודכן, מריצים את הפקודה הבאה:
kubectl apply -f config.yaml
לאחר מכן, מריצים את הפקודה:
kubectl get CONTROLLER my-app
הפלט אמור להיראות כך:
NAME READY UP-TO-DATE AVAILABLE AGE
my-app 3/3 3 3 15m
המסוף
כדי לשנות את קנה המידה של עומס עבודה במסוף Google Cloud , מבצעים את השלבים הבאים:
נכנסים לדף Workloads במסוף Google Cloud .
ברשימת עומסי העבודה, לוחצים על השם של עומס העבודה שרוצים לשנות את הגודל שלו.
לוחצים על list פעולות > שינוי גודל > עריכת העותקים.
מזינים את המספר החדש של עותקים לעומס העבודה.
לוחצים על קנה מידה.
כדי לראות מדדים שקשורים להרחבת הפעילות, לוחצים על הכרטיסייה הרחבת הפעילות.
פריסות עם התאמה אוטומטית לעומס
אתם יכולים להגדיר שינוי אוטומטי של קנה המידה של פריסות על סמך ניצול המעבד של Pod באמצעות kubectl
autoscale או מהתפריט GKE Workloads ב-Google Cloud console.
kubectl autoscale
kubectl autoscale יוצר אובייקט HorizontalPodAutoscaler (או HPA) שמטרגט משאב ספציפי (שנקרא יעד שינוי הגודל) ומשנה את הגודל שלו לפי הצורך. ה-HPA מתאים באופן תקופתי את מספר הרפליקות של יעד ההרחבה כך שיתאים לניצול הממוצע של המעבד שאתם מציינים.
כשמשתמשים ב-kubectl autoscale, מציינים מספר מקסימלי ומינימלי של רפליקות לאפליקציה, וגם יעד לניצול המעבד. לדוגמה, כדי להגדיר את המספר המקסימלי של העותקים לשישה ואת המספר המינימלי לארבעה, עם יעד ניצול CPU של 50%, מריצים את הפקודה הבאה:
kubectl autoscale deployment my-app --max 6 --min 4 --cpu-percent 50
בפקודה הזו, חובה להשתמש בדגל --max. הסימון --cpu-percent הוא ניצול המעבד (CPU) המטרה בכל ה-Pods. הפקודה הזו לא משנה באופן מיידי את קנה המידה של הפריסה ל-6 רפליקות, אלא אם כבר יש ביקוש מערכתי.
אחרי שמריצים את הפקודה kubectl autoscale, נוצר האובייקט HorizontalPodAutoscaler והוא מכוון לאפליקציה. אם יש שינוי בעומס, האובייקט מגדיל או מקטין את העותקים של האפליקציה.
כדי לקבל רשימה של אובייקטים מסוג HorizontalPodAutoscaler באשכול, מריצים את הפקודה:
kubectl get hpa
כדי לראות אובייקט HorizontalPodAutoscaler ספציפי באשכול, מריצים את הפקודה:
kubectl get hpa HPA_NAME
מחליפים את HPA_NAME בשם האובייקט HorizontalPodAutoscaler.
כדי לראות את ההגדרה של HorizontalPodAutoscaler:
kubectl get hpa HPA_NAME -o yaml
הפלט של הפקודה אמור להיראות כך:
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
creationTimestamp: ...
name: HPA_NAME
namespace: default
resourceVersion: "664"
selfLink: ...
uid: ...
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: HPA_NAME
targetCPUUtilizationPercentage: 50
status:
currentReplicas: 0
desiredReplicas: 0
בדוגמת הפלט הזו, השדה targetCPUUtilizationPercentage מכיל את ערך האחוזים 50 שהועבר מהדוגמה kubectl autoscale.
כדי לראות תיאור מפורט של אובייקט HorizontalPodAutoscaler ספציפי באשכול:
kubectl describe hpa HPA_NAME
אפשר לשנות את HorizontalPodAutoscaler על ידי החלת קובץ תצורה חדש באמצעות kubectl apply, באמצעות kubectl edit או באמצעות kubectl patch.
כדי למחוק אובייקט HorizontalPodAutoscaler:
kubectl delete hpa HPA_NAME
המסוף
כדי להגדיר שינוי אוטומטי של קנה מידה של פריסה, פועלים לפי השלבים הבאים:
נכנסים לדף Workloads במסוף Google Cloud .
ברשימת עומסי העבודה, לוחצים על השם של הפריסה שרוצים להגדיר לה שינוי אוטומטי של גודל הקיבולת.
לוחצים על list פעולות > עריכת שינוי גודל אוטומטי.
בקטע Horizontal Pod Autoscaling, מזינים את Maximum number of replicas ואם רוצים, גם את Minimum number of replicas בשביל הפריסה.
(אופציונלי) בקטע מדדים של שינוי גודל אוטומטי, בוחרים מדדים ומגדירים אותם.
לוחצים על שליחה.
כדי לראות מדדים שקשורים להרחבת הפעילות, לוחצים על הכרטיסייה הרחבת הפעילות.
התאמה אוטומטית לעומס (autoscaling) עם מדדים מותאמים אישית
אתם יכולים לשנות את קנה המידה של הפריסות על סמך מדדים מותאמים אישית שיוצאו מ-Cloud Monitoring.
כדי ללמוד איך להשתמש במדדים מותאמים אישית כדי להגדיל או להקטין את הפריסות באופן אוטומטי, אפשר לעיין במדריך בנושא הגדלה או הקטנה אוטומטית של פריסות באמצעות מדדים מותאמים אישית.
המאמרים הבאים
- האצת הפעלת האפליקציה באמצעות הגדלת מהירות ההפעלה של המעבד.
- התאמה של בקשות למשאבי קונטיינר ומגבלות (VPA)
- הגדרת התאמה אופקית של קבוצות Pod לעומס (HPA).