התאמה אופקית של קבוצות Pod לעומס

בדף הזה יש סקירה כללית של התאמה אופקית של קבוצות Pod לעומס (Horizontal Pod Autoscaling,‏ HPA) והסבר על אופן הפעולה שלה ב-Google Kubernetes Engine ‏(GKE). אפשר גם לקרוא על התאמה אופקית של קבוצות Pod לעומס באשכולות.

הכלי Horizontal Pod Autoscaler משנה את הצורה של עומס העבודה של Kubernetes על ידי הגדלה או הקטנה אוטומטית של מספר ה-Pods בתגובה לצריכת ה-CPU או הזיכרון של עומס העבודה, או בתגובה למדדים מותאמים אישית שדווחו מתוך Kubernetes או למדדים חיצוניים ממקורות מחוץ לאשכול.

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

למה כדאי להשתמש בהתאמה אופקית של קבוצות Pod לעומס

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

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

  • שימוש בפועל במשאבים: כששימוש במעבד (CPU) או בשימוש בזיכרון של Pod מסוים חורג מסף מסוים. אפשר להזין את הערך כערך גולמי או כאחוז מהסכום שה-Pod מבקש עבור המשאב הזה.

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

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

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

    לדוגמה, יכול להיות שעומס העבודה שלכם יזדקק ליותר CPU כשמבצעים המרה של מספר גדול של בקשות מצינור כמו Pub/Sub. אפשר ליצור מדד חיצוני לגודל התור, ולהגדיר את הכלי Horizontal Pod Autoscaler כך שיגדיל באופן אוטומטי את מספר ה-Pods כשגודל התור מגיע לסף נתון, ויקטין את מספר ה-Pods כשגודל התור קטן.

אפשר לשלב בין Horizontal Pod Autoscaler לבין Vertical Pod Autoscaler, אבל יש כמה מגבלות.

איך פועלת התאמה אופקית של קבוצות Pod לעומס

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

משאבים לכל Pod

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

  • אם מציינים ערך גולמי למעבד או לזיכרון, המערכת משתמשת בערך הזה.
  • אם מציינים ערך באחוזים ל-CPU או לזיכרון, המערכת Horizontal Pod Autoscaler מחשבת את ערך הניצול הממוצע כאחוז מתוך בקשות ה-CPU או הזיכרון של ה-Pod.
  • מדדים מותאמים אישית ומדדים חיצוניים מוצגים כערכים גולמיים או כערכים ממוצעים.

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

תגובה למדדים רבים

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

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

מניעת החלפה תכופה של דפים (thrashing)

העמסה (thrashing) מתייחס למצב שבו הכלי Horizontal Pod Autoscaler (HPA) מנסה לבצע פעולות נוספות של התאמה אוטומטית לעומס לפני שעומס העבודה מסיים להגיב לפעולות קודמות של התאמה אוטומטית לעומס. כדי למנוע תנודות חדות, הכלי Horizontal Pod Autoscaler בוחר את ההמלצה הגדולה ביותר על סמך חמש הדקות האחרונות.

מגבלות

  • אל תשתמשו ב-Horizontal Pod Autoscaler יחד עם Vertical Pod Autoscaler במעבד או בזיכרון. אפשר להשתמש ב-Horizontal Pod Autoscaler עם Vertical Pod Autoscaler למדדים אחרים. אתם יכולים להגדיר התאמה אוטומטית לעומס (automatic scaling) של Pod רב-ממדי (בשלב בטא) כדי לשנות את הגודל באופן אופקי במעבד (CPU) ואנכי בזיכרון בו-זמנית.
  • אם יש לכם Deployment (פריסה), אל תגדירו את התכונה 'התאמה אופקית של קבוצות Pod לעומס' ב-ReplicaSet או ב-Replication Controller שמשמשים כגיבוי שלה. כשמבצעים עדכון מתגלגל ב-Deployment או ב-Replication Controller, הוא מוחלף ב-Replication Controller חדש. במקום זאת, מגדירים התאמה אופקית של קבוצות Pod לעומס (autoscaling) בפריסה עצמה.
  • אי אפשר להשתמש בהתאמה אופקית של קבוצות Pod לעומס עבור עומסי עבודה שלא ניתן להרחיב אותם, כמו DaemonSets.
  • התאמה אופקית של קבוצות Pod לעומס חושפת מדדים כמשאבי Kubernetes, מה שמגביל את שמות המדדים, למשל אי אפשר להשתמש באותיות רישיות או בתווים '/'. יכול להיות שאפשר לשנות את השם של מתאם המדדים. לדוגמה, אפשר לעיין באופרטור prometheus-adapter as.
  • Horizontal Pod Autoscaler (HPA) לא יקטין את קנה המידה אם אחד מהמדדים שהוא מוגדר לעקוב אחריהם לא זמין. כדי לבדוק אם יש מדדים לא זמינים, אפשר לעיין במאמר בנושא הצגת פרטים על Horizontal Pod Autoscaler.

מדרגיות

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

  • בגרסה משנית 1.22 של GKE ואילך, תקופת החישוב מחדש צריכה להיות עד 15 שניות עם עד 300 אובייקטים של HPA.
  • בגרסה משנית 1.31 ואילך של GKE, אם מוגדר פרופיל הביצועים של HPA, תקופת החישוב מחדש צריכה להיות עד 15 שניות עם עד 1,000 אובייקטים של HPA. איך מגדירים את פרופיל ה-HPA של הביצועים
  • ב-GKE בגרסה משנית 1.33 ואילך, אם מוגדר פרופיל הביצועים של HPA, תקופת החישוב מחדש צריכה להיות עד 15 שניות עם עד 5,000 אובייקטים של HPA. פרופיל ה-HPA של הביצועים מופעל כברירת מחדל בכל האשכולות שעומדים בדרישות.

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

אינטראקציה עם אובייקטים של HorizontalPodAutoscaler

אפשר להגדיר Horizontal Pod Autoscaler (מנגנון להרחבת פודים באופן אופקי) לעומס עבודה, ולקבל מידע על אירועי התאמה אוטומטית לעומס ומה גרם להם, בדף Workloads (עומסי עבודה) במסוף Google Cloud .

כל Horizontal Pod Autoscaler קיים באשכול כאובייקט HorizontalPodAutoscaler. אפשר להשתמש בפקודות כמו kubectl get hpa או kubectl describe hpa HPA_NAME כדי ליצור אינטראקציה עם האובייקטים האלה.

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

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