התאמה אוטומטית לעומס (autoscaling) באשכול

בדף הזה מוסבר איך להגדיר התאמה אוטומטית לעומס באשכולות Standard של Google Kubernetes Engine‏ (GKE). מידע על אופן הפעולה של המידרוג האוטומטי של האשכול מופיע במאמר בנושא המידרוג האוטומטי של האשכול.

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

שימוש ב-Cluster Autoscaler

בקטעים הבאים מוסבר איך להשתמש ב-Cluster Autoscaler.

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

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

gcloud

כדי ליצור אשכול עם התאמה אוטומטית לעומס, משתמשים בדגל --enable-autoscaling ומציינים את --min-nodes ואת --max-nodes:

gcloud container clusters create CLUSTER_NAME \
    --enable-autoscaling \
    --num-nodes NUM_NODES \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --location=CONTROL_PLANE_LOCATION

מחליפים את מה שכתוב בשדות הבאים:

  • ‫CLUSTER_NAME: השם של האשכול שרוצים ליצור.
  • ‫NUM_NODES: מספר הצמתים שייווצרו בכל מיקום.
  • ‫MIN_NODES: המספר המינימלי של הצמתים שניתן להגדיל או להקטין באופן אוטומטי עבור מאגר הצמתים שצוין בכל אזור. כדי לציין את המספר המינימלי של צמתים לכל מאגר הצמתים ב-GKE מגרסה 1.24 ואילך, משתמשים ב---total-min-nodes. הסימונים --total-min-nodes ו---total-max-nodes לא יכולים להתקיים בו-זמנית עם הסימונים --min-nodes ו---max-nodes.
  • ‫MAX_NODES: המספר המקסימלי של הצמתים שניתן להרחיב באופן אוטומטי עבור מאגר הצמתים שצוין בכל אזור. כדי לציין את המספר המקסימלי של צמתים למאגר הצמתים כולו ב-GKE מגרסה 1.24 ואילך, משתמשים ב---total-max-nodes. הדגלים --total-min-nodes ו---total-max-nodes לא יכולים להתקיים בו-זמנית עם הדגלים --min-nodes ו---max-nodes.
  • ‫CONTROL_PLANE_LOCATION: המיקום של מישור הבקרה של האשכול ב-Compute Engine. מציינים אזור לאשכולות אזוריים או אזור לאשכולות אזוריים.

דוגמה: יצירת אשכול עם התאמה אוטומטית לעומס (automatic scaling) של צמתים מופעלת ומספר הצמתים המינימלי והמקסימלי מוגדרים

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

gcloud container clusters create my-cluster --enable-autoscaling \
    --num-nodes=30 \
    --min-nodes=15 --max-nodes=50 \
    --location=us-central1

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

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

gcloud container clusters create my-cluster --enable-autoscaling \
    --num-nodes 10 \
    --location us-central1 \
    --total-min-nodes 10  --total-max-nodes 60

המסוף

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

  1. נכנסים לדף Create a Kubernetes cluster במסוף Google Cloud .

    מעבר אל יצירת אשכול Kubernetes

  2. מגדירים את האשכול לפי הצורך.

  3. בחלונית הניווט, בקטע Node Pools (מאגרי צמתים), לוחצים על default-pool (מאגר ברירת המחדל).

  4. מסמנים את התיבה Enable autoscaling (הפעלת שינוי גודל אוטומטי).

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

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

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

אפשר ליצור מאגר צמתים עם הפעלה של התאמה אוטומטית לעומס (automatic scaling) באמצעות ה-CLI של gcloud או המסוף Google Cloud .

gcloud

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

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --enable-autoscaling \
    --min-nodes=MIN_NODES \
    --max-nodes=MAX_NODES \
    --location=CONTROL_PLANE_LOCATION

