בדף הזה מוסבר איך לבצע אופטימיזציה של משאבי האשכול כדי להבטיח קיבולת תזמון מספקת עבור ה-Pods שלכם. לשם כך, צריך להגדיר את המספר המקסימלי של Pods לכל צומת באשכולות רגילים ב-Google Kubernetes Engine (GKE). בדף הזה מוסבר איך הקשר בין Pods, גדלים של בלוקים של CIDR ומספר הצמתים משפיע על האופן שבו GKE מתזמן Pods ומקצה כתובות IP באשכול. בדף הזה מפורטים גם המגבלות וערכי ברירת המחדל של מספר ה-Pods המקסימלי לכל צומת.
הדף הזה מיועד לאנשי תפעול, לאדריכלי ענן, למפתחים ולמהנדסי רשת שמקצים ומגדירים משאבי ענן, פורסים אפליקציות ושירותים ומנהלים את הרשתות בפריסות הענן שלהם. מידע נוסף על תפקידים נפוצים ומשימות לדוגמה שמוזכרים בתוכן זמין במאמר תפקידים נפוצים של משתמשים ב-GKE ומשימות. Google Cloud
לפני שקוראים את הדף הזה, מומלץ להכיר את המקרים שבהם כדאי להשתמש באשכולות GKE Standard במקום באשכולות Autopilot, ואת מודל הרשת של Kubernetes.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק ה-API של Google Kubernetes Engine. הפעלת Google Kubernetes Engine API
- אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
הגבלות
- אפשר להגדיר את מספר ה-Pods המקסימלי לכל צומת רק באשכולות מקוריים של VPC.
- יצירת צמתים מוגבלת לפי מספר הכתובות הזמינות בטווח הכתובות של ה-Pod. בטבלת התכנון של טווח כתובות ה-IP מפורטים גדלי ברירת המחדל, המינימום והמקסימום של טווח כתובות ה-Pod. אפשר גם להוסיף כתובות IP נוספות של Pod באמצעות CIDR של כמה Pod לא רציפים.
לכל אשכול צריך ליצור פודים של kube-system, כמו kube-proxy, במרחב השמות
kube-system. כשמצמצמים את המספר המקסימלי של פודים לכל צומת, חשוב לזכור לקחת בחשבון גם את הפודים של עומס העבודה וגם את הפודים של המערכת. כדי להציג רשימה של System Pods באשכול, מריצים את הפקודה הבאה:kubectl get pods --namespace kube-system
הגדרת מספר ה-Pods המקסימלי לכל צומת
אתם יכולים להגדיר את המספר המקסימלי של Pods לכל צומת באשכול רגיל כשיוצרים אשכול או כשיוצרים מאגר צמתים. אי אפשר לשנות את ההגדרה הזו אחרי שיוצרים את האשכול או את מאגר הצמתים. במערכות Autopilot, המספר המקסימלי של הצמתים מוגדר מראש ואי אפשר לשנות אותו.
עם זאת, אם נגמרות לכם כתובות ה-IP של ה-Pod, אתם יכולים ליצור טווחים נוספים של כתובות IP של Pod באמצעות CIDR של כמה Pod לא רציפים.
אפשר להגדיר את הגודל של טווח כתובות ה-Pod כשיוצרים אשכול באמצעות ה-CLI של gcloud או מסוף Google Cloud .
gcloud
כדי להגדיר את ברירת המחדל של מספר הפודים המקסימלי לכל צומת באמצעות ה-CLI של gcloud, מריצים את הפקודה הבאה:
gcloud container clusters create CLUSTER_NAME \
--enable-ip-alias \
--cluster-ipv4-cidr=10.0.0.0/21 \
--services-ipv4-cidr=10.4.0.0/19 \
--create-subnetwork=name='SUBNET_NAME',range=10.5.32.0/27 \
--default-max-pods-per-node=MAXIMUM_PODS \
--location=COMPUTE_LOCATION
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול החדש. -
SUBNET_NAME: השם של רשת המשנה החדשה של האשכול. -
MAXIMUM_PODS: מספר ברירת המחדל המקסימלי של Pods לכל צומת באשכול, אפשר להגדיר עד256. אם לא מציינים ערך, Kubernetes מקצה את ערך ברירת המחדל110. -
COMPUTE_LOCATION: המיקום של Compute Engine של האשכול החדש.
המסוף
נכנסים לדף Create a Kubernetes cluster במסוף Google Cloud .
מגדירים את האשכול החדש.
בחלונית הניווט, בקטע Cluster, לוחצים על Networking.
מוודאים שתיבת הסימון הפעלת ניתוב תנועה מקורי ב-VPC (שימוש בכתובת IP של כינוי) מסומנת.
בחלונית הניווט, בקטע Node pools, לוחצים על Networking.
מגדירים את השדה Maximum pods per node (מספר הפודים המקסימלי לכל צומת) לערך
110. GKE משתמש בערך הזה כדי לשנות את הגודל של טווח כתובות ה-IP שמוקצה לצמתים.לוחצים על יצירה.
כשמגדירים את המספר המקסימלי של יחידות Pod לכל צומת באשכול, Kubernetes משתמש בערך הזה כדי להקצות טווח CIDR לצמתים. אתם יכולים לחשב את המספר המקסימלי של הצמתים באשכול על סמך טווח כתובות ה-IP המשני של האשכול עבור Pods וטווח ה-CIDR שהוקצה לצומת.
לדוגמה, אם מגדירים את מספר ברירת המחדל המקסימלי של קבוצות ה-Pod ל-110 ואת טווח כתובות ה-IP המשני של קבוצות ה-Pod ל-/21, מערכת Kubernetes מקצה טווח CIDR של /24 לצמתים באשכול. הקצאת טווח CIDR מאפשרת להגדיר עד 2(24-21) = 23 = 8 צמתים באשכול.
באופן דומה, אם מגדירים את ברירת המחדל של מספר הפודים המקסימלי ל-8 ואת טווח כתובות ה-IP המשני של האשכול לפודים ל-/21, מערכת Kubernetes מקצה טווח CIDR של /28 לצמתים. הקצאת טווח CIDR מאפשרת להגדיר עד 2(28-21) = 27 = 128 צמתים באשכול.
הגדרת המספר המקסימלי של Pods במאגר צמתים חדש באשכול קיים
אפשר גם לציין את המספר המקסימלי של Pods לכל צומת כשיוצרים מאגר צמתים באשכול קיים מסוג Standard. יצירת מאגר צמתים חדש מאפשרת לכם לבצע אופטימיזציה של הקצאת כתובות IP, גם באשכולות קיימים שבהם לא מוגדר מספר ברירת מחדל מקסימלי של Pods לכל צומת ברמת האשכול.
הגדרת המספר המקסימלי של ה-Pods ברמת מאגר הצמתים מבטלת את ברירת המחדל המקסימלית ברמת האשכול. אם לא מגדירים מספר מקסימלי של Pods לכל צומת כשיוצרים את מאגר הצמתים, חל המקסימום ברמת האשכול.
gcloud
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--max-pods-per-node=MAXIMUM_PODS
מחליפים את מה שכתוב בשדות הבאים:
-
POOL_NAME: השם של מאגר הצמתים החדש. -
CLUSTER_NAME: שם האשכול שבו רוצים ליצור את מאגר הצמתים. -
MAXIMUM_PODS: המספר המקסימלי של Pods במאגר הצמתים.
המסוף
עוברים לדף Google Kubernetes Engine במסוף Google Cloud .
ברשימת האשכולות, לוחצים על שם האשכול שרוצים לשנות.
לוחצים על הכרטיסייה Nodes.
לוחצים על add Create user-managed node pool (יצירת מאגר צמתים בניהול המשתמש).
בחלונית הניווט, לוחצים על Networking (רשת).
מזינים ערך בשדה Maximum pods per node. מערכת GKE משתמשת בערך הזה כדי לכוונן את הגודל של טווח כתובות ה-IP שהוקצה לצמתים.
טווחים משניים של Pod ומספר ה-Pods המקסימלי לכל צומת
כשמגדירים את המספר המקסימלי של Pods לכל צומת, משפיעים באופן עקיף על הגודל הנדרש של טווח המשנה של ה-Pods. ב-GKE נדרש בלוק CIDR מינימלי של /24 לכל מאגר צמתים. ניסיון לציין טווח משני של Pod שהוא קטן מ- /24 כשיוצרים מאגר צמתים מוביל לשגיאה הבאה:
Pod secondary range 'Pod' must have a CIDR block of at least /24
אם אתם צריכים טווח קטן יותר מ- /24 עבור האשכול הכולל, אתם יכולים לציין את זה ברמת האשכול באמצעות הארגומנט --cluster-ipv4-cidr עם Google Cloud CLI. מידע נוסף זמין במאמר בנושא יצירת אשכול עם טווח CIDR ספציפי. אפשר גם להשתמש ב-CIDR של כמה Pods לא רציפים כדי להוסיף ל-cluster עוד טווחי כתובות IP של Pods.
כל אשכול צריך ליצור פודים של kube-system, כמו kube-proxy, במרחב השמות kube-system. כשמגדירים את המספר המקסימלי של פודים לכל צומת, צריך לזכור לקחת בחשבון גם את הפודים של עומס העבודה וגם את פודי המערכת.
מידע על מספר ה-Pods המקסימלי שמוגדר כברירת מחדל לכל צומת
כברירת מחדל, GKE מאפשר עד 110 Pods לכל צומת באשכולות רגילים, אבל אפשר להגדיר אשכולות רגילים כך שיאפשרו עד 256 Pods לכל צומת. במצב Autopilot, המערכת בוחרת את מספר הפודים המקסימלי לכל צומת מתוך טווח של 8 עד 256, על סמך צפיפות הפודים הצפויה בעומס העבודה. Kubernetes מקצה לכל צומת טווח של כתובות IP, בלוק CIDR, כדי שלכל Pod תהיה כתובת IP ייחודית. הגודל של בלוק ה-CIDR תואם למספר המקסימלי של פודים לכל צומת.
טווחים של CIDR של Pod באשכולות רגילים
במערכות סטנדרטיות, עם ברירת המחדל של 110 פודים לכל צומת, Kubernetes מקצה בלוק CIDR של /24 (256 כתובות) לכל אחד מהצמתים. ב-Kubernetes, מספר כתובות ה-IP הזמינות גדול פי שניים ממספר קבוצות ה-Pod המקסימלי שאפשר ליצור בצומת. כך אפשר לצמצם את השימוש החוזר בכתובות IP כשמוסיפים קבוצות Pod לצומת ומסירים ממנו קבוצות Pod.
אומנם יש מגבלה קשיחה של 256 פודים לכל צומת, אבל אפשר להקטין את מספר הפודים בצומת. הגודל של בלוק ה-CIDR שמוקצה לצומת תלוי בערך המקסימלי של הפודים לכל צומת. הבלוק תמיד מכיל לפחות פי שניים כתובות ממספר ה-Pods המקסימלי לכל צומת.
בטבלה הבאה מפורט הגודל של בלוק ה-CIDR ומספר כתובות ה-IP הזמינות ש-Kubernetes מקצה לצמתים על סמך מספר הפודים המקסימלי לכל צומת:
| מספר הפודים המקסימלי לכל צומת | טווח CIDR לכל צומת | מספר כתובות ה-IP |
|---|---|---|
| 8 | /28 | 16 |
| 9 – 16 | /27 | 32 |
| 17 – 32 | /26 | 64 |
| 33 – 64 | /25 | 128 |
| 65 – 128 | /24 | 256 |
| 129-256 | /23 | 512 |
שיקולים לגבי גודל האשכול לטווח כתובות IP משני ל-Pods
כשיוצרים אשכול, אי אפשר לשנות את הגודל של טווח כתובות ה-IP המשני של ה-Pods. חשוב לתכנן בקפידה את גודל הטווח הזה כדי שיתאים לצרכים הנוכחיים והעתידיים של עומסי העבודה. אם אין מספיק מקום לכתובות IP עבור ה-Pods, יכול להיות שיהיו בעיות בתזמון ולא תהיה אפשרות להרחיב את האשכול.
אם אתם לא בטוחים מה הגודל הנדרש, מומלץ להתחיל עם טווח גדול יותר, כמו /21, שהוא ברירת המחדל עבור אשכולות שנוצרו באמצעות Google Cloud CLI. טווח גדול יותר מספק מספיק כתובות IP לאשכול בגודל בינוני, ומאפשר גמישות לצמיחה עתידית. אם נגמרות לכם כתובות ה-IP של ה-Pod, אתם יכולים להשתמש בCIDR רב-Pod לא רציף כדי להוסיף עוד טווחים של כתובות IP של Pod.
עם זאת, אם אתם עובדים בסביבה עם מרחב כתובות IP מוגבל, יכול להיות שתצטרכו להשתמש בטווח קטן יותר. במקרים כאלה, אפשר להקטין את המספר המקסימלי של יחידות Pod לכל צומת. הקטנת המספר המקסימלי של Pods לכל צומת מאפשרת לכל צומת להשתמש בטווח CIDR קטן יותר של Pod, וכך אפשר להכניס יותר צמתים לטווח משני קטן יותר של Pod עבור האשכול כולו. ההגדרה היא פשרה בין צפיפות ה-Pods לכל צומת לבין המספר הכולל של הצמתים באשכול.
כדי לחשב את המספר המקסימלי של Pods שהאשכול יכול לתמוך בהם, צריך לספק ערכי קלט למספר ה-Pods לכל צומת ולטווחים של CIDR. GKE משתמש בקלט הזה כדי לקבוע את הגודל של טווחי הכתובות של הצמתים וה-Pods.
ערכים שצוינו על ידי המשתמש
אלה הערכים שאתם מציינים כשאתם יוצרים אשכול או מאגר צמתים.
-
Q: המספר המקסימלי של פודים לכל צומת.- בקטגוריות Autopilot, הערך
Qהוא קבוע (נכון לעכשיו, 32). - במערכות Standard, אפשר להגדיר
Q.
- בקטגוריות Autopilot, הערך
-
DS: אורך הקידומת של תת-הרשת של ה-Pod. לדוגמה, לטווח CIDR של/17, אורך התחילית הוא17. -
S: אורך הקידומת של רשת המשנה הראשית. לדוגמה, לטווח CIDR של/24, אורך התחילית הוא24.
ערכים מחושבים
GKE מחשב את הערכים הבאים על סמך הקלט שלכם.
M: גודל מסכת הרשת לטווח ה-Pod של כל צומת. none M = 31 - ⌈log₂(Q)⌉משתמשים בפונקציית העיגול כלפי מעלה (⌈ ⌉) כדי לעגל למספר השלם הקרוב ביותר.
HM: מספר הביטים של המארח עבור מסכת הרשת של טווח ה-Pod של הצומת.none HM = 32 - M
HD: מספר הביטים של המארח עבור מסכת הרשת של תת-הרשת של ה-CIDR Pod שנבחרה.none HD = 32 - DS
MN: המספר המקסימלי של הצמתים שאפשר לתמוך בהם בתת-הרשת של ה-Pod.none MN = 2^(HD - HM)
MP: המספר המקסימלי של ה-Pods שאפשר לתמוך בהם בתת-הרשת של ה-Pods.none MP = MN * Q
N: מספר כתובות ה-IP שניתן להשתמש בהן בטווח הראשי.none N = 2^(32-S) - 4
הערות חשובות:
- אפשר להשתמש בכל כתובות ה-IP בטווח המשני בשביל Pods.
- החישובים האלה מספקים את הערכים המקסימליים התיאורטיים. ביצועים בעולם האמיתי יכולים להיות מושפעים מגורמים אחרים.
לדוגמה:
נניח שאתם יוצרים אשכול GKE Autopilot עם הפרטים הבאים:
- CIDR של תת-רשת של Pod
/17(DS= 17). - מקסימום 32 פודים לכל צומת (
Q= 32).
חישוב מספר ה-Pods המקסימלי:
M = 31 - ⌈log₂(32)⌉ = 26HM = 32 - 26 = 6HD = 32 - 17 = 15MN = 2(15 - 6) = 512MP = 512 * 32 = 16,384
האשכול הזה יכול לתמוך ב-512 צמתים וב-16,384 פודים לכל היותר.
צמצום המספר המקסימלי של Pods
הקטנת המספר המקסימלי של Pods לכל צומת מאפשרת לאשכול לכלול יותר צמתים, כי כל צומת דורש חלק קטן יותר ממרחב כתובות ה-IP הכולל. אפשרות אחרת היא לתמוך באותו מספר של צמתים באשכול על ידי ציון מרחב קטן יותר של כתובות IP עבור ה-Pods בזמן יצירת האשכול.
צמצום המספר המקסימלי של Pods לכל צומת מאפשר גם ליצור אשכולות קטנים יותר שנדרשות להם פחות כתובות IP. לדוגמה, אם יש שמונה פודים לכל צומת, לכל צומת מוקצה CIDR מסוג /28. טווח כתובות ה-IP האלה, בתוספת תת-הרשת והטווחים המשניים שאתם מגדירים, קובעים את מספר כתובות ה-IP שנדרשות ליצירת אשכול בהצלחה.
אפשר להגדיר את המספר המקסימלי של Pods לכל צומת בזמן יצירת האשכול ובזמן יצירת מאגר הצמתים.
המאמרים הבאים
- איך יוצרים אשכולות מקוריים של VPC
- איך מוסיפים כתובות IP נוספות של Pod לאשכולות
- מידע על שיטות לניהול כתובות IP כשמבצעים מיגרציה ל-GKE
- מידע נוסף על תובנות לגבי ניצול כתובות IP ב-GKE