בדף הזה מוסבר איך להגדיר את המספר המקסימלי של Pods לכל צומת באשכולות Standard ב-Google Kubernetes Engine (GKE), כדי לבצע אופטימיזציה של משאבי האשכול ולוודא שיש מספיק קיבולת לתזמון ה-Pods. בדף הזה מוסבר איך הקשר בין Pods, גודלי בלוקי CIDR ומספר הצמתים משפיע על האופן שבו GKE מתזמן Pods ומקצה כתובות IP בתוך האשכול. הדף הזה כולל גם פרטים על ההגבלות וערכי ברירת המחדל של מספר הפודים המקסימלי לכל צומת.
הדף הזה מיועד למפעילי מערכות, לאדריכלי ענן, למפתחים ולמהנדסי רשתות שמקצים ומגדירים משאבי ענן, פורסים אפליקציות ושירותים ומנהלים את הרשתות של פריסות הענן שלהם. במאמר תפקידים ומשימות נפוצים של משתמשי GKE מפורטים תפקידים נפוצים ודוגמאות למשימות שמוזכרות בתוכן של Google Cloud.
לפני שאתם קוראים את הדף הזה, כדאי שתכירו את ההבדלים בין אשכולות GKE Standard לבין אשכולות Autopilot ואת מודל הרשת של Kubernetes.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:
- מפעילים את Google Kubernetes Engine API. הפעלת Google Kubernetes Engine API
- כדי להשתמש ב-Google Cloud CLI למשימה הזו, מתקינים ואז מאתחלים את ה-CLI של gcloud. אם כבר התקנתם את ה-CLI של gcloud, הריצו את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שבגרסאות קודמות של ה-CLI של gcloud אי אפשר להריץ את הפקודות שבמסמך הזה.
הגבלות
- אפשר להגדיר את המספר המקסימלי של Pods לכל צומת רק באשכולות המותאמים ל-VPC.
- יצירת הצמתים מוגבלת לפי מספר הכתובות הזמינות בטווח הכתובות של ה-Pod. בטבלת התכנון של טווח כתובות ה-IP מפורטים הגדלים של טווחי הכתובות של Pods כברירת מחדל, כמינימום וכמקסימום. אפשר גם להוסיף עוד כתובות IP של Pod באמצעות CIDR לא רציף של כמה Pods.
כל אשכול צריך ליצור פודים של kube-system, כמו kube-proxy, במרחב השמות
kube-system. כשמפחיתים את המספר המקסימלי של Pods לכל צומת, חשוב לזכור להביא בחשבון גם את ה-Pods של עומס העבודה וגם את ה-Pods של המערכת. כדי להציג רשימה של פודים של המערכת באשכול, מריצים את הפקודה הבאה:kubectl get pods --namespace kube-system
הגדרת המספר המקסימלי של Pods לכל צומת
אפשר להגדיר את המספר המקסימלי של Pods לכל צומת באשכול Standard כשיוצרים אשכול או כשיוצרים מאגר צמתים. אי אפשר לשנות את ההגדרה הזו אחרי שיוצרים את האשכול או את מאגר הצמתים. באשכולות Autopilot, המספר המקסימלי של צמתים מוגדר מראש ואי אפשר לשנות אותו.
עם זאת, אם נגמרות כתובות ה-IP של Pod, אפשר ליצור טווחי כתובות IP נוספים של Pod באמצעות CIDR לא רציף של כמה Pods.
כשיוצרים אשכול, אפשר להגדיר את הגודל של טווח הכתובות של Pod באמצעות ה-CLI של gcloud או מסוף Google Cloud .
gcloud
כדי להגדיר את המספר המקסימלי של Pods לכל צומת כברירת מחדל באמצעות ה-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 לכל צומת באשכול, כברירת מחדל. אפשר להגדיר עד512. אם משמיטים את השדה הזה, Kubernetes מקצה את ערך ברירת המחדל של110. COMPUTE_LOCATION: המיקום של Compute Engine לאשכול החדש.
המסוף
נכנסים לדף Create a Kubernetes cluster במסוף Google Cloud .
מגדירים את האשכול החדש.
בחלונית הניווט, בקטע Cluster, לוחצים על Networking.
מוודאים שהתיבה Enable VPC-native traffic routing (uses alias IP) מסומנת.
בחלונית הניווט, בקטע מאגרי צמתים, לוחצים על רישות.
בשדה Maximum pods per node, מזינים את הערך
110. GKE משתמש בערך הזה כדי להתאים את הגודל של טווח כתובות ה-IP שמוקצה לצמתים.לוחצים על יצירה.
כשמגדירים את המספר המקסימלי של Pods לכל צומת באשכול, Kubernetes משתמש בערך הזה כדי להקצות טווח CIDR לצמתים. אתם יכולים לחשב את המספר המקסימלי של הצמתים באשכול, על סמך טווח כתובות ה-IP המשני של האשכול לפודים וטווח ה-CIDR שהוקצה לצומת.
לדוגמה, אם מגדירים את המספר המקסימלי של Pods כברירת מחדל ל-110 ואת טווח כתובות ה-IP המשני ל-Pods ל-/21, Kubernetes מקצה טווח CIDR של /24 לצמתים באשכול. הקצאת טווח ה-CIDR מאפשרת עד 2(24-21) = 23 = 8 צמתים באשכול.
באופן דומה, אם מגדירים את המספר המקסימלי של Pods כברירת מחדל ל-8 ואת טווח כתובות ה-IP המשני של האשכול ל-Pods ל-/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 יצירת מאגר צמתים בניהול המשתמש.
בחלונית הניווט, לוחצים על Networking.
בשדה Maximum pods per node, מזינים ערך. GKE משתמש בערך הזה כדי להתאים את הגודל של טווח כתובות ה-IP שמוקצה לצמתים.
טווחים משניים של Pods ומספר Pods מקסימלי לכל צומת
כשמגדירים את המספר המקסימלי של Pods לכל צומת, משפיעים באופן עקיף על הגודל הנדרש של הטווח המשני של ה-Pod. ב-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 כדי להוסיף לאשכול עוד טווחי כתובות IP של Pods.
כל אשכול צריך ליצור פודים של kube-system, כמו kube-proxy, במרחב השמות kube-system. כשמגדירים את המספר המקסימלי של Pods לכל צומת, חשוב לזכור להביא בחשבון גם את ה-Pods של עומס העבודה וגם את ה-Pods של המערכת.
מידע על המספר המקסימלי של Pods לכל צומת כברירת מחדל
כברירת מחדל, GKE מאפשר עד 110 Pods לכל צומת באשכולות Standard, אבל אפשר להגדיר אשכולות Standard כך שיאפשרו עד 512 Pods לכל צומת. באשכולות Autopilot, המספר המקסימלי של Pods לכל צומת נבחר מטווח שבין 8 ל-256, על סמך צפיפות ה-Pods הצפויה של עומס העבודה. Kubernetes מקצה לכל צומת טווח של כתובות IP, בלוק CIDR, כדי שלכל Pod תהיה כתובת IP ייחודית. גודל בלוק ה-CIDR תואם למספר המקסימלי של Pods לכל צומת.
טווחי CIDR של Pod באשכולות Standard
כברירת מחדל, המספר המקסימלי של Pods לכל צומת באשכולות Standard הוא 110, ו-Kubernetes מקצה בלוק CIDR של /24 (256 כתובות) לכל אחד מהצמתים. כשיש יותר מפי שניים כתובות IP זמינות מהמספר המקסימלי של Pods שאפשר ליצור בצומת, Kubernetes יכול להפחית את השימוש החוזר בכתובות IP כשמוסיפים Pods לצומת ומסירים אותם ממנו.
למרות שהמגבלה של 512 Pods לכל צומת היא מגבלה קשיחה, אתם יכולים להפחית את מספר ה-Pods בצומת. הגודל של בלוק ה-CIDR שמוקצה לצומת תלוי בערך המקסימלי של פודים לכל צומת. הבלוק תמיד מכיל לפחות פי שניים כתובות ממספר ה-Pods המקסימלי לכל צומת.
בטבלה הבאה מפורטים הגודל של בלוק ה-CIDR ומספר כתובות ה-IP הזמינות ש-Kubernetes מקצה לצמתים, בהתאם למספר המקסימלי של Pods לכל צומת:
| מספר הפודים המקסימלי לכל צומת | טווח 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 |
| 257 עד 512 | /22 | 1024 |
שיקולים לגבי גודל האשכול לטווח כתובות IP משני ל-Pods
כשיוצרים אשכול, אי אפשר לשנות את הגודל של טווח כתובות ה-IP המשני של Pods. חשוב לתכנן בקפידה את גודל הטווח הזה כדי להתאים אותו לצורכי עומסי העבודה הנוכחיים והעתידיים. אם אין מספיק מקום לכתובות IP לפודים, יכול להיות שיהיו כשלים בתזמון והאשכול לא יוכל לגדול.
אם אתם לא בטוחים מה הגודל הנדרש, מומלץ להתחיל עם טווח גדול יותר, כמו /21, שהוא ברירת המחדל לאשכולות שנוצרו באמצעות Google Cloud CLI. טווח גדול יותר מספק מספיק כתובות IP לאשכול בגודל בינוני, ומאפשר גמישות לצמיחה עתידית. אם נגמרו לכם כתובות ה-IP של Pod, אתם יכולים להשתמש ב-CIDR לא רציף של כמה Pods כדי להוסיף עוד טווחי כתובות IP של Pod.
עם זאת, אם אתם עובדים בסביבה עם מרחב כתובות IP מוגבל, יכול להיות שתצטרכו להשתמש בטווח קטן יותר. במקרים כאלה, אפשר להקטין את המספר המקסימלי של Pods לכל צומת. הפחתת המספר המקסימלי של Pods לכל צומת מאפשרת לכל צומת לקבל טווח CIDR קטן יותר של Pod, וכך יותר צמתים יכולים להתאים לטווח משני קטן יותר של Pod לכל האשכול. ההגדרה היא פשרה בין צפיפות הפודים לכל צומת לבין המספר הכולל של הצמתים באשכול.
כדי לחשב את המספר המקסימלי של Pods שהאשכול יכול לתמוך בהם, צריך לספק ערכי קלט למספר ה-Pods לכל צומת ולטווחי ה-CIDR. GKE משתמש בנתונים האלה כדי לקבוע את הגודל של טווחי הכתובות של הצמתים וה-Pods.
ערכים שהמשתמשים ציינו
אלה הערכים שאתם מספקים כשאתם יוצרים אשכול או מאגר צמתים.
-
Q: המספר המקסימלי של Pods לכל צומת. -
DS: אורך הקידומת של רשת המשנה של ה-Pod. לדוגמה, בטווח CIDR של/17, אורך הקידומת הוא17. -
S: אורך הקידומת של רשת המשנה הראשית. לדוגמה, בטווח CIDR של/24, אורך הקידומת הוא24.
ערכים מחושבים
GKE מחשב את הערכים הבאים על סמך הקלט שלכם.
M: גודל מסכת הרשת של טווח ה-Pod של כל צומת.$$ M = 31 - \lceil{log_2(Q)}\rceil $$משתמשים בפונקציה CEILING (\( \lceil \rceil \)) כדי לעגל למעלה למספר השלם הקרוב ביותר.
HM: מספר הביטים של המארח למסכת הרשת של טווח ה-Pod של הצומת.$$ HM = 32 - M $$
HD: מספר הביטים של המארח למסכת הרשת של תת-הרשת של Pod ב-CIDR שנבחר.$$ HD = 32 - DS $$
MN: המספר המקסימלי של צמתים שרשת המשנה של ה-Pod יכולה לתמוך בהם.$$ MN = 2^{(HD - HM)} $$
MP: המספר המקסימלי של Pods שרשת המשנה של ה-Pods יכולה לתמוך בהם.$$ MP = MN * Q $$
N: מספר כתובות ה-IP שאפשר להשתמש בהן בטווח הראשי.$$ N = 2^{(32 - S)} - 4 $$
הערות חשובות:
- כל כתובות ה-IP בטווח המשני זמינות לשימוש של Pods.
- החישובים האלה מספקים את הערכים המקסימליים התיאורטיים. גורמים אחרים יכולים להשפיע על הביצועים בעולם האמיתי.
לדוגמה:
נניח שאתם יוצרים אשכול GKE Autopilot עם המאפיינים הבאים:
- CIDR של תת-רשת Pod של
/17(DS= 17). - עד 32 Pods לכל צומת (
Q= 32).
מחשבים את המספר המקסימלי של Pods:
- \( M = 31 - \lceil{log_2(32)}\rceil = 26 \)
- \( HM = 32 - 26 = 6 \)
- \( HD = 32 - 17 = 15 \)
- \( MN = 2^{(15 - 6)} = 512 \)
- \( MP = 512 * 32 = 16384 \)
האשכול הזה יכול לתמוך ב-512 צמתים וב-16,384 Pods לכל היותר.
הפחתת המספר המקסימלי של Pods
הקטנת המספר המקסימלי של Pods לכל צומת מאפשרת לאשכול להכיל יותר צמתים, כי כל צומת דורש חלק קטן יותר ממרחב כתובות ה-IP הכולל. לחלופין, אפשר לתמוך באותו מספר של צמתים באשכול על ידי ציון מרחב קטן יותר של כתובות IP לפודים בזמן יצירת האשכול.
הפחתת המספר המקסימלי של Pods לכל צומת מאפשרת גם ליצור אשכולות קטנים יותר שדורשים פחות כתובות IP. לדוגמה, אם יש שמונה Pods לכל צומת, כל צומת מקבל CIDR של /28. טווחי כתובות ה-IP האלה, בנוסף לתת-הרשת ולטווחים המשניים שאתם מגדירים, קובעים את מספר כתובות ה-IP שנדרשות כדי ליצור אשכול.
אפשר להגדיר את המספר המקסימלי של Pods לכל צומת בזמן יצירת האשכול ובזמן יצירת מאגר הצמתים.
המאמרים הבאים
- איך יוצרים אשכולות המותאמים ל-VPC
- איך מוסיפים לאשכולות כתובות IP נוספות של Pod
- מידע ולמידה על אסטרטגיות לניהול כתובות IP כשעוברים ל-GKE
- מידע ולמידה על תובנות לגבי ניצול כתובות IP ב-GKE