מחליפים את מה שכתוב בשדות הבאים:

  • ‫POOL_NAME: שם מאגר הצמתים הרצוי.
  • ‫CLUSTER_NAME: השם של האשכול שבו נוצר מאגר הצמתים.
  • ‫MIN_NODES: המספר המינימלי של הצמתים שניתן להגדיל או להקטין באופן אוטומטי עבור מאגר הצמתים שצוין בכל אזור. כדי לציין את המספר המינימלי של צמתים לכל מאגר הצמתים ב-GKE מגרסה 1.24 ואילך, משתמשים ב---total-min-nodes. הסימונים --total-min-nodes ו---total-max-nodes לא יכולים להתקיים בו-זמנית עם הסימונים --min-nodes ו---max-nodes.
  • ‫MAX_NODES: המספר המקסימלי של הצמתים שניתן להרחיב באופן אוטומטי עבור מאגר הצמתים שצוין בכל אזור. כדי לציין את המספר המקסימלי של צמתים למאגר הצמתים כולו ב-GKE מגרסה 1.24 ואילך, משתמשים ב---total-max-nodes. הסימונים --total-min-nodes ו---total-max-nodes לא יכולים להתקיים בו-זמנית עם הסימונים --min-nodes ו---max-nodes.
  • ‫CONTROL_PLANE_LOCATION: המיקום של מישור הבקרה של האשכול ב-Compute Engine. מציינים אזור לאשכולות אזוריים או אזור לאשכולות אזוריים.

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

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

gcloud container node-pools create my-node-pool \
    --cluster my-cluster \
    --enable-autoscaling \
    --min-nodes 1 --max-nodes 5 \
    --location us-central1-c

המסוף

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

  1. נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .

    מעבר אל Google Kubernetes Engine

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

  3. לוחצים על הכרטיסייה Nodes (צמתים).

  4. לוחצים על Create user-managed node pool (יצירת מאגר צמתים בניהול המשתמש).

  5. מגדירים את מאגר הצמתים לפי הצורך.

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

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

  8. לוחצים על יצירה.

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

אפשר להפעיל שינוי גודל אוטומטי של מאגר צמתים קיים באמצעות ה-CLI של gcloud או מסוף Google Cloud .

gcloud

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

gcloud container clusters update CLUSTER_NAME \
    --enable-autoscaling \
    --node-pool=POOL_NAME \
    --min-nodes=MIN_NODES \
    --max-nodes=MAX_NODES \
    --location=CONTROL_PLANE_LOCATION

מחליפים את מה שכתוב בשדות הבאים:

  • ‫CLUSTER_NAME: השם של האשכול שרוצים לעדכן.
  • ‫POOL_NAME: שם מאגר הצמתים הרצוי. אם יש לכם רק מאגר צמתים אחד, צריך לציין את הערך default-pool.
  • ‫MIN_NODES: המספר המינימלי של הצמתים שניתן להגדיל או להקטין באופן אוטומטי עבור מאגר הצמתים שצוין בכל אזור. כדי לציין את המספר המינימלי של צמתים לכל מאגר הצמתים ב-GKE מגרסה 1.24 ואילך, משתמשים ב---total-min-nodes. הסימונים --total-min-nodes ו---total-max-nodes לא יכולים להתקיים בו-זמנית עם הסימונים --min-nodes ו---max-nodes.
  • ‫MAX_NODES: המספר המקסימלי של הצמתים שניתן להרחיב באופן אוטומטי עבור מאגר הצמתים שצוין בכל אזור. כדי לציין את המספר המקסימלי של צמתים למאגר הצמתים כולו ב-GKE מגרסה 1.24 ואילך, משתמשים ב---total-max-nodes. הסימונים --total-min-nodes ו---total-max-nodes לא יכולים להתקיים בו-זמנית עם הסימונים --min-nodes ו---max-nodes.
  • ‫CONTROL_PLANE_LOCATION: המיקום של מישור הבקרה של האשכול ב-Compute Engine. מציינים אזור לאשכולות אזוריים או אזור לאשכולות אזוריים.

המסוף

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

  1. נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .

    מעבר אל Google Kubernetes Engine

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

  3. לוחצים על הכרטיסייה Nodes (צמתים).

  4. בקטע Node Pools (מאגרי צמתים), לוחצים על השם של מאגר הצמתים שרוצים לשנות ואז לוחצים על Edit (עריכה).

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

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

  7. לוחצים על Save.

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

