בדף הזה יש סקירה כללית של התאמה אופקית של קבוצות 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 (HPA) כך שיגדיל באופן אוטומטי את מספר ה-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 הוא מצב שבו הכלי Horizontal Pod Autoscaler מנסה לבצע פעולות נוספות של התאמה אוטומטית של קבוצות Pod לעומס לפני שעומס העבודה מסיים להגיב לפעולות קודמות של התאמה אוטומטית של קבוצות Pod לעומס. כדי למנוע תנודות חדות, הכלי Horizontal Pod Autoscaler בוחר את ההמלצה הגדולה ביותר מתוך חלון ייצוב שצוין.
ההתנהגות הזו נשלטת על ידי השדה scaleDown.stabilizationWindowSeconds
במפרט של HPA behavior, שערך ברירת המחדל שלו הוא 300 שניות (חמש דקות) ב-GKE.
כדי למנוע תנודות קלות שגורמות לאירועי שינוי גודל מיותרים, המידרוג האוטומטי האופקי של ה-Pod משתמש בערך סובלנות של 10%. עבור יעד נתון, לא מתבצעת פעולת שינוי גודל אם היחס בין הערך הנוכחי של המדד לבין ערך היעד של המדד הוא בטווח של 10% מהערך 1.0.
מגבלות
- אל תשתמשו ב-Horizontal Pod Autoscaler יחד עם Vertical Pod Autoscaler במעבד (CPU) או בזיכרון. אפשר להשתמש ב-Horizontal Pod Autoscaler יחד עם Vertical Pod Autoscaler למדדים אחרים. אתם יכולים להגדיר התאמה אוטומטית של גודל ה-Pod בכמה ממדים (בשלב בטא) כדי לשנות את הגודל אופקית לפי CPU ואנכית לפי זיכרון בו-זמנית.
- אם יש לכם Deployment (פריסה), אל תגדירו את התאמה אופקית של קבוצות Pod לעומס ב-ReplicaSet או ב-Replication Controller שמשמשים כגיבוי שלה. כשמבצעים עדכון הדרגתי ב-Deployment או ב-Replication Controller, הוא מוחלף ב-Replication Controller חדש. במקום זאת, מגדירים התאמה אופקית של קבוצות Pod לעומס (autoscaling) בפריסת ה-Deployment עצמה.
- אי אפשר להשתמש בהתאמה אופקית של קבוצות Pod לעומס לעומסי עבודה שלא ניתן לשנות את הגודל שלהם, כמו DaemonSets.
- התאמה אופקית של קבוצות Pod לעומס חושפת מדדים כמשאבי Kubernetes, מה שמגביל את שמות המדדים. למשל, אי אפשר להשתמש באותיות רישיות או בתו '/'.
יכול להיות שאפשר לשנות את השם של מתאם המדדים. לדוגמה, אפשר לעיין באופרטור
prometheus-adapteras. - הכלי Horizontal Pod Autoscaler לא יקטין את קנה המידה אם אחד מהמדדים שהוא מוגדר לעקוב אחריהם לא זמין. כדי לבדוק אם יש מדדים לא זמינים, אפשר לעיין במאמר בנושא הצגת פרטים על Horizontal Pod Autoscaler.
מדרגיות
למרות שאין למנגנון Horizontal Pod Autoscaler מגבלה קשיחה על מספר אובייקטי ה-HPA הנתמכים, הביצועים שלו עלולים להיפגע ככל שהמספר הזה גדל. באופן ספציפי, יכול להיות שהתקופה בין החישובים מחדש של 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 של הביצועים מופעל כברירת מחדל בכל האשכולות שעומדים בדרישות.
הגורמים הבאים יכולים גם להשפיע על הביצועים:
- שינוי קנה מידה בכמה מדדים: כל מדד מוסיף קריאת אחזור לחישובי ההמלצות, וזה משפיע על תקופת החישוב מחדש.
- ההשהיה של חבילת המדדים המותאמים אישית: זמני תגובה של יותר מ-50 אלפיות השנייה בערך יהיו ארוכים יותר מהרגיל במדדים הרגילים של Kubernetes, וישפיעו על תקופת החישוב מחדש.
אינטראקציה עם אובייקטים של HorizontalPodAutoscaler
אפשר להגדיר Horizontal Pod Autoscaler (כלי להרחבת פודים אופקית) לעומס עבודה, ולקבל מידע על אירועי שינוי גודל אוטומטי ומה גרם להם, בדף Workloads במסוף Google Cloud .
כל Horizontal Pod Autoscaler קיים באשכול כאובייקט HorizontalPodAutoscaler. אפשר להשתמש בפקודות כמו kubectl get hpa או kubectl describe hpa HPA_NAME כדי ליצור אינטראקציה עם האובייקטים האלה.
אפשר גם ליצור אובייקטים מסוג HorizontalPodAutoscaler באמצעות הפקודה kubectl autoscale.
המאמרים הבאים
- איך מגדירים התאמה אופקית של קבוצות Pod לעומס
- איך משנים את גודל האפליקציה באופן ידני
- איך משתמשים ב-KEDA כדי להגדיר את המידה ל-0
- מידע נוסף על Vertical Pod Autoscaler
- מידע נוסף על Cluster Autoscaler