שינוי קנה מידה של אפליקציה

בדף הזה מוסבר איך לשנות את קנה המידה של אפליקציה שנפרסה ב-Google Kubernetes Engine‏ (GKE).

סקירה כללית

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

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

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

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

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

בדיקת אפליקציה

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

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

kubectl get CONTROLLER

מחליפים את CONTROLLER ב-deployments, ב-statefulsets או בסוג אחר של אובייקט בקר.

לדוגמה, אם מריצים את הפקודה kubectl get deployments ויצרתם רק פריסה אחת, הפלט של הפקודה אמור להיראות כך:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                1         1         1            1           10m

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

  • NAME מציג את השמות של הפריסות באשכול.
  • DESIRED מציג את מספר הרפליקות הרצוי או את המצב הרצוי של האפליקציה, שמוגדרים כשיוצרים את הפריסה.
  • CURRENT מציג כמה רפליקות פועלות כרגע.
  • UP-TO-DATE מציג את מספר הרפליקות שעודכנו כדי להגיע למצב הרצוי.
  • AVAILABLE מציג כמה עותקים של האפליקציה זמינים למשתמשים.
  • AGE מציג את משך הזמן שהאפליקציה פעלה באשכול.

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

בדיקת StatefulSets

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

kubectl describe statefulset my-app

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

אם נראה ש-StatefulSet לא תקין, מבצעים את הפעולות הבאות:

  1. קבלת רשימה של פודים וצפייה בפודים לא תקינים:

    kubectl get pods
    
  2. מסירים את ה-Pod הלא תקין:

    kubectl delete 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                  DESIRED   CURRENT   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                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                3         3         3            3           15m

המסוף

כדי לשנות את גודל עומס העבודה במסוף Cloud de Confiance :

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

    כניסה לדף Workloads

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

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

  4. מזינים את המספר החדש של עותקים לעומס העבודה.

  5. לוחצים על קנה מידה.

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

פריסות עם התאמה אוטומטית לעומס

אפשר להגדיר שינוי אוטומטי של קנה מידה של פריסות על סמך ניצול המעבד של Pod באמצעות kubectl autoscale או מהתפריט GKE Workloads במסוףCloud de Confiance .

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: v1
items:
- 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
kind: List
metadata: {}
resourceVersion: ""
selfLink: ""

בדוגמת הפלט הזו, השדה targetCPUUtilizationPercentage מכיל את ערך האחוזים 50 שהועבר מהדוגמה kubectl autoscale.

כדי לראות תיאור מפורט של HorizontalPodAutoscaler אובייקט ספציפי באשכול:

kubectl describe hpa HPA_NAME

אפשר לשנות את HorizontalPodAutoscaler על ידי החלת קובץ תצורה חדש באמצעות kubectl apply, באמצעות kubectl edit או באמצעות kubectl patch.

כדי למחוק אובייקט HorizontalPodAutoscaler:

kubectl delete hpa HPA_NAME

המסוף

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

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

    כניסה לדף Workloads

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

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

  4. בקטע התאמה אופקית של קבוצות Pod לעומס, מזינים את מספר הרפליקות המקסימלי ואת מספר הרפליקות המינימלי (אופציונלי) עבור ה-Deployment (פריסה).

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

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

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

התאמה אוטומטית של נפח התעבורה (autoscaling) באמצעות מדדים מותאמים אישית

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

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

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