כדי לוודא שהאפשרות 'שינוי גודל אוטומטי' מופעלת באשכול, משתמשים ב-Google Cloud CLI או במסוף Google Cloud .

gcloud

מתארים את מאגרי הצמתים באשכול:

gcloud container node-pools describe NODE_POOL_NAME --cluster=CLUSTER_NAME |grep autoscaling -A 1

מחליפים את מה שכתוב בשדות הבאים:

  • ‫NODE_POOL_NAME: השם של מאגר הצמתים החדש שבוחרים.
  • ‫CLUSTER_NAME: שם האשכול.

אם ההרחבה האוטומטית מופעלת, הפלט דומה לזה:

autoscaling:
  enabled: true

המסוף

  1. נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .

    מעבר אל Google Kubernetes Engine

  2. ברשימת האשכולות, לוחצים על שם האשכול שרוצים לאמת.

  3. לוחצים על הכרטיסייה Nodes (צמתים).

  4. בקטע Node Pools (מאגרי צמתים), בודקים את המצב של מאגר הצמתים Autoscalling.

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

כשיוצרים מאגר צמתים, אפשר להשתמש בדגל --location-policy=ANY כדי להנחות את הכלי לשינוי גודל האשכול באופן אוטומטי לתת עדיפות לניצול של שריוני משאבים שלא נעשה בהם שימוש:

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location-policy=ANY

מחליפים את מה שכתוב בשדות הבאים:

  • ‫POOL_NAME: השם של מאגר הצמתים החדש שבוחרים.
  • ‫CLUSTER_NAME: שם האשכול.

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

אפשר להשבית את שינוי הגודל האוטומטי של מאגר צמתים קיים באמצעות ה-CLI של gcloud או מסוף Google Cloud .

gcloud

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

gcloud container clusters update CLUSTER_NAME \
    --no-enable-autoscaling \
    --node-pool=POOL_NAME \
    --location=CONTROL_PLANE_LOCATION

מחליפים את מה שכתוב בשדות הבאים:

  • ‫CLUSTER_NAME: השם של האשכול שרוצים לעדכן.
  • ‫POOL_NAME: שם מאגר הצמתים הרצוי.
  • ‫CONTROL_PLANE_LOCATION: המיקום של מישור הבקרה של האשכול ב-Compute Engine. מציינים אזור לאשכולות אזוריים או אזור לאשכולות אזוריים.

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

המסוף

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

  1. נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .

    מעבר אל Google Kubernetes Engine

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

  3. לוחצים על הכרטיסייה Nodes (צמתים).

  4. בקטע Node Pools (מאגרי צמתים), לוחצים על השם של מאגר הצמתים שרוצים לשנות ואז לוחצים על Edit (עריכה).

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

  6. לוחצים על Save.

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

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

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

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

מניעת תזמון של Pods בצמתים נבחרים

אתם יכולים להשתמש ב-taints‏ startup או status כדי למנוע תזמון של Pods בצמתים נבחרים, בהתאם לתרחיש השימוש.

התכונה הזו זמינה ב-GKE בגרסה 1.28 ואילך.

הפרעות בהפעלה

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

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

ההגדרות של taints בהפעלה מוגדרות ככל ה-taints עם הקידומת startup-taint.cluster-autoscaler.kubernetes.io/

הכתמות סטטוס

משתמשים ב-status taints כשלא רוצים ש-GKE ישתמש בצומת מסוים כדי להריץ Pods.

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

ההגדרות של taints של סטטוס הן כל ההגדרות של taints עם הקידומת status-taint.cluster-autoscaler.kubernetes.io/

התעלמות מהכתמים

התעלמות מהכתמים מוגדרת כהתעלמות מכל הכתמים עם הקידומת ignore-taint.cluster-autoscaler.kubernetes.io/

פתרון בעיות

הנחיות לפתרון בעיות זמינות בדפים הבאים:

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