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

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

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

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

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

  • מפעילים את Google Kubernetes Engine API.
  • הפעלת Google Kubernetes Engine API
  • כדי להשתמש ב-Google Cloud CLI למשימה הזו, מתקינים ואז מאתחלים את ה-CLI של gcloud. אם כבר התקנתם את ה-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 מוצג מספר הרפליקות הפועלות שמוכנות, בפורמט רפליקות מוכנות / רפליקות רצויות. אתם מגדירים את המצב הרצוי כשאתם יוצרים את הפריסה.
  • UP-TO-DATE מציג את מספר הרפליקות שעודכנו כדי להשיג
  • בשדה AVAILABLE מוצג מספר הרפליקות של האפליקציה שזמינות למשתמשים.
  • ‫AGE מציג את משך הזמן שהאפליקציה פועלת באשכול.

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

בדיקת StatefulSets

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

kubectl describe statefulset my-app

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

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

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

    kubectl get pods
    
  2. מסירים את ה-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 בנושא שינוי הגודל של משאבי מעבד וזיכרון.

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

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 לדוגמה. בדוגמה מוצג Deployment, כך שאם אתם משתמשים בסוג אחר של בקר, כמו 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 משתנה ל-3 רפליקות.

כדי להחיל קובץ תצורה מעודכן, מריצים את הפקודה הבאה:

kubectl apply -f config.yaml

אחר כך מריצים את הפקודה:

kubectl get CONTROLLER my-app

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

NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
my-app                3/3         3            3       15m

המסוף

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

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

    כניסה לדף Workloads

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

  3. לוחצים על Actions > Scale > Edit replicas.

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

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

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

פריסות של התאמה אוטומטית לעומס (Autoscaling)

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

kubectl autoscale

kubectl autoscale יוצר אובייקט HorizontalPodAutoscaler (או HPA) שמטרגט משאב מסוים (שנקרא יעד קנה המידה) ומשנה את קנה המידה שלו לפי הצורך. ה-HPA מתאים מדי פעם את מספר הרפליקות של יעד ההתאמה לעומס, כך שיתאים לניצול הממוצע של המעבד (CPU) שציינתם.

כשמשתמשים ב-kubectl autoscale, מציינים את המספר המקסימלי והמינימלי של הרפליקות לאפליקציה, וגם את יעד ניצול המעבד (CPU). לדוגמה, כדי להגדיר את המספר המקסימלי של הרפליקות ל-6 ואת המספר המינימלי ל-4, עם יעד ניצול של 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

המסוף

כדי להתאים אוטומטית לעומס Deployment (פריסה), מבצעים את השלבים הבאים:

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

    כניסה לדף Workloads

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

  3. לוחצים על Actions > Edit autoscaling.

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

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

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

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

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

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

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