בדף הזה יש סקירה כללית של התאמה אופקית של קבוצות Pod לעומס (Horizontal Pod Autoscaling, HPA) והסבר על האופן שבו היא פועלת ב-Google Kubernetes Engine (GKE). אפשר גם לקרוא על הגדרה ושימוש במידרוג אוטומטי אופקי של Pod באשכולות.
התאמה אופקית של קבוצות Pod לעומס משנה את הצורה של עומס העבודה ב-Kubernetes על ידי הגדלה או הקטנה אוטומטית של מספר קבוצות ה-Pod, בתגובה לצריכת ה-CPU או הזיכרון של עומס העבודה, או בתגובה למדדים בהתאמה אישית שמדווחים מתוך Kubernetes או למדדים חיצוניים ממקורות מחוץ לאשכול.
התאמה אופקית של קבוצות Pod לעומס (Horizontal Pod Autoscaling, HPA) לא משנה את מספר הצמתים באשכול GKE. כדי לבצע התאמה אוטומטית לעומס של מספר הצמתים באשכול בהתאם לשינויים במספר ה-Pods, אפשר להשתמש במידרוג אוטומטי של האשכול.
כשפורסים עומס עבודה באשכול Kubernetes בפעם הראשונה, יכול להיות שלא תדעו מהן דרישות המשאבים שלו. יכול להיות שהדרישות האלה ישתנו עם הזמן בהתאם לדפוסי השימוש, לתלות חיצונית או לגורמים אחרים. הגדלה אוטומטית של מספר ה-Pods באופן אופקי עוזרת לוודא שעומס העבודה פועל באופן עקבי במצבים שונים, ומאפשרת לכם לשלוט בעלויות כי אתם משלמים על קיבולת נוספת רק כשאתם צריכים אותה.
לא תמיד קל לחזות את האינדיקטורים שמראים אם עומס העבודה שלכם לא מקבל מספיק משאבים או לא מנוצל מספיק. הכלי Horizontal Pod Autoscaler (HPA) יכול לשנות באופן אוטומטי את מספר ה-Pods בעומס העבודה שלכם בהתבסס על מדד אחד או יותר מהסוגים הבאים:
השימוש בפועל במשאבים: כששימוש במעבד (CPU) או בשימוש בזיכרון של Pod מסוים חורג מסף מסוים. אפשר לבטא את זה כערך גולמי או כאחוז מהכמות שה-Pod מבקש לאותו משאב.
מדדים מותאמים אישית: מבוססים על כל מדד שמדווח על ידי אובייקט Kubernetes באשכול, כמו קצב הבקשות של הלקוח לשנייה או פעולות כתיבה של קלט/פלט לשנייה.
האפשרות הזו יכולה להיות שימושית אם האפליקציה שלכם נוטה לצווארי בקבוק ברשת, ולא במעבד (CPU) או בזיכרון.
מדדים חיצוניים: מבוססים על מדד מאפליקציה או משירות חיצוניים לאשכול.
לדוגמה, יכול להיות שעומס העבודה שלכם יצטרך יותר CPU כשמבצעים המרה של מספר גדול של בקשות מצינור כמו Pub/Sub. אפשר ליצור מדד חיצוני לגודל התור, ולהגדיר את הכלי האוטומטי לשינוי גודל ה-Pod באופן אופקי כך שיגדיל אוטומטית את מספר ה-Pods כשגודל התור מגיע לסף נתון, ויקטין את מספר ה-Pods כשגודל התור קטן.
אפשר לשלב בין Horizontal Pod Autoscaler (HPA) לבין Vertical Pod Autoscaler (VPA), אבל יש מגבלות.
איך פועלת התאמה אופקית של קבוצות Pod לעומס
כל Horizontal Pod Autoscaler (HPA) מוגדר פועל באמצעות לולאת בקרה. לכל עומס עבודה יש Horizontal Pod Autoscaler נפרד. כל התאמה אופקית של קבוצות Pod לעומס בודקת מדי פעם את המדדים של עומס עבודה נתון בהשוואה לספי היעד שהגדרתם, ומשנה את צורת עומס העבודה באופן אוטומטי.
משאבים לכל Pod
לגבי משאבים שמוקצים לכל Pod, כמו מעבד, בקר השאילתות של API של מדדי המשאבים לכל מאגר שפועל ב-Pod.
- אם מציינים ערך גולמי למעבד או לזיכרון, המערכת משתמשת בערך הזה.
- אם מציינים ערך באחוזים למעבד או לזיכרון, הכלי Horizontal Pod Autoscaler (HPA) מחשב את ערך הניצול הממוצע כאחוז מתוך בקשות המעבד או הזיכרון של ה-Pod.
- מדדים מותאמים אישית ומדדים חיצוניים מוצגים כערכים גולמיים או כערכים ממוצעים.
הבקר משתמש בערך הממוצע או בערך הגולמי של מדד שדווח כדי ליצור יחס, ומשתמש ביחס הזה כדי לשנות את קנה המידה של עומס העבודה באופן אוטומטי. במסמכי התיעוד של פרויקט Kubernetes אפשר לקרוא תיאור של האלגוריתם של Horizontal Pod Autoscaler.
תגובה למספר מדדים
אם מגדירים לעומס עבודה התאמה אוטומטית לעומס על סמך כמה מדדים, הכלי Horizontal Pod Autoscaler מעריך כל מדד בנפרד ומשתמש באלגוריתם ההתאמה לעומס כדי לקבוע את קנה המידה החדש של עומס העבודה על סמך כל אחד מהם. הסולם הגדול ביותר נבחר לפעולת שינוי הגודל האוטומטי.
אם מדד אחד או יותר לא זמינים מסיבה כלשהי, עדיין מתבצעת הגדלה של קנה המידה של ה-Pod האופקי על סמך הגודל המחושב הגדול ביותר, אבל לא מתבצעת הקטנה של קנה המידה.
מניעת תנודות חדות
Thrashing (התרוצצות) מתייחס למצב שבו Horizontal Pod Autoscaler (HPA) מנסה לבצע פעולות התאמה לעומס בזו אחר זו, לפני שעומס העבודה מסיים להגיב לפעולות הקודמות. כדי למנוע תנודות חדות, כלי ה-Pod Autoscaler האופקי בוחר את ההמלצה הגדולה ביותר מתוך חלון ייצוב שצוין.
ההתנהגות הזו נשלטת על ידי השדה scaleDown.stabilizationWindowSeconds
במפרט של HPA behavior, שערך ברירת המחדל שלו הוא 300 שניות (חמש דקות) ב-GKE.
כדי למנוע תנודות קלות שגורמות לאירועי התאמה לעומס מיותרים, ההתאמה האופקית של קבוצות Pod לעומס משתמשת בערך סבילות של 10%. ביעד נתון, לא מתבצעת פעולת התאמה לעומס אם היחס בין ערך המדד הנוכחי לערך המדד של היעד הוא בטווח של 10% מ-1.0.
התאמה אוטומטית של מספר השרתים לאפס
ב-GKE בגרסה 1.37 ואילך, אפשר להגדיר את הכלי האוטומטי לשינוי גודל של Pod אופקי כדי להקטין את עומס העבודה ל-0 רפליקות כשאין ביקוש, ולהגדיל את עומס העבודה באופן אוטומטי כשהביקוש מתחדש. התנהגויות שקשורות להגדלה של מספר המכונות מאפס ומאפס למספר כלשהו:
- עקיפת סף הסבילות: כשעומס עבודה מגיע ל-
0רפליקות, GKE עוקף את בדיקת סף הסבילות של המדד הרגיל (יחס של 0.9 עד 1.1). כל ערך של מדד שגדול מאפס, כמו הודעה אחת בתור, מפעיל באופן מיידי הגדלה של מספר העותקים לפחות ל-1, בלי לחכות לחציית סף הסבילות. - חלונות ייצוב: הגדלת הקיבולת מוגדרת כברירת מחדל ל-
0שניות (scaleUp.stabilizationWindowSeconds: 0) להפעלה מיידית, והקטנת הקיבולת מוגדרת כברירת מחדל ל-300שניות (scaleDown.stabilizationWindowSeconds: 300) כדי להבטיח חמש דקות רצופות של אפס ביקוש לפני שינוי הגודל ל-0רפליקות. - תנאי סטטוס: כשמבצעים שינוי גודל ל-
0רפליקות באמצעות HPA, הבקר מדווח על התנאיScaledToZero: Trueבזמן שהוא נשאר פעיל (ScalingActive: True). אם משנים את הגודל של עומס עבודה ל-0רפליקות באופן ידני מחוץ ל-HPA (למשל באמצעות הפקודהkubectl scale), שינוי הגודל האוטומטי מושהה (ScalingActive: False) עד שעומס העבודה יוקטן בחזרה ל-1רפליקות או יותר.
הוראות מפורטות זמינות במאמר שינוי קנה מידה של עומסי עבודה ב-GKE לאפס ומאפס באמצעות HPA.
מגבלות
- אם אתם לא משתמשים בהתאמה של HPA באמצעות VPA (גרסת טרום-השקה), אל תשתמשו בהתאמה אופקית של קבוצות Pod לעומס יחד עם התאמה אנכית של קבוצות Pod לעומס ב-CPU או בזיכרון. אתם יכולים להשתמש ב-Horizontal Pod Autoscaler (HPA) עם Vertical Pod Autoscaler (VPA) למדדים אחרים, או להגדיר שינוי גודל של Pod בכמה ממדים כדי לשנות את הגודל אופקית ב-CPU ואנכית בזיכרון בו-זמנית.
- אם יש לכם Deployment (פריסה), אל תגדירו את התאמה אופקית של קבוצות Pod לעומס ב-ReplicaSet או ב-Replication Controller שמשמשים כגיבוי לפריסה. כשמבצעים עדכון הדרגתי ב-Deployment או ב-Replication Controller, הוא מוחלף ב-Replication Controller חדש. במקום זאת, מגדירים התאמה אופקית של קבוצות Pod לעומס (horizontal Pod autoscaling) בפריסת ה-Deployment עצמה.
- אי אפשר להשתמש בהתאמה אופקית של קבוצות Pod לעומס בעומסי עבודה שלא ניתן לשנות את קנה המידה שלהם, כמו DaemonSets.
- התאמה אופקית של קבוצות Pod לעומס חושפת מדדים כמשאבים ב-Kubernetes, מה שמטיל מגבלות על שמות המדדים, כמו איסור על שימוש באותיות רישיות או בתו '/'.
יכול להיות שמתאם המדדים מאפשר שינוי שם. לדוגמה, אפשר לעיין באופרטור
prometheus-adapteras. - המידרוג האוטומטי של ה-Pods לא מצמצם את מספר ה-Pods אם אחד מהמדדים שהוא מוגדר לעקוב אחריהם לא זמין. כדי לבדוק אם יש מדדים לא זמינים, אפשר לעיין במאמר בנושא הצגת פרטים על Horizontal Pod Autoscaler.
מדרגיות
למרות שאין מגבלה קשיחה על מספר אובייקטי ה-HPA הנתמכים, הביצועים של Horizontal Pod Autoscaler יכולים להיות מושפעים ככל שהמספר הזה גדל. באופן ספציפי, יכול להיות שהתקופה שבין החישובים מחדש של HPA תהיה ארוכה יותר מ-15 השניות הרגילות.
- ב-GKE בגרסה משנית 1.31 או 1.32, אם מוגדר פרופיל הביצועים של HPA, תקופת החישוב מחדש צריכה להיות עד 15 שניות עם עד 1,000 אובייקטים של HPA. איך מגדירים את פרופיל ה-HPA לביצועים
- בגרסה משנית 1.33 של GKE ואילך, אם מוגדר פרופיל Performance HPA, תקופת החישוב מחדש צריכה להיות בטווח של 15 שניות עם עד 5,000 אובייקטים של HPA. פרופיל ה-HPA של הביצועים מופעל כברירת מחדל בכל האשכולות שעומדים בדרישות.
- אם פרופיל הביצועים של HPA לא מוגדר, תקופת החישוב מחדש צריכה להיות עד 15 שניות עם עד 300 אובייקטים של HPA.
גם הגורמים הבאים יכולים להשפיע על הביצועים:
- התאמה למספר מדדים: כל מדד מוסיף קריאת אחזור לחישובי ההמלצות, וזה משפיע על תקופת החישוב מחדש.
- זמן האחזור של מחסנית המדדים המותאמים אישית: זמני תגובה של יותר מ-50 אלפיות השנייה בערך יהיו ארוכים יותר מאלה שבדרך כלל נצפים במדדים הרגילים של Kubernetes, וישפיעו על תקופת החישוב מחדש.
אינטראקציה עם אובייקטים של HorizontalPodAutoscaler
כדי להגדיר שינוי גודל אוטומטי של Pod אופקי לעומס עבודה, ולקבל מידע על אירועים של שינוי גודל אוטומטי ומה גרם להם, אפשר להיכנס לדף Workloads במסוף Google Cloud .
כל Horizontal Pod Autoscaler קיים באשכול כאובייקט HorizontalPodAutoscaler. אפשר להשתמש בפקודות כמו kubectl get hpa או kubectl describe hpa HPA_NAME כדי ליצור אינטראקציה עם האובייקטים האלה.
אפשר גם ליצור אובייקטים של HorizontalPodAutoscaler באמצעות הפקודה kubectl autoscale.
המאמרים הבאים
- איך מגדירים התאמה אופקית של קבוצות Pod לעומס
- איך משתמשים ב-VPA כדי להתאים את הגודל של עומסי עבודה של HPA
- איך משתמשים ב-HPA כדי לשנות את קנה המידה מאפס ועד לערך מסוים, או מערך מסוים ועד לאפס
- איך משנים את קנה המידה של אפליקציה באופן ידני
- מידע נוסף על Vertical Pod Autoscaler
- מידע נוסף על שינוי גודל אוטומטי של אשכולות