במאמר הזה מוסבר איך להתאים אישית את ההגדרות של צומת ב-Google Kubernetes Engine (GKE) באמצעות קובץ הגדרות שנקרא הגדרות מערכת של צומת.
הגדרת מערכת של צומת היא קובץ הגדרה שמאפשר לשנות קבוצה מוגבלת של הגדרות מערכת. במאגר הצמתים, אפשר להשתמש בהגדרות מערכת של צומת כדי לציין הגדרות בהתאמה אישית עבור סוכן הצמתים של kubelet Kubernetes ועבור הגדרות של ליבת לינוקס ברמה נמוכה של sysctl.
במאמר הזה מפורטות ההגדרות הזמינות להגדרת מערכת צמתים, ומוסבר איך להחיל אותן על מאגרי הצמתים של GKE Standard. חשוב לזכור שבגלל שאשכולות GKE Autopilot כוללים סביבת צמתים מנוהלת יותר, האפשרויות שלהם להגדרת מערכת צמתים ישירה מוגבלות בהשוואה למאגרי צמתים של GKE Standard.
מדוע להשתמש בתצורות מערכת צמתים
היתרונות של הגדרות מערכת הצמתים:
- כוונון ביצועים: אופטימיזציה של ביצועי מחסנית הרשת, ניהול זיכרון, תזמון CPU או התנהגות קלט/פלט עבור יישומים תובעניים כמו אימון או הגשה של בינה מלאכותית, מסדי נתונים, שרתי אינטרנט בעלי תעבורה גבוהה או שירותים רגישים להשהייה.
- הגברת האבטחה: החלת הגדרות אבטחה ספציפיות ברמת ליבת המערכת או הגבלת התנהגויות מסוימות של המערכת כדי לצמצם את שטח הפנים של האיום.
- ניהול משאבים: שינוי ההגדרות של
kubeletלניהול מזהי תהליכים (PID), שטח דיסק, מנגנון איסוף בתמונות או משאבי מעבד וזיכרון. - תאימות לעומסי עבודה: עוזרת לוודא שסביבת הצומת עומדת בדרישות ספציפיות של תוכנות מיוחדות או אפליקציות ישנות יותר שדורשות הגדרות ליבה מסוימות.
אפשרויות נוספות להתאמה אישית של הגדרות הצמתים
אפשר גם להתאים אישית את הגדרות הצומת בשיטות אחרות:
- קובץ הגדרות של זמן ריצה: כדי להתאים אישית את זמן הריצה של קונטיינר containerd בצמתי GKE, אפשר להשתמש בקובץ אחר שנקרא קובץ הגדרות של זמן ריצה. מידע נוסף זמין במאמר בנושא התאמה אישית של ההגדרה של containerd בצמתי GKE.
- ComputeClass: אתם יכולים לציין מאפייני צמתים במפרט ComputeClass של GKE. אפשר להשתמש ב-ComputeClasses גם במצב Autopilot וגם במצב Standard ב-GKE, החל מגרסה 1.32.1-gke.1729000 ואילך. מידע נוסף מופיע במאמר בנושא התאמה אישית של הגדרות מערכת הצמתים.
- DaemonSets: אפשר גם להשתמש ב-DaemonSets כדי להתאים אישית צמתים. מידע נוסף זמין במאמר בנושא הפעלה אוטומטית של צמתים ב-GKE באמצעות DaemonSets.
אין תמיכה בהגדרות של מערכת Node בצמתי Windows Server.
לפני שמתחילים
לפני שמתחילים, חשוב לבצע את הפעולות הבאות:
- התקנה של כלי שורת הפקודה:
- אם אתם משתמשים בדוגמאות של ממשק שורת הפקודה של gcloud במסמך זה, ודאו שאתם מתקינים ומגדירים את ממשק שורת הפקודה של Google Cloud.
- אם אתם משתמשים בדוגמאות של Terraform, הקפידו להתקין ולהגדיר את Terraform.
- הענקת הרשאות: אתם צריכים הרשאות IAM מתאימות כדי ליצור ולעדכן אשכולות GKE ומאגרי צמתים, כמו
container.clusterAdminאו תפקיד אחר עם הרשאות שוות. - תכנון להפרעות פוטנציאליות בעומס העבודה: הגדרות צמתים בהתאמה אישית חלות ברמת מאגר הצמתים. שינויים בדרך כלל גורמים לעדכון מתגלגל של הצמתים במאגר, הכולל יצירה מחדש של הצמתים. כדאי לתכנן מראש את האפשרות של שיבוש בעומס העבודה ולהשתמש בתקציבים לשיבוש Pod (PDB) במקומות המתאימים.
- גיבוי ובדיקה של כל השינויים: תמיד כדאי לבדוק שינויים בהגדרות בסביבת פיתוח או בסביבת הכנה לפני שמחילים אותם על סביבת הייצור. הגדרות שגויות עלולות לגרום לחוסר יציבות של הצומת או לכשלים בעומסי העבודה.
- בדיקת הגדרות ברירת המחדל של GKE: תמונות של צמתים ב-GKE מגיעות עם הגדרות ברירת מחדל שעברו אופטימיזציה. מומלץ להתאים אישית את הפרמטרים רק אם יש לכם צורך ספציפי ואתם מבינים את ההשפעה של השינויים.
שימוש בהגדרת מערכת של צומת במצב GKE Standard
כשמשתמשים בהגדרת מערכת של צומת, משתמשים בקובץ YAML שמכיל את פרמטרי ההגדרה של kubelet ושל ליבת Linux. אפשר גם להגדיר את מערכת הצמתים במצב GKE Autopilot, אבל במאמר הזה מוסבר איך ליצור קובץ הגדרה ולהשתמש בו במצב GKE Standard.
כדי להשתמש בתצורת מערכת צמתים במצב GKE Standard, בצע את הפעולות הבאות:
- צור קובץ תצורה. הקובץ הזה מכיל את ההגדרות של
kubeletושלsysctl. - הוסף את התצורה בעת יצירת אשכול, או בעת יצירה או עדכון של מאגר צמתים.
יצירת קובץ תצורה
כתוב את תצורת מערכת הצמתים שלך ב-YAML. בדוגמה הבאה מוסיפים הגדרות לאפשרויות kubelet ו-sysctl:
kubeletConfig:
cpuManagerPolicy: static
allowedUnsafeSysctls:
- 'kernel.shm*'
- 'kernel.msg*'
- 'kernel.sem'
- 'fs.mqueue.*'
- 'net.*'
linuxConfig:
sysctl:
net.core.somaxconn: '2048'
net.ipv4.tcp_rmem: '4096 87380 6291456'
בדוגמה הזו, התנאים הבאים חלים:
- השדה
cpuManagerPolicy: staticמגדיר אתkubeletלהשתמש במדיניות ניהול סטטי של CPU. + השדהnet.core.somaxconn: '2048'מגביל את צבר ה-socket listen()ל-2,048 בתים. - השדה
net.ipv4.tcp_rmem: '4096 87380 6291456'מגדיר את הערך המינימלי, ברירת המחדל והמקסימלי של מאגר הקבלה של שקע TCP ל-4,096 בייט, 87,380 בייט ו-6,291,456 בייט, בהתאמה.
אם רוצים להוסיף הגדרות רק ל-kubelet או ל-sysctl, צריך לכלול רק את הקטע הזה בהגדרת מערכת הצומת. לדוגמה, כדי להוסיף תצורה של kubelet, צור את הקובץ הבא:
kubeletConfig:
cpuManagerPolicy: static
לרשימה מלאה של השדות שניתן להוסיף לתצורת מערכת הצמתים, עיין בסעיפים אפשרויות תצורה של Kubelet ו-אפשרויות תצורה של Sysctl.
הוסף את התצורה למאגר צמתים סטנדרטי
אחרי שיוצרים את תצורת מערכת הצמתים, מוסיפים את הדגל --system-config-from-file באמצעות Google Cloud CLI. אפשר להוסיף את הדגל הזה כשיוצרים אשכול, או כשיוצרים או מעדכנים מאגר צמתים. אי אפשר להוסיף הגדרת מערכת של צומת באמצעות מסוף Google Cloud .
צור אשכול עם תצורת מערכת הצומת
ניתן להוסיף תצורת מערכת צמתים במהלך יצירת אשכול באמצעות ממשק שורת הפקודה (CLI) של gcloud או Terraform. ההוראות הבאות מיישמות את תצורת מערכת הצמתים על מאגר הצמתים המוגדר כברירת מחדל:
CLI של gcloud
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול -
LOCATION: אזור או אזור מחשוב של האשכול -
SYSTEM_CONFIG_PATH: הנתיב לקובץ שמכיל את התצורות שלkubeletושלsysctl
לאחר החלת תצורת מערכת צמתים, מאגר הצמתים המוגדר כברירת מחדל של האשכול משתמש בהגדרות שהגדרת.
Terraform
כדי ליצור אשכול אזורי עם תצורת מערכת צמתים בהתאמה אישית באמצעות Terraform, אפשר להיעזר בדוגמה הבאה:
מידע נוסף על השימוש ב-Terraform זמין במאמר תמיכה ב-Terraform ל-GKE.
יצירת מאגר צמתים חדש עם הגדרת מערכת הצמתים
אפשר להוסיף הגדרת מערכת של צומת כשמשתמשים ב-ה-CLI של gcloud או ב-Terraform כדי ליצור מאגר צמתים חדש.
ההוראות הבאות מתייחסות להחלת ההגדרה של מערכת הצמתים על מאגר צמתים חדש:
CLI של gcloud
gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
מחליפים את מה שכתוב בשדות הבאים:
-
POOL_NAME: השם של מאגר הצמתים -
CLUSTER_NAME: שם האשכול שרוצים להוסיף לו מאגר צמתים -
LOCATION: אזור או אזור מחשוב של האשכול -
SYSTEM_CONFIG_PATH: הנתיב לקובץ שמכיל את התצורות שלkubeletושלsysctl
Terraform
כדי ליצור מאגר צמתים עם הגדרת מערכת צמתים מותאמת אישית באמצעות Terraform, אפשר להיעזר בדוגמה הבאה:
מידע נוסף על השימוש ב-Terraform זמין במאמר תמיכה ב-Terraform ל-GKE.
עדכון הגדרת המערכת של הצומת במאגר צמתים קיים
אפשר להגדיר או לעדכן את הגדרות המערכת של הצומת עבור מאגר צמתים קיים. מידע נוסף על עדכון של הגדרה קיימת זמין במאמר עריכה באמצעות עדכון של מאגר צמתים קיים.
מריצים את הפקודה הבאה כדי לעדכן את מאגר הצמתים הקיים:
gcloud container node-pools update POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--system-config-from-file=SYSTEM_CONFIG_PATH
מחליפים את מה שכתוב בשדות הבאים:
-
POOL_NAME: השם של מאגר הצמתים שרוצים לעדכן -
CLUSTER_NAME: שם האשכול שרוצים לעדכן -
LOCATION: אזור או אזור מחשוב של האשכול -
SYSTEM_CONFIG_PATH: הנתיב לקובץ שמכיל את ההגדרות שלkubeletושלsysctl
כדי לבצע את השינוי הזה צריך ליצור מחדש את הצמתים, וזה עלול לשבש את עומסי העבודה הפעילים. מידע נוסף על השינוי הספציפי הזה זמין בשורה המתאימה בטבלה שינויים ידניים שיוצרים מחדש את הצמתים באמצעות אסטרטגיית שדרוג צמתים בלי להתחשב במדיניות התחזוקה.
מידע נוסף על עדכוני צמתים זמין במאמר בנושא תכנון שיבושים בעדכוני צמתים.
עריכה של הגדרת מערכת של צומת
כדי לערוך את הגדרות המערכת של צומת, אפשר ליצור מאגר צמתים חדש עם ההגדרות הרצויות, או לעדכן את הגדרות המערכת של צומת במאגר צמתים קיים.
עריכה באמצעות יצירת מאגר צמתים
כדי לערוך את תצורת המערכת של הצומת על ידי יצירת מאגר צמתים:
- יוצרים קובץ תצורה עם ההגדרה הרצויה.
- מוסיפים את ההגדרה למאגר צמתים חדש.
- מעבירים את עומסי העבודה למאגר הצמתים החדש.
- מוחקים את מאגר הצמתים הישן.
עריכה על ידי עדכון של מאגר צמתים קיים
כדי לערוך את הגדרת המערכת הקיימת של מאגר צמתים קיים, פועלים לפי ההוראות שבכרטיסייה Update node pool (עדכון מאגר צמתים) בקטע adding the configuration to a node pool (הוספת ההגדרה למאגר צמתים). כשמעדכנים את הגדרות המערכת של צומת, וההגדרות החדשות מבטלות את הגדרות המערכת הקיימות של מאגר הצמתים, צריך ליצור מחדש את הצמתים. אם תשמיטו פרמטרים כלשהם במהלך עדכון, הפרמטרים יוגדרו לערכי ברירת המחדל שלהם.
אחזור ההגדרה הקיימת של מערכת הצמתים
כדי לאחזר את הגדרת המערכת הקיימת של הצומת במאגר הצמתים – למשל, אם כבר התאמתם אישית את ההגדרה ואתם רוצים להוסיף לה – משתמשים בפקודה gcloud container node-pools
describe. הפלט של הפקודה מפרט את כל התצורות הקיימות תחת kubeletConfig ו-linuxNodeConfig.
לדוגמה, קטע הקוד הבא מציג את פורמט הפלט של הפקודה describe:
kubeletConfig:
allowedUnsafeSysctls:
- kernel.shm*
- kernel.msg*
- kernel.sem
- fs.mqueue.*
- net.*
cpuManagerPolicy: static
insecureKubeletReadonlyPortEnabled: false
maxParallelImagePulls: 2
linuxNodeConfig: # IMPORTANT: Use linuxConfig when updating these settings
sysctl:
net.core.somaxconn: '2048'
net.ipv4.tcp_rmem: 4096 87380 6291456
אם עדיין לא הגדרתם תצורת מערכת של צומת, הפלט לא יכלול את kubeletConfig או linuxNodeConfig.
איפוס ההגדרה הקיימת של מערכת הצומת
אם רוצים לאפס את הגדרות המערכת של הצומת בחזרה לברירות המחדל, צריך לעדכן את קובץ ההגדרות עם ערכים ריקים בשדות kubelet ו-sysctl, למשל:
kubeletConfig: {}
linuxConfig:
sysctl: {}
מחיקת תצורת מערכת צומת
כדי להסיר הגדרת מערכת של צומת, פועלים לפי השלבים הבאים:
- יצירת מאגר צמתים
- מעבירים את עומסי העבודה למאגר הצמתים החדש.
- מוחקים את מאגר הצמתים עם הגדרת המערכת הישנה של הצמתים.
אפשרויות ההגדרה של kubelet
בטבלאות שבקטע הזה מפורטות האפשרויות של kubelet שאפשר לשנות.
ניהול המעבד (CPU)
בטבלה הבאה מפורטות האפשרויות לניהול המעבד (CPU) עבור kubelet.
kubelet הגדרות תצורה |
הגבלות | הגדרת ברירת המחדל | תיאור |
|---|---|---|---|
cpuCFSQuota |
הערך חייב להיות true או false. |
true |
ההגדרה הזו אוכפת את מגבלת המעבד של ה-Pod. הגדרה של הערך הזה ל-false פירושה שמגבלות ה-CPU של ה-Pods מתעלמות.התעלמות ממגבלות ה-CPU עשויה להיות מועילה בתרחישים מסוימים שבהם ה-Pods רגישים למגבלות ה-CPU. הסיכון בהשבתת cpuCFSQuota הוא ש-Pod לא רצוי עלול לצרוך יותר משאבי CPU מהמתוכנן. |
cpuCFSQuotaPeriod |
חייב להיות משך זמן. | "100ms" |
ההגדרה הזו קובעת את ערך תקופת המכסה של CFS ב-CPU, cpu.cfs_period_us, שמציין את התקופה שבה צריך להקצות מחדש את הגישה של cgroup למשאבי CPU. האפשרות הזו מאפשרת לכם לשנות את התנהגות ויסות הנתונים של יחידת העיבוד המרכזית (CPU). |
ניהול זיכרון והוצאה מהזיכרון
בטבלה הבאה מפורטות האפשרויות שניתנות לשינוי לניהול הזיכרון ולפינוי נתונים. בקטע הזה יש גם טבלה נפרדת שמתארת את האפשרויות שניתנות לשינוי עבור הדגל evictionSoft.
kubelet הגדרות תצורה |
הגבלות | הגדרת ברירת המחדל | תיאור |
|---|---|---|---|
evictionSoft |
מפה של שמות האותות. הגבלות על ערכים מפורטות בטבלה הבאה. | none |
ההגדרה הזו ממפה שמות של אותות לכמות או לאחוז שמגדירים ספי הרחקה רכים. לסף פינוי רך צריך להיות תקופת חסד. kubelet לא מסלק Pods עד שתקופת ההמתנה מסתיימת. |
evictionSoftGracePeriod |
מפה של שמות האותות. לכל שם אות, הערך חייב להיות משך חיובי שקטן מ-5m. יחידות הזמן התקפות הן ns, us (או µs), ms, s או m. |
none |
ההגדרה הזו ממפה שמות של אותות למשכי זמן שמגדירים תקופות חסד לספי פינוי רכים. לכל סף של פינוי רך צריך להיות תקופת חסד תואמת. |
evictionMinimumReclaim |
מפה של שמות האותות. לכל שם של אות, הערך צריך להיות אחוז חיובי שקטן מ-10%. |
none |
ההגדרה הזו ממפה שמות של אותות לאחוזים שמגדירים את הכמות המינימלית של משאב נתון שה-kubelet משחרר כשהוא מבצע הוצאה של Pod. |
evictionMaxPodGracePeriodSeconds |
הערך צריך להיות מספר שלם בין 0 ל-300. |
0 |
ההגדרה הזו מגדירה, בשניות, את תקופת החסד המקסימלית לסיום של Pod במהלך פינוי. |
singleProcessOOMKill
|
הערך חייב להיות true או false. |
true לצמתים של cgroupv1, false לצמתים של cgroupv2. |
ההגדרה הזו קובעת אם התהליכים במאגר נהרגים בנפרד או כקבוצה.
זמין בגרסאות GKE 1.32.4-gke.1132000, 1.33.0-gke.1748000 ואילך. |
בטבלה הבאה מוצגות האפשרויות שניתנות לשינוי עבור הדגל evictionSoft.
אותן אפשרויות חלות גם על הדגלים evictionSoftGracePeriod ו-evictionMinimumReclaim, עם הגבלות שונות.
kubelet הגדרות תצורה |
הגבלות | הגדרת ברירת המחדל | תיאור |
|---|---|---|---|
memoryAvailable |
הערך חייב להיות כמות גדולה מ-100Mi וקטנה מ-50% של הזיכרון של הצומת. |
none |
ההגדרה הזו מייצגת את כמות הזיכרון שזמינה לפני הוצאה רכה. מגדיר את עוצמת האות memory.available ב-kubelet . |
nodefsAvailable |
הערך צריך להיות בין 10% ל-50%. |
none |
ההגדרה הזו מייצגת את ה-nodefs שזמין לפני הוצאה רכה. מגדיר את עוצמת האות nodefs.available ב-kubelet . |
nodefsInodesFree |
הערך צריך להיות בין 5% ל-50%. |
none |
ההגדרה הזו מייצגת את ה-inodes של nodefs שפנויים לפני הוצאה רכה. מגדיר את עוצמת האות nodefs.inodesFree ב-kubelet . |
imagefsAvailable |
הערך צריך להיות בין 15% ל-50%. |
none |
ההגדרה הזו מייצגת את imagefs שזמינים לפני הוצאה זמנית של תמונות. ההגדרה מגדירה את כמות האות imagefs.available ב-kubelet . |
imagefsInodesFree |
הערך צריך להיות בין 5% ל-50%. |
none |
ההגדרה הזו מייצגת את ה-inodes של imagefs שפנויים לפני הוצאה רכה. ההגדרה קובעת את עוצמת האות imagefs.inodesFree ב-kubelet. |
pidAvailable |
הערך צריך להיות בין 10% ל-50%. |
none |
ההגדרה הזו מייצגת את מזהי התהליך שזמינים לפני הוצאה רכה. ההגדרה קובעת את עוצמת האות pid.available ב-kubelet. |
ניהול של מזהי מוצרים
בטבלה הבאה מפורטות האפשרויות שניתן לשנות לניהול מזהי PID.
kubelet הגדרות תצורה |
הגבלות | הגדרת ברירת המחדל | תיאור |
|---|---|---|---|
podPidsLimit |
הערך צריך להיות בין 1024 ל-4194304. |
none |
ההגדרה הזו קובעת את המספר המקסימלי של מזהי תהליכים (PIDs) שכל Pod יכול להשתמש בהם. |
רישום ביומן
בטבלה הבאה מתוארות האפשרויות שניתן לשנות לגבי הרישום ביומן.
kubelet הגדרות תצורה |
הגבלות | הגדרת ברירת המחדל | תיאור |
|---|---|---|---|
containerLogMaxSize |
הערך חייב להיות מספר חיובי וסיומת של יחידה בין 10Mi ל-500Mi, כולל. |
10Mi |
ההגדרה הזו שולטת בהגדרה containerLogMaxSize של מדיניות רוטציה של יומן כלי מכיל, שמאפשרת להגדיר את הגודל המקסימלי של כל קובץ יומן. ערך ברירת המחדל הוא 10Mi. יחידות המרחק הקבילות הן Ki, Mi ו-Gi. |
containerLogMaxFiles |
הערך חייב להיות מספר שלם בין 2 ל-10, כולל. |
5 |
ההגדרה הזו שולטת בהגדרה containerLogMaxFiles של מדיניות הרוטציה של קובצי יומן הרישום של המאגר, שמאפשרת לכם להגדיר את המספר המקסימלי של קבצים שמותרים לכל מאגר בנפרד. ערך ברירת המחדל הוא 5. הגודל הכולל של היומן (container_log_max_size*container_log_max_files) לכל מאגר לא יכול לחרוג מ-1% מהאחסון הכולל של הצומת. |
איסוף אשפה של תמונות
בטבלה הבאה מתוארות האפשרויות שניתן לשנות לגבי איסוף של תמונות.
kubelet הגדרות תצורה |
הגבלות | הגדרת ברירת המחדל | תיאור |
|---|---|---|---|
imageGcHighThresholdPercent |
הערך צריך להיות מספר שלם בין 10 ל-85, כולל, וגבוה מ-imageGcLowThresholdPercent. |
85 |
ההגדרה הזו מגדירה את אחוז השימוש בדיסק שמעליו מופעל מנגנון איסוף של תמונות. הערך הזה מייצג את השימוש הכי גבוה בדיסק שצריך לבצע בו איסוף אשפה. כדי לחשב את האחוז, מחלקים את הערך של השדה הזה ב-100. |
imageGcLowThresholdPercent |
הערך צריך להיות מספר שלם בין 10 ל-85, כולל, וקטן מ-imageGcHighThresholdPercent. |
80 |
ההגדרה הזו מגדירה את אחוז השימוש בדיסק שלפניו אף פעם לא מופעל מנגנון איסוף של תמונות. הערך הזה מייצג את השימוש הכי נמוך בדיסק שצריך לבצע בו איסוף אשפה. כדי לחשב את האחוז, מחלקים את הערך של השדה הזה ב-100. |
imageMinimumGcAge |
הערך חייב להיות משך זמן שלא עולה על 2m. יחידות הזמן התקפות הן ns, us (או µs), ms, s, m או h. |
2m |
ההגדרה הזו מגדירה את הגיל המינימלי של תמונה שלא נעשה בה שימוש לפני שהיא נאספת כזבל. |
imageMaximumGcAge |
הערך חייב להיות משך זמן. | 0s |
ההגדרה הזו מגדירה את הגיל המקסימלי של תמונה שלא נעשה בה שימוש לפני שהיא נאספת על ידי איסוף האשפה. ערך ברירת המחדל של השדה הזה הוא זמין בגרסאות GKE 1.30.7-gke.1076000, 1.31.3-gke.1023000 ואילך. |
שליפת תמונות
בטבלה הבאה מתוארות האפשרויות שניתן לשנות לגבי שליפת תמונות.
kubelet הגדרות תצורה |
הגבלות | הגדרת ברירת המחדל | תיאור |
|---|---|---|---|
maxParallelImagePulls |
הערך חייב להיות מספר שלם בין 2 ל-5, כולל. | 2 או 3 בהתאם לסוג הדיסק. |
ההגדרה הזו מגדירה את מספר המשיכות המקסימלי של תמונות במקביל. ערך ברירת המחדל נקבע לפי סוג דיסק האתחול. |
אבטחה ופעולות לא בטוחות
בטבלה הבאה מפורטות האפשרויות שניתנות לשינוי להגדרת אבטחה ולטיפול בפעולות לא בטוחות.
kubelet הגדרות תצורה |
הגבלות | הגדרת ברירת המחדל | תיאור |
|---|---|---|---|
allowedUnsafeSysctls |
רשימה של
|
none |
ההגדרה הזו מגדירה רשימת היתרים של שמות או קבוצות לא בטוחים של sysctl או sysctl, שמופרדים באמצעות פסיקים, שאפשר להגדיר ב-Pods. |
insecureKubeletReadonlyPortEnabled |
הערך חייב להיות בוליאני, כלומר true או false. |
false |
ההגדרה הזו משביתה את היציאה הלא מאובטחת kubelet לקריאה בלבד 10255 בכל מאגר צמתים חדש באשכול. אם מגדירים את ההגדרה הזו בקובץ הזה, אי אפשר להשתמש בלקוח GKE API כדי לשנות את ההגדרה ברמת האשכול. |
מנהלי משאבים
Kubernetes מציע חבילה של מנהלי משאבים. אפשר להגדיר את מנהלי המשאבים האלה כדי לתאם ולבצע אופטימיזציה של התאמת משאבי הצמתים ל-Pods שהוגדרו עם דרישות ספציפיות למשאבי מעבדים, מכשירים וזיכרון (hugepages).
בטבלה הבאה מפורטות האפשרויות שניתנות לשינוי במנהלי משאבים.
kubelet הגדרות תצורה |
הגבלות | הגדרת ברירת המחדל | תיאור |
|---|---|---|---|
cpuManagerPolicy |
הערך חייב להיות none או static. |
none |
ההגדרה הזו קובעת את kubelet מדיניות ניהול המעבד. ערך ברירת המחדל הוא none, שהוא סכמת זיקה (affinity) של CPU שמוגדרת כברירת מחדל, ולא מספקת זיקה מעבר למה שתזמן מערכת ההפעלה עושה באופן אוטומטי.הגדרת הערך הזה ל- static מאפשרת להקצות מעבדי CPU בלעדיים ל-Pods שנמצאים גם במחלקת QoS Guaranteed וגם יש להם בקשות CPU של מספרים שלמים. |
memoryManager.policy |
הערך חייב להיות None או Static. |
None |
ההגדרה הזו קובעת את אם מגדירים את הערך הזה ל- ההגדרה הזו נתמכת באשכולות שמישור הבקרה שלהם מריץ את GKE מגרסה 1.32.3-gke.1785000 ואילך. |
topologyManager |
הערך צריך להיות אחת מההגדרות הנתמכות לכל אחד מהשדות הרלוונטיים. אי אפשר להגדיר את השדה |
|
ההגדרות האלה שולטות בהגדרות של אפשר להגדיר את המדיניות ואת ההיקף בנפרד. מידע נוסף על ההגדרות האלה זמין במאמר היקפים ומדיניות של Topology Manager. ההגדרה הזו נתמכת במשאבי GKE הבאים:
|
השהיה בהפעלה מחדש של קונטיינר
ההגדרה הזו קובעת את משך הזמן המקסימלי להמתנה בין ניסיונות להפעלה מחדש של מאגר כשמאגר נמצא במצב CrashLoopBackOff. אפשר להגדיר את ההגדרה הזו למאגרי צמתים מסוג Standard שפועלים ב-GKE בגרסה 1.35 ואילך.
בטבלה הבאה מפורטות האפשרויות שניתן לשנות עבור crashLoopBackOff.
kubelet הגדרות תצורה |
הגבלות | הגדרת ברירת המחדל | תיאור |
|---|---|---|---|
crashLoopBackOff.maxContainerRestartPeriod |
הערך חייב להיות משך זמן חיובי של עד 5 דקות (5m). יחידות הזמן התקפות הן ns, us (או µs), ms, s או m. |
none |
משך הזמן המקסימלי שבו יכולה להצטבר השהיה של נסיגה להפעלה מחדש של כלי מכיל. ההשהיה בין ההפעלה מחדש גדלה באופן מעריכי מערך התחלתי ועד למגבלה המקסימלית הזו. מגבלת ברירת המחדל המקסימלית לאשכול Kubernetes היא 5 דקות. מידע נוסף זמין במאמר בנושא השהיית הפעלה מחדש של קונטיינר שאפשר להגדיר. |
סיום תקין של מכונות וירטואליות מסוג Spot ב-GKE
בטבלה הבאה מפורטות האפשרויות שניתנות לשינוי לגבי תקופת הסיום וההשבתה ההדרגתית של מכונות וירטואליות מסוג Spot ב-GKE. כדי להשתמש באפשרויות האלה, מישור הבקרה של האשכול צריך להריץ את GKE בגרסה 1.35.0-gke.1171000 ואילך. מידע נוסף זמין במאמר בנושא איך מכונות וירטואליות מסוג Spot פועלות ב-GKE.
kubelet הגדרות תצורה |
הגבלות | הגדרת ברירת המחדל | תיאור |
|---|---|---|---|
shutdownGracePeriodSeconds |
הערך חייב להיות מספר שלם שמייצג את משך הזמן בשניות. הערכים המותרים הם 0, 30 או 120. |
30 |
המדיניות הזו קובעת את משך הזמן הכולל בשניות שבו הצומת מעכב את ההשבתה כדי להפסיק את הפודים בצורה מסודרת. |
shutdownGracePeriodCriticalPodsSeconds |
הערך צריך להיות מספר שלם בין 0 ל-120 (כולל), וקטן מ-shutdownGracePeriodSeconds. הפרמטר תקף רק אם מוגדר גם shutdownGracePeriodSeconds. |
15 |
המדיניות הזו קובעת את משך הזמן בשניות שמשמש לסיום של פודים קריטיים במהלך השבתה של צומת. |
הזמנות של משאבי מערכת
במאגרי צמתים רגילים שמריצים Linux ו-GKE בגרסה 1.37 ומעלה, אפשר להתאים אישית את כמות הזיכרון והמעבד ששמורים לרכיבי המערכת. כך אפשר לכוונן את הקיבולת שניתנת להקצאה לתרחישים ספציפיים, כמו טיפול בשליפות תמונות בכמות גדולה או הפעלת DaemonSets של צמתים בהתאמה אישית. מידע נוסף על ההזמנות שמוגדרות כברירת מחדל זמין במאמר מידע על קביעת גודל של צומתי GKE.
בטבלה הבאה מפורטות האפשרויות שניתנות לשינוי בהזמנות של משאבי מערכת.
kubelet הגדרות תצורה |
הגבלות | הגדרת ברירת המחדל | תיאור |
|---|---|---|---|
reservedResourcesConfig.memoryReservedMib |
הערך חייב להיות מספר שלם. הערך חייב להיות גדול או שווה לערך ברירת המחדל של הקצאת הזיכרון למאגרי צמתים שנוצרו עם גרסה 1.37 ואילך, וקטן מ-50% מקיבולת הזיכרון הכוללת של הצומת. | מידע נוסף על הקצאת זיכרון | נפח הזיכרון שצריך לשריין לרכיבי המערכת, במביבייט (MiB). |
reservedResourcesConfig.cpuReservedMillicore |
הערך חייב להיות מספר שלם. הערך צריך להיות גדול מ-CPU reservation שמוגדר כברירת מחדל עבור מאגרי צמתים שנוצרו בגרסה 1.37 ואילך, או שווה לו, וקטן מ-50% מקיבולת ה-CPU הכוללת של הצומת. | הזמנות של יחידות עיבוד מרכזיות (CPU) | כמות המעבד (CPU) שצריך להקצות לרכיבי המערכת, במילי-ליבות. |
אימות הזמנות אפקטיביות
כדי לבדוק את ההזמנות הפעילות שחלות על מאגר הצמתים, בודקים את שדות הפלט effectiveMemoryReservedMib ו-effectiveCpuReservedMillicore:
gcloud container node-pools describe POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--format="yaml(config.kubeletConfig.reservedResourcesConfig)"
אפשרויות הגדרה של Sysctl
כדי לשפר את הביצועים של המערכת, אפשר לשנות את הפרמטרים של ליבת Linux. בטבלאות שבקטע הזה מתוארים פרמטרים שונים של ליבת המערכת שאפשר להגדיר.
פרמטרים של מערכת הקבצים (fs.*)
בטבלה הבאה מפורטים הפרמטרים שניתן לשנות במערכת הקבצים של Linux. ההגדרות האלה קובעות את ההתנהגות של מערכת הקבצים של Linux, כמו מגבלות על ידיות קבצים ומעקב אחרי אירועים.
פרמטר Sysctl |
הגבלות | תיאור |
|---|---|---|
fs.aio-max-nr |
הערך חייב להיות בין [65536, 4194304]. | ההגדרה הזו מגדירה את המספר המקסימלי של בקשות קלט/פלט אסינכרוניות בכל המערכת. |
fs.file-max |
הערך חייב להיות בין [104857, 67108864]. | ההגדרה הזו מגדירה את המספר המקסימלי של ידיות קבצים שהליבה של Linux יכולה להקצות. |
fs.inotify.max_user_instances |
הערך חייב להיות בין [8192, 1048576]. | ההגדרה הזו מגדירה את המספר המקסימלי של מופעי inotify שמשתמש יכול ליצור. |
fs.inotify.max_user_watches |
הערך חייב להיות בין [8192, 1048576]. | ההגדרה הזו מגדירה את המספר המקסימלי של שעוני inotify שמשתמש יכול ליצור. |
fs.nr_open |
הערך חייב להיות בין [1048576, 2147483584]. | ההגדרה הזו מגדירה את המספר המקסימלי של מתארי קבצים שאפשר לפתוח בתהליך. |
פרמטרים של הליבה (kernel.*)
בטבלה הבאה מפורטים הפרמטרים שניתן לשנות בקרנל של Linux. ההגדרות האלה קובעות את הפונקציות העיקריות של ליבת המערכת, כולל הקצאת זיכרון משותף.
| פרמטר Sysctl | הגבלות | תיאור |
|---|---|---|
kernel.shmmni |
הערך חייב להיות בין [4096, 32768]. | ההגדרה הזו מגדירה את המספר המקסימלי של קטעי זיכרון משותפים בכל המערכת. אם הערך הזה לא מוגדר, ברירת המחדל היא 4096. |
kernel.shmmax |
הערך חייב להיות בין [0, 18446744073692774399]. | ההגדרה הזו מגדירה את הגודל המקסימלי, בבייטים, של קטע זיכרון משותף יחיד שמותר לליבה להשתמש בו. המערכת מתעלמת מהערך הזה אם הוא גדול מכמות ה-RAM בפועל, כלומר, אפשר לשתף את כל ה-RAM הזמין. |
kernel.shmall |
הערך חייב להיות בין [0, 18446744073692774399]. | ההגדרה הזו מגדירה את המספר הכולל של דפי זיכרון משותף שאפשר להשתמש בהם במערכת בכל זמן נתון. גודל הדף הוא 4,096 בייט בארכיטקטורה של AMD64 ו-Intel 64. |
kernel.perf_event_paranoid |
הערך חייב להיות בין [-1, 3]. | ההגדרה הזו קובעת את השימוש במערכת אירועי הביצועים על ידי משתמשים ללא הרשאות ללא CAP_PERFMON. ערך ברירת המחדל הוא 2 בקרנל. |
kernel.sched_rt_runtime_us |
הערך חייב להיות בין -1 ל-1,000,000. | ההגדרה הזו מגדירה מגבלה גלובלית על משך הזמן שבו אפשר להשתמש בתזמון בזמן אמת. |
kernel.softlockup_panic |
אופציונלי (בוליאני). | ההגדרה הזו קובעת אם הליבה תיכנס למצב פאניקה כשמתגלה נעילה רכה. |
kernel.yama.ptrace_scope |
הערך חייב להיות בין 0 ל-3. |
ההגדרה הזו מגדירה את ההיקף וההגבלות של קריאת המערכת
|
kernel.kptr_restrict |
הערך חייב להיות בין [0, 2]. | ההגדרה הזו מציינת אם יש הגבלות על חשיפת כתובות ליבה דרך /proc וממשקים אחרים. |
kernel.dmesg_restrict |
אופציונלי (בוליאני). | ההגדרה הזו מציינת אם משתמשים ללא הרשאות מנועים מלהשתמש ב-dmesg(8) כדי להציג הודעות ממאגר היומן של ליבת המערכת. |
kernel.sysrq |
הערך חייב להיות בין [0, 511]. |
ההגדרה הזו קובעת אילו פונקציות מותר להפעיל באמצעות מקש SysRq. הערכים האפשריים כוללים את האפשרויות הבאות:
|
kernel.keys.maxbytes |
הערך חייב להיות בין [20000, 2097152]. | ההגדרה הזו מגדירה את המספר המקסימלי של בייטים שמשתמש שאינו משתמש root יכול להחזיק בקטע המטען הייעודי (payload) של כל המפתחות שלו. |
kernel.keys.maxkeys |
הערך חייב להיות בין [200, 1048576]. | ההגדרה הזו מגדירה את המספר המקסימלי של מפתחות שמשתמש שאינו משתמש root יכול להיות הבעלים שלהם. |
פרמטרים של רשת (net.*)
בטבלה הבאה מפורטים הפרמטרים של הרשת שאפשר לשנות. ההגדרות האלה משפרות את הביצועים ואת ההתנהגות של מחסנית הרשת, החל ממאגרי שקעים ועד למעקב אחר חיבורים.
| פרמטר Sysctl | הגבלות | תיאור |
|---|---|---|
net.core.busy_poll |
מספר שלם חיובי כלשהו, קטן מ-2,147,483,647. | ההגדרה הזו מגדירה את הזמן הקצוב לתפוגה של סקרים ושל בחירה, במקרה של השהיה נמוכה. הערך הזה מייצג את הזמן המשוער במיקרו-שניות של לולאה פעילה בהמתנה לאירועים. |
net.core.busy_read |
מספר שלם חיובי כלשהו, קטן מ-2,147,483,647. | ההגדרה הזו מגדירה את הזמן הקצוב לתפוגה של סקר פעיל עם זמן אחזור נמוך לקריאות של שקעים. הערך הזה מייצג את הזמן המשוער במיקרו-שניות של לולאה פעילה בהמתנה לחבילות בתור של המכשיר. |
net.core.netdev_max_backlog |
מספר שלם חיובי כלשהו, קטן מ-2,147,483,647. | ההגדרה הזו מגדירה את המספר המקסימלי של מנות, שנמצאות בתור בצד הקלט, כשהממשק מקבל מנות מהר יותר ממה שהליבה יכולה לעבד אותן. |
net.core.rmem_default |
מספר שלם חיובי כלשהו, קטן מ-2,147,483,647. | ההגדרה הזו מגדירה את גודל ברירת המחדל של שטח האחסון הזמני של שקע הקבלה, בבייטים. |
net.core.rmem_max |
מספר שלם חיובי כלשהו, קטן מ-2,147,483,647. | ההגדרה הזו מגדירה את הגודל המקסימלי של שטח אחסון זמני של שקע קבלה, בבייטים. |
net.core.wmem_default |
מספר שלם חיובי כלשהו, קטן מ-2,147,483,647. | ההגדרה הזו מגדירה את הגדרת ברירת המחדל, בבייט, של מאגר השליחה של שקע. |
net.core.wmem_max |
מספר שלם חיובי כלשהו, קטן מ-2,147,483,647. | ההגדרה הזו מגדירה את הגודל המקסימלי של שטח האחסון הזמני של שקע השליחה, בבייטים. |
net.core.optmem_max |
מספר שלם חיובי כלשהו, קטן מ-2,147,483,647. | ההגדרה הזו מגדירה את הגודל המקסימלי של מאגר הנתונים הזמני הנוסף שמותר לכל שקע. |
net.core.somaxconn |
הערך חייב להיות בין [128, 2147483647]. | ההגדרה הזו מגדירה את המגבלה של ה-backlog של socket listen(), שנקרא במרחב המשתמש SOMAXCONN. ההגדרה הזו מוגדרת כברירת מחדל ל-128. |
net.ipv4.tcp_rmem |
{min, default, max} (כל אחד מהערכים > 0, זיכרון בבייטים). | הגדרה זו מגדירה את הגודל המינימלי, בבתים, של מאגר הקבלה בו משתמשים שקעי UDP במתינות. הגדרת ברירת המחדל היא עמוד אחד. |
net.ipv4.tcp_wmem |
{min, default, max} (כל אחד מהערכים > 0, זיכרון בבייטים). | הגדרה זו מגדירה את הגודל המינימלי, בבתים, של מאגר השליחה בו משתמשים שקעי UDP במתינות. הגדרת ברירת המחדל היא עמוד אחד. |
net.ipv4.tcp_tw_reuse |
חייב להיות בין {0, 1}. | הגדרה זו מגדירה האם לאפשר שימוש חוזר ב-sockets במצב TIME_WAIT עבור חיבורים חדשים כאשר הדבר בטוח מנקודת מבט של פרוטוקול. ערך ברירת המחדל הוא 0. |
net.ipv4.tcp_max_orphans |
חייב להיות בין [16384, 262144]. | הגדרה זו מגדירה את המספר המקסימלי של שקעי TCP שאינם מחוברים לאף מזהה קובץ משתמש. |
net.ipv4.tcp_max_tw_buckets |
חייב להיות בין [4096, 2147483647]. | הגדרה זו מגדירה את המספר המקסימלי של שקעי זמן-המתנה המוחזקים על ידי המערכת בו זמנית. אם חורג ממספר זה, שקע זמן ההמתנה מושמד באופן מיידי ומודפסת אזהרה. |
net.ipv4.tcp_syn_retries |
חייב להיות בין [1, 127]. | הגדרה זו מגדירה את מספר הפעמים ש-SYNs ראשוניים עבור ניסיון חיבור TCP פעיל משודרים מחדש. |
net.ipv4.tcp_ecn |
הערך חייב להיות בין [0, 2]. | הגדרה זו שולטת בשימוש בהתראות גודש מפורשות (ECN) על ידי TCP. ECN משמש רק כאשר שני קצוות חיבור ה-TCP מצביעים על תמיכה בו. |
net.ipv4.tcp_mtu_probing |
הערך חייב להיות בין [0, 2]. |
הגדרה זו שולטת בגילוי MTU של נתיב שכבת חבילות TCP. הערכים הנתמכים הם הבאים:
|
net.ipv4.tcp_congestion_control |
חייב להיות אחד מהערכים הנתמכים שבעמודה תיאור. | ההגדרה הזו לא נתמכת כש-GKE Dataplane V2 מופעל באשכול. הערכים הנתמכים הבאים תלויים בסוג התמונה:
|
net.ipv6.conf.all.disable_ipv6 |
בוליאני. | שינוי הערך הזה זהה לשינוי ההגדרה conf/default/disable_ipv6 וגם לשינוי כל ההגדרות disable_ipv6 לכל ממשק לאותו ערך. |
net.ipv6.conf.default.disable_ipv6 |
בוליאני. | ההגדרה הזו משביתה את הפעולה של IPv6. |
net.netfilter.nf_conntrack_acct |
הערך חייב להיות בין {0, 1}. | ההגדרה הזו מאפשרת מעקב אחר זרימת החיבורים. ערך ברירת המחדל הוא 0, כלומר ההגדרה מושבתת. זמין בגרסאות GKE 1.32.0-gke.1448000 ואילך. |
net.netfilter.nf_conntrack_max |
הערך חייב להיות בין [65536, 4194304]. | ההגדרה הזו מגדירה את הגודל של טבלת מעקב החיבורים. אם מגיעים לערך המקסימלי, החיבור החדש ייכשל. זמין בגרסאות GKE 1.32.0-gke.1448000 ואילך. |
net.netfilter.nf_conntrack_buckets |
הערך חייב להיות בין [65536, 524288]. |
ההגדרה הזו מגדירה את הגודל של טבלת הגיבוב. ההגדרה המומלצת היא תוצאה של הפעולות הבאות: זמין בגרסאות GKE 1.32.0-gke.1448000 ואילך. |
net.netfilter.nf_conntrack_tcp_timeout_close_wait |
הערך חייב להיות בין [60, 3600]. |
ההגדרה הזו מגדירה את התקופה, בשניות, שבה חיבורי ה-TCP יכולים להישאר במצב זמין בגרסאות GKE 1.32.0-gke.1448000 ואילך. |
net.netfilter.nf_conntrack_tcp_timeout_established |
הערך חייב להיות בין [600, 86400]. |
ההגדרה הזו מגדירה את משך הזמן בשניות שבו חיבורים לא פעילים נשארים בטבלת מעקב החיבורים לפני שהם נמחקים אוטומטית. זמין בגרסאות GKE 1.32.0-gke.1448000 ואילך. |
net.netfilter.nf_conntrack_tcp_timeout_time_wait |
הערך חייב להיות בין [1, 600]. |
ההגדרה הזו מגדירה את התקופה, בשניות, שבה חיבורי ה-TCP יכולים להישאר במצב זמין בגרסאות GKE 1.32.0-gke.1448000 ואילך. |
net.ipv4.neigh.default.gc_thresh1 |
הערך חייב להיות בין [0, 262144]. | ההגדרה הזו מגדירה את המספר המינימלי של רשומות שיישמרו במטמון של פרוטוקול ARP. אם מספר הרשומות נמוך מההגדרה הזו, כלי איסוף הגרוטאות לא יפעל. הגדרת הערך הזה ל-0 עלולה לגרום לשימוש מוגזם במטמון ולפגוע בביצועים. |
net.ipv4.neigh.default.gc_thresh2 |
הערך חייב להיות בין [512, 524288]. | ההגדרה הזו מגדירה את המספר המקסימלי של רשומות שיישמרו במטמון של ARP. אוסף האשפה מאפשר למספר הערכים לחרוג מערך זה למשך 5 שניות לפני שהוא מתחיל איסוף אשפה רך. |
net.ipv4.neigh.default.gc_thresh3 |
הערך חייב להיות בין [1024, 1048576]. | ההגדרה הזו מגדירה את המספר המקסימלי של רשומות שיישמרו במטמון של ARP. מנגנון איסוף האשפה מתוכנן לפעול תמיד אם מספר הרשומות חורג מההגדרה הזו. |
פרמטרים של זיכרון וירטואלי (vm.*)
בטבלה הבאה מפורטים הפרמטרים שניתן לשנות במערכת המשנה של הזיכרון הווירטואלי. ההגדרות האלה מנהלות את מערכת המשנה של הזיכרון הווירטואלי, שקובעת איך ליבת המערכת מטפלת בזיכרון, בהחלפה ובשמירת נתונים במטמון בדיסק.
פרמטר sysctl |
הגבלות | תיאור |
|---|---|---|
vm.max_map_count |
הערך חייב להיות בין [65536, 2147483647]. | הקובץ הזה מגדיר את המספר המקסימלי של אזורי מיפוי זיכרון שיכולים להיות לתהליך. |
vm.dirty_background_ratio |
הערך חייב להיות בין [1, 100]. | ההגדרה הזו מגדירה את אחוז זיכרון המערכת שאפשר למלא בדפים לא נקיים לפני שמתחילים שרשורים של ניקוי ליבת הרקע לביצוע כתיבה חוזרת. הערך חייב להיות קטן מהערך של השדה vm.dirty_ratio. |
vm.dirty_background_bytes |
הערך חייב להיות בין [0, 68719476736]. |
ההגדרה הזו מגדירה את כמות הזיכרון המלוכלך שבה מתחילים השרשורים של מנקה הליבה ברקע את הכתיבה חזרה. חשוב לדעת ש- |
vm.dirty_expire_centisecs |
הערך חייב להיות בין [0, 6000]. | הגדרה זו מגדירה את הגיל המקסימלי, במאיות השנייה, שבו נתונים מלוכלכים יכולים להישאר בזיכרון לפני ששרשורי ניקוי של ליבת המערכת כותבים אותם לדיסק. |
vm.dirty_ratio |
הערך חייב להיות בין [1, 100]. | ההגדרה הזו מגדירה את אחוז זיכרון המערכת שאפשר למלא בדפים לא נקיים לפני שתהליכים שמבצעים כתיבות נאלצים להיחסם ולכתוב נתונים לא נקיים באופן סינכרוני. |
vm.dirty_bytes |
הערך חייב להיות בין [0, 68719476736]. |
ההגדרה הזו מגדירה את כמות הזיכרון המלוכלך שבה תהליך שיוצר כתיבות לדיסק מתחיל לכתוב בעצמו. הערך המינימלי המותר ל- חשוב לדעת ש- |
vm.dirty_writeback_centisecs |
הערך חייב להיות בין [0, 1000]. | ההגדרה הזו מגדירה את המרווח, במאיות של שנייה, שבו השרשורים של הכלי לניקוי הליבה מתעוררים כדי לכתוב נתונים ישנים ולא נקיים לדיסק. |
vm.overcommit_memory |
חייב להיות בין {0, 1, 2}. |
ההגדרה הזו קובעת את האסטרטגיה של ליבת מערכת ההפעלה לטיפול בהקצאת יתר של זיכרון. הערכים האפשריים הם:
ההגדרה הזו לא נתמכת במחשבים עם זיכרון קטן מ-15GB. |
vm.overcommit_ratio |
הערך חייב להיות בין 0 ל-100. | ההגדרה הזו מגדירה את אחוז ה-RAM הפיזי שמותר להקצאת יתר כשהערך של השדה vm.overcommit_memory מוגדר ל-2. |
vm.vfs_cache_pressure |
הערך חייב להיות בין 0 ל-100. | ההגדרה הזו משנה את ההעדפה של ליבת המערכת לגבי שחרור זיכרון שמשמש למטמון של dentry (ספרייה) ו-inode. |
vm.swappiness |
הערך צריך להיות בין [0, 200]. | ההגדרה הזו קובעת את הנטייה של ליבת המערכת להוציא תהליכים מהזיכרון הפיזי ולהעביר אותם לדיסק ההחלפה. ערך ברירת המחדל הוא 60. |
vm.watermark_scale_factor |
הערך צריך להיות בין [10, 3000]. | ההגדרה הזו קובעת את רמת האגרסיביות של kswapd. הוא מגדיר את הזיכרון שנותר לפני ש-kswapd מתעורר ואת הזיכרון שצריך לפנות לפני שהוא נכנס למצב שינה. ערך ברירת המחדל הוא 10. |
vm.min_free_kbytes |
הערך חייב להיות בין [67584, 1048576]. | ההגדרה הזו מגדירה את הזיכרון הפנוי המינימלי לפני שגיאת OOM. ערך ברירת המחדל הוא 67584. |
מידע נוסף על הערכים הנתמכים של כל דגל sysctl זמין במסמכי התיעוד של ה-CLI של gcloud בנושא --system-config-from-file.
יכול להיות שלמרחבי שמות שונים של Linux יהיו ערכים ייחודיים עבור דגל sysctl מסוים, אבל יכול להיות שערכים אחרים יהיו גלובליים לכל הצומת. עדכון אפשרויות sysctl באמצעות הגדרת מערכת צמתים עוזר לוודא ש-sysctl מוחל באופן גלובלי בצומת ובכל מרחב שמות, כך שלכל Pod יש ערכי sysctl זהים בכל מרחב שמות של Linux.
אפשרויות להגדרת מצב cgroup ב-Linux
זמן הריצה של המאגר ו-kubelet משתמשים ב-cgroups של ליבת Linux לניהול משאבים, כמו הגבלת כמות המעבד או הזיכרון שלכל מאגר ב-Pod יש גישה אליהם. קיימות שתי גרסאות של מערכת המשנה cgroup בליבה: cgroupv1 ו-cgroupv2.
התמיכה ב-Kubernetes ב-cgroupv2 הוצגה כאלפא ב-Kubernetes גרסה 1.18, כבטא בגרסה 1.22 וכ-GA בגרסה 1.25. מידע נוסף מופיע במאמרי העזרה בנושא Kubernetes cgroups v2.
הגדרת מערכת הצמתים מאפשרת להתאים אישית את הגדרת קבוצת הבקרה של מאגרי הצמתים. אפשר להשתמש ב-cgroupv1 או ב-cgroupv2. GKE משתמש ב-cgroupv2 למאגרי צמתים חדשים במצב Standard שמריצים גרסה 1.26 ואילך, וב-cgroupv1 למאגרי צמתים שמריצים גרסאות מוקדמות מ-1.26. במאגרי צמתים שנוצרו באמצעות הקצאת צמתים אוטומטית (NAP), הגדרת cgroup תלויה בגרסה הראשונית של האשכול, ולא בגרסה של מאגר הצמתים. אין תמיכה ב-cgroupv1 במכונות Arm.
אתם יכולים להשתמש בהגדרת המערכת של הצומת כדי לשנות את ההגדרה של מאגר צמתים לשימוש ב-cgroupv1 או ב-cgroupv2 באופן מפורש. שדרוג של מאגר צמתים קיים שמשתמש ב-cgroupv1 לגרסה 1.26 לא משנה את ההגדרה ל-cgroupv2.
מאגרי צמתים קיימים שמופעלת בהם גרסה מוקדמת יותר מ-1.26, ושלא כוללים הגדרת cgroup בהתאמה אישית, ימשיכו להשתמש ב-cgroupv1.
כדי לשנות את ההגדרה, צריך לציין במפורש cgroupv2 עבור מאגר הצמתים הקיים.
לדוגמה, כדי להגדיר את מאגר הצמתים לשימוש ב-cgroupv2, משתמשים בקובץ תצורה של מערכת הצמתים, כמו זה שבהמשך:
linuxConfig:
cgroupMode: 'CGROUP_MODE_V2'
אלה האפשרויות הנתמכות של cgroupMode:
-
CGROUP_MODE_V1: שימוש ב-cgroupv1במאגר הצמתים. -
CGROUP_MODE_V2: שימוש ב-cgroupv2במאגר הצמתים. -
CGROUP_MODE_UNSPECIFIED: שימוש בהגדרת ברירת המחדל של cgroup ב-GKE.
כדי להשתמש ב-cgroupv2, צריך לעמוד בדרישות ובמגבלות הבאות:
- כדי ליצור מאגר צמתים שמופעלת בו גרסה קודמת ל-1.26, צריך להשתמש ב-CLI של gcloud בגרסה 408.0.0 ואילך. לחלופין, אפשר להשתמש ב-gcloud beta בגרסה 395.0.0 ואילך.
- האשכולות ומאגרי הצמתים צריכים להריץ GKE בגרסה 1.24.2-gke.300 ואילך.
- חובה להשתמש בקובץ אימג' של צומת של מערכת הפעלה שמותאמת לקונטיינרים עם containerd או של Ubuntu עם containerd.
- אם עומסי עבודה מסוימים שלכם מסתמכים על קריאת מערכת הקבצים של cgroup (
/sys/fs/cgroup/...), ודאו שהם תואמים ל-API שלcgroupv2. - אם אתם משתמשים בכלי ניטור או בכלי צד שלישי, ודאו שהם תואמים ל-
cgroupv2. - אם אתם משתמשים בעומסי עבודה של Java (JDK), אנו ממליצים להשתמש בגרסאות שתומכות באופן מלא ב-cgroupv2, כולל JDK
8u372, JDK 11.0.16 ואילך, או JDK 15 ואילך.
אימות ההגדרה של cgroup
כשמוסיפים הגדרה של מערכת צמתים, GKE צריך ליצור מחדש את הצמתים כדי להטמיע את השינויים. אחרי שמוסיפים את ההגדרה למאגר צמתים והצמתים נוצרים מחדש, אפשר לאמת את ההגדרה החדשה.
אפשר לוודא את ההגדרה של cgroup לצמתים במאגר צמתים באמצעות ה-CLI של gcloud או כלי שורת הפקודה kubectl:
CLI של gcloud
בודקים את ההגדרה של cgroup למאגר צמתים:
gcloud container node-pools describe POOL_NAME \
--format='value(Config.effectiveCgroupMode)'
מחליפים את POOL_NAME בשם של מאגר הצמתים.
הפלט האפשרי הוא אחד מהבאים:
-
EFFECTIVE_CGROUP_MODE_V1: הצמתים משתמשים ב-cgroupv1 -
EFFECTIVE_CGROUP_MODE_V2: הצמתים משתמשים ב-cgroupv2
בפלט מוצגת רק ההגדרה החדשה של cgroup אחרי שהצמתים במאגר הצמתים נוצרו מחדש. הפלט ריק עבור מאגרי צמתים של שרת Windows, שלא תומכים ב-cgroup.
kubectl
כדי להשתמש ב-kubectl כדי לאמת את הגדרת ה-cgroup של צמתים במאגר הצמתים הזה, בוחרים צומת ומתחברים אליו באמצעות ההוראות הבאות:
- יוצרים מעטפת אינטראקטיבית עם כל צומת במאגר הצמתים. בפקודה, החלף את
mynodeבשם של כל צומת במאגר הצמתים. - זיהוי גרסת cgroup בצמתי Linux
אפשרויות תצורה של hugepages בלינוקס
ניתן להשתמש בדפי ענק שהוקצו מראש באופן ידני או בדפי ענק שקופים שהוקצו אוטומטית.
הקצאה מראש של דפי ענק
ניתן להשתמש בקובץ תצורה של מערכת הצומת כדי להקצות מראש hugepages. Kubernetes תומך בדפים גדולים שהוקצו מראש כסוג משאב, בדומה למעבד או לזיכרון.
כדי להשתמש ב-hugepages, צריך לעמוד בדרישות הבאות ולשים לב להגבלות הבאות:
- כדי לוודא שהצומת לא תפוסה לחלוטין על ידי דפי ענק, הגודל הכולל של דפי הענק שהוקצו לא יכול לחרוג מאף אחת מהאפשרויות הבאות:
- במחשבים עם זיכרון של פחות מ-30 GB: 60% מהזיכרון הכולל. לדוגמה, במכונה מסוג e2-standard-2 עם זיכרון של 8 GB, אי אפשר להקצות יותר מ-4.8 GB ל-hugepages.
- במחשבים עם זיכרון בנפח של יותר מ-30GB: 80% מהזיכרון הכולל. לדוגמה, במכונות c4a-standard-8 עם זיכרון של 32 GB, גודל ה-hugepages לא יכול לחרוג מ-25.6 GB.
- 1 GB hugepages זמין רק בסוגי המכונות A3, C2D, C3, C3D, C4, C4A, C4D, C4N, CT5E, CT5LP, CT6E, H3, M2, M3, M4 או Z3.
בטבלה הבאה מתוארות ההגדרות שניתנות לשינוי עבור דפי ענק ב-Linux.
| פרמטר להגדרה | הגבלות | ערך ברירת המחדל | תיאור |
|---|---|---|---|
hugepage_size2m |
מספר שלם. בכפוף למגבלות הקצאת הזיכרון שמתוארות למעלה. | 0 |
ההגדרה הזו מקצה מראש מספר מסוים של דפי ענק בגודל 2 MB. |
hugepage_size1g |
מספר שלם. בכפוף למגבלות על הזיכרון ועל סוג המכונה שמתוארות למעלה. | 0 |
ההגדרה הזו מקצה מראש מספר מסוים של דפי ענק בגודל 1GB. |
דפים גדולים שקופים (THP)
אפשר להשתמש בקובץ הגדרות של מערכת הצמתים כדי להפעיל את התמיכה ב-Transparent HugePage של ליבת Linux. ב-THP, ליבת המערכת מקצה באופן אוטומטי דפי ענק לתהליכים בלי הקצאה מראש ידנית.
בטבלה הבאה מפורטים הפרמטרים שניתנים לשינוי ב-THP.
| פרמטר להגדרה | ערכים נתמכים | ערך ברירת המחדל | תיאור |
|---|---|---|---|
transparentHugepageEnabled |
|
UNSPECIFIED |
ההגדרה הזו קובעת אם THP מופעלת לזיכרון אנונימי. |
transparentHugepageDefrag |
|
UNSPECIFIED |
ההגדרה הזו מגדירה את ההגדרה של ביטול הפיצול של THP. |
THP זמין ב-GKE מגרסה 1.33.2-gke.4655000 ואילך. הוא מופעל כברירת מחדל גם במאגרי צמתים חדשים של TPU בגרסה 1.33.2-gke.4655000 ואילך של GKE. התכונה THP לא מופעלת כשמשדרגים מאגרי צמתים קיימים לגרסה נתמכת או לגרסה מאוחרת יותר.
אפשרות לסנכרון מדויק של הזמן ב-Linux
אם חשוב לכם לבצע סנכרון מדויק של השעה ולעקוב אחרי הדיוק של סנכרון השעה בעומסי העבודה, אתם יכולים להגדיר שעה מדויקת כדי לסנכרן את השעון של מכונת ה-VM עם השעון של המארח באמצעות chrony ו-ptp_kvm. התצורה הזו נועדה להשיג דיוק של עד 1 אלפית השנייה בהגדרות נתמכות. מידע נוסף על סוגי מכונות נתמכים, מערכות הפעלה נתמכות ותחומים נתמכים זמין במאמר הגדרת זמן מדויק למכונות וירטואליות ב-Compute Engine.
בטבלה הבאה מפורט הפרמטר שצריך להגדיר כדי לבצע סנכרון מדויק של השעה עם GKE:
| פרמטר להגדרה | ערכים נתמכים | ערך ברירת המחדל | תיאור |
|---|---|---|---|
accurateTimeConfig.enablePtpKvmTimeSync |
true או false |
false |
ההגדרה הזו מאפשרת סנכרון מדויק של השעה. התכונה הזו נתמכת רק בסוגים מסוימים של מכונות, מערכות הפעלה ואזורים. |
אפשרויות להגדרת VFIO ב-Linux
בטבלה הבאה מפורט הפרמטר להגדרת VFIO (קלט/פלט של פונקציה וירטואלית) בצומת. VFIO מאפשרת לדרייברים בטוחים, לא מורשים ומרחב משתמש לגשת למכשירי קלט/פלט.
| פרמטר להגדרה | הגבלות | ערך ברירת המחדל | תיאור |
|---|---|---|---|
nodeVfioConfig.dmaEntryLimit |
חייב להיות מספר שלם בין 65535 לבין 4194304. |
65535 |
מציין את המספר המקסימלי של רשומות DMA (דפים) שאפשר למפות באמצעות מנהל ההתקן VFIO IOMMU מסוג 1 עבור מאגר תגים. המגבלה הזו משפיעה על כמות הזיכרון הכוללת של המארח שאפשר להצמיד לגישה ישירה למכשיר, וזה לרוב קריטי למכשירים עם ביצועים גבוהים כמו TPU ו-GPU. ההגדרה הזו תואמת לפרמטר הגרעין הבא: /sys/module/vfio_iommu_type1/parameters/dma_entry_limit. יכול להיות שיהיה צורך בערכים גבוהים יותר עבור מיפוי עומסי עבודה של אזורי זיכרון גדולים.האפשרות הזו זמינה בגרסאות GKE 1.36.0-gke.3009000 ואילך. |
אפשרויות הגדרה של מתזמן קלט/פלט בדיסק של Linux
בטבלה הבאה מפורטים הפרמטרים להגדרת מתזמן קלט/פלט של דיסק למאגרי צמתים.
| פרמטר להגדרה | ערכים נתמכים | ערך ברירת המחדל | תיאור |
|---|---|---|---|
diskIoScheduler.nodeSystemIoScheduler |
mq-deadline, bfq, kyber, none |
bfq קובץ אימג' של מערכת הפעלה שמותאמת לקונטיינרים, none Ubuntu image |
הפקודה מגדירה את מתזמן הקלט/פלט לדיסק האתחול או ל-SSD מקומי זמני שמריץ עומסי עבודה של מערכת הצומת. הפקודה זמינה ב-GKE בגרסאות 1.36.0-gke.3009000 ואילך. |
diskIoScheduler.nodeAttachedDiskIoScheduler |
mq-deadline, bfq, kyber, none |
none |
הפקודה מגדירה את מתזמן הקלט/פלט לדיסקים המצורפים. הפקודה זמינה ב-GKE מגרסה 1.36.0-gke.3009000 ואילך. |
המאמרים הבאים
- איך מעבירים צמתים ל-Linux cgroupv2
- איך מוסיפים ומנהלים מאגרי צמתים
- איך מתאימים אישית את ההגדרות של containerd בצמתי GKE
- כך מבצעים אתחול אוטומטי של צמתי GKE באמצעות DaemonSets.