הפעלת שינוי גודל אוטומטי של אשכולות

במאמר הזה מוסבר על התאמה אוטומטית של גודל האשכול (autoscaling) באשכול משתמשים ב-Google Distributed Cloud.

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

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

מידע נוסף על המגבלות של הכלי לשינוי גודל האשכול באופן אוטומטי

המידרוג האוטומטי של האשכול מבוסס על ההנחות הבאות:

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

  • משתמשים או אדמינים לא מנהלים צמתים באופן ידני. אם ההתאמה האוטומטית לעומס מופעלת במאגר צמתים, אי אפשר לקבוע ידנית את השדה replicas של מאגר הצמתים.

  • לכל הצמתים במאגר צמתים יחיד יש את אותו סט של תוויות.

איך פועל מידרוג אוטומטי של אשכול

המידרוג האוטומטי של האשכול פועל על בסיס מאגר צמתים. כשמפעילים התאמה אוטומטית לעומס (autoscaling) במאגר צמתים, מציינים את המספר המינימלי והמקסימלי של הצמתים במאגר.

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

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

  • אם הצמתים לא מנוצלים מספיק, ואפשר לתזמן את כל ה-Pods עם פחות צמתים במאגר, הכלי Cluster Autoscaler מסיר צמתים, עד למינימום שצוין. אם אי אפשר לרוקן את הצומת בצורה מסודרת, הצומת מסתיים בכוח והדיסק המצורף שמנוהל על ידי Kubernetes מנותק בצורה בטוחה.

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

עבור מאגר צמתים בודד, הערך של minReplicas צריך להיות ‎≥ 1. עם זאת, סכום הצמתים של אשכול המשתמשים שלא זוהמו בכל רגע נתון חייב להיות לפחות 3. כלומר, הסכום של הערכים של minReplicas בכל מאגרי הצמתים עם שינוי גודל אוטומטי, בתוספת הסכום של הערכים של replicas בכל מאגרי הצמתים ללא שינוי גודל אוטומטי, חייב להיות לפחות 3.

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

יצירת אשכול משתמשים עם התאמה אוטומטית של גודל האשכול

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

nodePools:
- name: pool‐1
  …
  replicas: 3
  ...
  autoscaling:
    minReplicas: 1
    maxReplicas: 5

ההגדרה שלמעלה יוצרת מאגר צמתים עם 3 רפליקות, ומחילים על המאגר התאמה אוטומטית לעומס עם גודל מינימלי של 1 וגודל מקסימלי של 5.

הערך של minReplicas חייב להיות ‎≥ 1. אי אפשר לצמצם את מספר הצמתים בבריכת צמתים לאפס.

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

כדי להוסיף מאגר צמתים עם התאמה אוטומטית לעומס לאשכול קיים:

  1. עורכים את קובץ ההגדרות של אשכול המשתמשים כדי להוסיף מאגר צמתים חדש, וכוללים קטע autoscaling למאגר. מגדירים את הערכים של replicas,‏ minReplicas ו-maxReplicas לפי הצורך. לדוגמה:

    nodePools:
    - name: my-new-node-pool
      …
      replicas: 3
      ...
      autoscaling:
        minReplicas: 2
        maxReplicas: 6
    
  2. מעדכנים את האשכול:

    gkectl update cluster --config USER_CLUSTER_CONFIG \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

הפעלת שינוי גודל אוטומטי של מאגר צמתים קיים

כדי להפעיל התאמה לעומס (autoscaling) למאגר צמתים באשכול קיים:

  1. עורכים את nodePool ספציפי בקובץ ההגדרות של אשכול המשתמשים, וכוללים את הקטע autoscaling. מגדירים את הערכים של minReplicas ו-maxReplicas לפי הצורך.

    nodePools:
    - name: my-existing-node-pool
      …
      replicas: 3
      ...
      autoscaling:
        minReplicas: 1
        maxReplicas: 5
    
  2. מעדכנים את האשכול:

    gkectl update cluster --config USER_CLUSTER_CONFIG \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

השבתת שינוי הגודל האוטומטי של מאגר צמתים קיים

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

  1. עורכים את קובץ התצורה של אשכול המשתמשים ומסירים את הקטע autoscaling של מאגר הצמתים.

  2. מריצים את gkectl update cluster.

בדיקת ההתנהגות של המידרוג האוטומטי באשכול

יש כמה דרכים לקבוע מה המידרוג האוטומטי של האשכול עושה.

בדיקת יומנים של המידרוג האוטומטי באשכול

קודם כל, צריך למצוא את השם של ה-Pod של המידרוג האוטומטי באשכול:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods -n USER_CLUSTER_NAME | grep cluster-autoscaler

בדיקת היומנים ב-Pod של המידרוג האוטומטי באשכול:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG logs cluster-autoscaler-POD_NAME --container cluster-autoscaler -n USER_CLUSTER_NAME

מחליפים את POD_NAME בשם של ה-Pod של Cluster Autoscaler.

בדיקת מפת ההגדרות

הכלי לשינוי גודל האשכול מפרסם את מפת ההגדרות kube-system/cluster-autoscaler-status.

כדי לראות את מפת ההגדרה:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get configmap cluster-autoscaler-status -n kube-system -o yaml

בודקים את האירועים של המידרוג האוטומטי באשכול.

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

  • ב-pods (במיוחד ב-pods שלא ניתן לתזמן, או בצמתים שלא נעשה בהם שימוש מלא)
  • בצמתים
  • במפת ההגדרות kube-system/cluster-autoscaler-status.

מגבלות

אלו המגבלות שחלות על המידרוג האוטומטי של האשכול:

פתרון בעיות

  • לפעמים, המידרוג האוטומטי של האשכול לא מצליח להקטין את האשכול באופן מלא, ונשאר צומת נוסף אחרי ההקטנה. המצב הזה יכול לקרות כשמתוזמנים פודים נדרשים של המערכת לצמתים שונים, כי אין טריגר להעברת הפודים האלה לצומת אחר. יש לי כמה צמתים עם ניצול נמוך, אבל הם לא מצטמצמים. למה? כדי לעקוף את ההגבלה הזו, אפשר להגדיר תקציב לשיבוש Pod.

  • אם נתקלתם בבעיות בהקטנת קנה המידה של האשכול, כדאי לעיין במאמר תזמון של Pod והפרעות. יכול להיות שתצטרכו להוסיף PodDisruptionBudget לתרמילי kube-system. מידע נוסף על הוספה ידנית של PodDisruptionBudget ל-Pods של kube-system זמין במאמר שאלות נפוצות בנושא מידרוג אוטומטי של אשכולות Kubernetes.

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

    • כללי הזיקה או האנטי-זיקה של ה-Pod מונעים תזמון מחדש.

    • ל-Pod יש אחסון מקומי.

    • ה-Pod לא מנוהל על ידי בקר כמו Deployment,‏ StatefulSet,‏ Job או ReplicaSet.

    • ה-Pod נמצא במרחב השמות kube-system ואין לו PodDisruptionBudget

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

מידע נוסף

מידע נוסף על מידרוג אוטומטי של אשכולות ומניעת שיבושים זמין בשאלות הבאות בשאלות הנפוצות בנושא מידרוג אוטומטי של אשכולות Kubernetes: