כשצומת חדש מצטרף לאשכול Standard של Google Kubernetes Engine (GKE), הוא צריך להירשם במישור הבקרה כדי לקבל עומסי עבודה. אם התהליך הזה נכשל, לא ניתן יהיה להשתמש בצומת, וזה עלול למנוע מהאשכול ליצור, לתקן או לשנות את הגודל שלו בצורה נכונה.
בדף הזה מוסבר איך לפתור בעיות שמונעות רישום של צומת. במאמר הזה מוסבר מהן הדרישות המוקדמות לרישום מוצלח של צומת, איך משתמשים בכלי Node Registration Checker כדי למצוא כשלים ואיך פותרים בעיות ברשת, במשאבים ובהרשאות באופן ידני.
המידע הזה מיועד בעיקר לאדמינים ולמפעילים של פלטפורמות שאחראים על ניהול והרחבה של תשתית הצמתים באשכולות GKE Standard. הוא יכול להיות שימושי גם למפתחי אפליקציות שרוצים להבין למה יכול להיות שאין אפשרות להגדיל את הקיבולת של אשכול כדי לעמוד בדרישות המשאבים של האפליקציה שלהם. מידע נוסף על התפקידים הנפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם בתוכן של Google Cloudזמין במאמר תפקידי משתמשים נפוצים ומשימות ב-GKE.
לפתרון בעיות באשכולות GKE Autopilot, אפשר לעיין במאמר פתרון בעיות באשכולות Autopilot.
מידע על רישום צמתים
צמתים הם מכונות וירטואליות של Compute Engine שנוצרות על ידי GKE בשמכם. כשמוסיפים צומת חדש לאשכול GKE, צריך לרשום אותו במישור הבקרה של האשכול. התהליך הזה, שנקרא רישום צומת או אתחול צומת, מתרחש כשיוצרים צומת.
כשמתבצע רישום של צומת
רישום הצמתים מתבצע בכל פעם שנוצרים צמתים, כולל בתרחישים הבאים:
- יוצרים אשכול.
- יוצרים מאגר צמתים.
- GKE יוצר מאגר צמתים עם הקצאת צמתים אוטומטית.
- מידרוג אוטומטי של אשכולות מגדיל את האשכול.
- משנים את הגודל של המקבץ.
- תיקון אוטומטי של צומת יוצר צומת חדש.
תהליך רישום הצומת כולל את השלבים הבאים:
- מספר הצמתים שמוגדר למאגר הצמתים משוכפל לקבוצות המופעים המנוהלות (MIG).
- קבוצות ה-MIG יוצרות את המספר הנדרש של מכונות וירטואליות.
לכל מכונה וירטואלית שנוצרת:
- המכונה הווירטואלית מופעלת.
- המכונה הווירטואלית מגדירה ומתקינה את החבילות הנדרשות כדי לפעול כצומת Kubernetes.
- ה-kubelet שפועל עכשיו במכונה הווירטואלית מתקשר עם שרת ה-API של מישור הבקרה כדי להירשם כצומת.
הודעת שגיאה ברישום הצומת
כש-GKE מנסה להוסיף צמתים לאשכול, השגיאה הבאה מופיעה במסוף Google Cloud אם רישום הצומת נכשל:
All cluster resources were brought up, but: only 0 nodes out of * have
registered; this is likely due to the Nodes failing to start correctly; try
re-creating the cluster or contact support if that doesn't work.
הודעת השגיאה הזו מציינת שהצמתים לא נרשמו בהצלחה באשכול. בקטעים הבאים מפורטות כמה מהסיבות האפשריות לשגיאה הזו.
תנאים מוקדמים לרישום מוצלח של צומת
ההרשמה של הצומת לאשכול GKE תלויה בגורמים כמו:
- חיבור לרשת.
- זמינות מקורות המידע.
- הרשאות של חשבון שירות.
דרישות מוקדמות ליצירת מכונה
כש-GKE יוצר צומת לאשכול, השלב הראשון הוא יצירת מכונת VM חדשה ב-Compute Engine.
יצירת המופע עשויה להיכשל בגלל אחת מהסיבות הבאות:
יצירת מכונה וירטואלית נכשלה, כלומר בטווח הזמן שבו GKE ניסה ליצור את המכונה הווירטואלית כדי לרשום אותה כצומת GKE, אין יומני רישום של יצירת המכונה הווירטואלית כי המכונות הווירטואליות לא נוצרו. כדי לבדוק אם יש יומנים חסרים, אפשר לעיין בהוראות לחיפוש מופע שבו נכשלה הרשמת הצומת.
הרשאות של חשבון שירות
לצמתים של GKE משויך חשבון שירות של IAM. כברירת מחדל, חשבון השירות הזה הוא חשבון השירות של Compute Engine שמוגדר כברירת מחדל. כדי להקשיח את האשכול, מומלץ להשתמש בחשבון שירות מותאם אישית של IAM עם ההרשאות המינימליות הנדרשות.
לחשבון השירות הזה צריכות להיות ההרשאות הנכונות כדי שמכונות וירטואליות יאותחלו כצמתים של GKE. אם תמחקו את חשבון השירות, תשביתו אותו או לא תתנו לו את ההרשאות הנכונות, יכול להיות שהרשמת הצומת תיכשל.
דרישות מוקדמות לחיבור רשת ל-Google APIs ולשירותים של Google
החבילות מורדות למופע של VM כדי להכין אותו להפעלה כצומת GKE, וזמן קצוב לתפוגה לחיבור יכול להיות סימן לכך שהאשכול לא עומד בדרישות הרישות שנדרשות כדי להתחבר ל-Google APIs ולשירותים של Google, כמו storage.googleapis.com. אם מופע לא יכול להתחבר לשירותים האלה, הוא לא יכול להוריד את הפצת Kubernetes ולהשלים את תהליך הרישום של הצומת.
בהתאם לחיבור הרשת שלכם, כדי לאפשר את החיבור הזה יכול להיות שתצטרכו להגדיר גישה פרטית ל-Google, או להגדיר כללי חומת אש ונתיבים ברשת הענן הווירטואלי הפרטי (VPC) של האשכול, שיאפשרו את החיבור.
דרישות מוקדמות לחיבור לרשת עם מישור הבקרה
הקישוריות בין מישור הבקרה לבין הצמתים היא קריטית לרישום הצמתים ולתפקוד הרגיל שלהם. התקשורת הזו מותרת כברירת מחדל. חשוב לוודא שגם אחרי שמגדירים כללים לחומת האש ב-VPC, התקשורת בין הצמתים לבין מישור הבקרה עדיין מתאפשרת.
מידע נוסף זמין במאמר בנושא איך מאפשרים קישוריות למישור הבקרה.
שימוש בכלי לבדיקת רישום צמתים כדי לפתור בעיות ברישום צמתים
כלי השירות Node Registration Checker פועל במופעים שנוצרו לאחרונה ובודק אם המופע השלים בהצלחה את שלבי רישום הצומת.
אם הרישום של הצומת נכשל, כלי השירות יוצר דוח סיכום שבו אפשר לראות אילו דרישות מוקדמות לא מולאו, בהתאם לנקודה בתהליך שבה המופע נכשל.
כדי למצוא מופע שבו נכשלה ההרשמה של הצומת, פועלים לפי ההוראות שבקטע הבא. כדי להבין למה ההרשמה נכשלה, אפשר להיעזר בסיכום של הכלי לבדיקת הרשמת צמתים.
איתור מופע שבו נכשל רישום הצומת
אם מופע אחד או יותר לא נרשמים כצמתים במישור הבקרה של אשכול GKE, אפשר לראות את מספר המופעים שנכשלו בהודעת השגיאה שמוצגת בדף פרטי האשכול במסוף Google Cloud . אם כמה מופעים נכשלים ברישום בו-זמנית, יכול להיות שהסיבה הבסיסית לכך היא זהה. לכן, אפשר להשתמש באחד מהמופעים שנכשלו כדי לבדוק למה כל המופעים נכשלו.
אבל בגלל שהמופעים לא נרשמו כצמתים ב-GKE, צריך לפעול לפי ההוראות הבאות כדי למצוא את השמות של המכונות הווירטואליות הבסיסיות ב-Compute Engine שלא נרשמו.
נכנסים לדף Logs Explorer במסוף Google Cloud :
כדי למצוא את היומנים של יצירת מכונת VM, משתמשים במסנן היומנים הבא:
resource.type="gce_instance" logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity" protoPayload.requestMetadata.callerSuppliedUserAgent="GCE Managed Instance Group for GKE" protoPayload.response.status="RUNNING"מחליפים את
PROJECT_IDבמזהה הפרויקט של האשכול.משתמשים בהיסטוגרמה שמתחת למסנן היומן כדי לצמצם את טווח הזמן לתקופה שבה אמור היה להתרחש יצירת הצומת.
לוחצים על אחד מהיומנים שמופיעים בקטע Query results ואז לוחצים על Expand nested fields כדי להציג פרטים נוספים.
מחפשים את השדה
protoPayload.resourceName. החלק האחרון של הנתיב שמופיע שם הוא שם המכונה. שמות המכונות מבוססים על פורמט שמתחיל בשם האשכול ובשם מאגר הצמתים, לדוגמה:
gke-cluster-1-default-pool-b0ac62d3-9g1vהוא מופע של מאגר הצמתיםdefault-poolב-gke-cluster-1.נכנסים לדף VM instances של Compute Engine במסוף Google Cloud :
משתמשים במסנן כדי למצוא את השם של מכונת ה-VM. אפשר ללחוץ לקבלת פרטים נוספים.
פתרון בעיות במכונה באמצעות הכלי לבדיקת רישום צמתים
אחרי שמאתרים את שם המכונה שנרשמה בצורה לא תקינה, אפשר לבדוק למה זה קרה באמצעות הכלי לבדיקת רישום צמתים.
בכרטיסייה Details של מכונת ה-VM, בקטע Logs, לוחצים על יציאה טורית 1 (console).
הפלט של מופעים שנוצרו לאחרונה כולל את השורות הבאות, שמציינות שהכלי לבדיקת רישום הצמתים התחיל לפעול:
** Starting Node Registration Checker **
** Loading variables from kube-env **
** Sleeping for 7m to allow registration to complete **
אם הרישום של הצומת מצליח, הפלט כולל את ההודעות הבאות:
** Node ready and registered. **
** Completed running Node Registration Checker **
אם ההודעות האלה לא מופיעות, סימן שהרישום של הצומת נכשל, והכלי לבדיקת רישום הצומת יצר דוח שמסכם את הסיבות לכישלון הרישום. כדי לראות את הסיכום, מחפשים את ההודעה הנוספת הבאה:
** Here is a summary of the checks performed: **
מתחת להודעה הזו, מחפשים טבלה שדומה לטבלה הבאה:
------------------------------
Service DNS Reachable
------------------------------
LOGGING true true
GCR true true
GCS true true
Master N/A false
------------------------------
אם LOGGING, GCR או GCS מופיעים כבלתי ניתנים להשגה, כדאי לבדוק את הרשאות חשבון השירות לרישום צמתים וחיבור הרשת ל-Google APIs ולשירותים לרישום צמתים.
אם Master מופיע כלא ניתן להגיע, צריך לבדוק את הדרישות המוקדמות לחיבור לרשת עם מישור בקרה לרישום צמתים.
אחרי שפותרים את כל הבעיות שמונעות את ההרשמה של הצומת, אפשר לעבור אל השלמת ההרשמה של הצומת אחרי תיקון שורש הבעיה.
אם השלבים הקודמים לא עוזרים להבין למה הרישום של הצומת נכשל, כדאי לעיין במאמר בנושא איסוף מידע לצורך חקירה נוספת.
פתרון בעיות ברישום צמתים בלי הכלי לבדיקת רישום צמתים
השתמשו בשלבים האלה רק כמוצא אחרון אם כבר בדקתם את הדרישות המוקדמות לרישום מוצלח של צומת וניסיתם את כלי לבדיקת רישום צומת.
אחרי שפותרים את כל הבעיות שמונעות את ההרשמה של הצומת, משלימים את ההרשמה של הצומת אחרי שמתקנים את שורש הבעיה.
אם אף אחד משלבי הבדיקה בדף הזה לא מסביר למה רישום הצומת נכשל, כדאי לעיין במאמר איסוף מידע לצורך בדיקה נוספת.
בדיקת ההרשאות של חשבון השירות לרישום צמתים
לחשבון השירות שבו משתמשים הצמתים צריכות להיות ההרשאות הנדרשות לרישום הצמתים. כדי לוודא שאתם עומדים בדרישות המוקדמות האלה, עליכם לפעול לפי ההוראות הבאות:
בכרטיסייה Details של מופע מכונה וירטואלית, בקטע API and identity management, מוצאים את השם של חשבון השירות בשדה Service account. אם הצומת השתמש בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, השם יהיה בפורמט
PROJECT_NUMBER-compute@developer.gserviceaccount.com. לחשבון השירות הזה צריכות להיות ההרשאות המינימליות הנדרשות.בודקים אם יש אינדיקטורים להרשמה מוצלחת בפלט של המסוף הטורי. בכרטיסייה Details של מכונת ה-VM, בקטע Logs, לוחצים על יציאה טורית 1 (console).
אם המופע השתמש בחשבון שירות עם ההרשאות הנכונות, הפלט כולל את הפרטים הבאים:
Started Download and install k8s binaries and configurationsStarted Docker Application Container Engine.Started Configure kubernetes node.Reached target Kubernetes.
ההודעות האלה יופיעו במקומות שונים בפלט הזה. יכול להיות שיופיעו בהם גם חותמות זמן או פריטים אחרים שיפריעו לצפייה, כמו בדוגמה הבאה:
Starting [0;1;39mConfigure kubernetes node. אם אתם רואים את כל ההודעות האלה, סימן שחשבון השירות עומד בדרישות המוקדמות.אם ההודעות האלה לא מופיעות, יכול להיות שחשבון השירות שהוקצה למופע של המכונה הווירטואלית נמחק, הושבת או שאין לו את ההרשאות הנכונות.
בדיקת החיבור לרשת לממשקי API ולשירותים של Google לצורך רישום הצומת
בדיקת החיבור באמצעות גישת SSH
אם יש לכם גישת SSH למכונות וירטואליות בפרויקט, אתם יכולים גם לבדוק אם למכונה הווירטואלית יש חיבור לרשת ל-Google APIs ולשירותים של Google.
בכרטיסייה פרטים של מכונת ה-VM, לוחצים על SSH.
אחרי שמתחברים לשורת הפקודה של מכונת ה-VM, מריצים את הפקודה הבאה כדי לבדוק את החיבור ל-Google APIs ולשירותים של Google:
curl -m 5 -v https://storage.googleapis.com/generate_204אם החיבור מצליח, הפלט דומה לזה:
* Trying 142.250.148.128:443... * Connected to storage.googleapis.com (142.250.148.128) port 443 (#0) ... < HTTP/1.1 204 No Content < Content-Length: 0 < Cross-Origin-Resource-Policy: cross-origin < Date: Wed, 04 Jan 2023 00:58:41 GMT < * Connection #0 to host storage.googleapis.com left intactאם החיבור לא מצליח, הפלט דומה לזה:
* Trying 142.250.148.128:443... * Connection timed out after 5000 milliseconds * Closing connection 0 curl: (28) Connection timed out after 5000 millisecondsאם החיבור נכשל בגלל פסק זמן וכתובת ה-IP שמוחזרת נמצאת בטווח כתובות ה-IP
199.36.153.0/24, צריך לוודא שהאשכול עומד בדרישות הרשת לחיבור לשירותים ול-Google APIs. אם חלף הזמן הקצוב לתפוגה של החיבור וכתובת ה-IP שהוחזרה לא נמצאת בטווח כתובות ה-IP שצוין, צריך לבדוק אם כללי חומת האש חוסמים תעבורה יוצאת או אם הנתיבים לא מוגדרים בצורה נכונה ברשת ה-VPC של האשכול.משאירים את חיבור ה-SSH למופע של המכונה הווירטואלית פתוח ועוברים לקטע הבא.
בדיקת החיבור ללא גישת SSH באמצעות בדיקות קישוריות
אם אין לכם גישת SSH למכונות וירטואליות, תוכלו להשתמש בבדיקות קישוריות כדי לוודא שיש למכונה הווירטואלית חיבור ל-Google APIs ולשירותים של Google.
יוצרים ומריצים בדיקות קישוריות עם מופע מכונת ה-VM כמקור ו-
storage.googleapis.com TCP/443כיעד.משתמשים בתוצאות הבדיקה כדי לבדוק את הגדרות הרשת של האשכול.
בדיקת החיבור לרשת עם מישור הבקרה לצורך רישום הצומת
אם יש לכם גישת SSH למכונות וירטואליות בפרויקט, אתם יכולים לבדוק אם למכונה הווירטואלית יש חיבור לרשת למישור הבקרה של האשכול.
בכרטיסייה פרטים של מכונת ה-VM, לוחצים על SSH.
אחרי שמתחברים לשורת הפקודה של מכונת ה-VM, שומרים את נקודת הקצה של מישור הבקרה של האשכול כמשתנה סביבתי:
source <(sudo grep KUBERNETES_MASTER_NAME /home/kubernetes/kube-env)שליחת בקשת
GETלנקודת הקצה של מישור הבקרה:curl -k -m 5 https://${KUBERNETES_MASTER_NAME}/versionאם הפלט דומה לזה שמופיע בהמשך, מכונת ה-VM יכולה ליצור חיבור למישור הבקרה:
{ "major": "1", "minor": "24", "gitVersion": "v1.24.7-gke.900", "gitCommit": "e35c4457f66187eff006dda6d2c0fe12144ef2ec", "gitTreeState": "clean", "buildDate": "2022-10-26T09:25:34Z", "goVersion": "go1.18.7b7", "compiler": "gc", "platform": "linux/amd64" }אם הפלט דומה לזה, מכונת ה-VM לא יכולה ליצור חיבור למישור הבקרה:
curl: (28) Connection timed out after 5000 milliseconds
אם מכונת ה-VM לא מצליחה ליצור חיבור למישור הבקרה, כדאי לעיין בקטע בנושא מתן הרשאה לקישוריות של מישור הבקרה בשיטות המומלצות לשימוש ברשת GKE.
השלמת רישום הצומת אחרי תיקון שורש הבעיה
אחרי שפותרים את הבעיה שמונעת את רישום הצומת, אופן ההמשך תלוי בהקשר של הכשל:
- אם רישום הצומת נכשל במהלך יצירת האשכול, מוחקים את האשכול ומנסים שוב.
- אם רישום הצומת נכשל במהלך הגדלת הקיבולת באמצעות מידרוג אוטומטי של האשכול, צריך לחכות שמופעי VM ינסו להירשם שוב.
- אם רישום הצומת נכשל ביצירת מאגר הצמתים:
- אם המכונות הווירטואליות נוצרו, צריך להמתין עד שהמכונות הווירטואליות ינסו להירשם שוב.
- אם מופעי מכונות וירטואליות לא נוצרו, מוחקים את מאגר הצמתים ומנסים שוב.
- אם רישום הצומת נכשל בשינוי גודל האשכול, מריצים מחדש את הפקודה כדי להגדיל את גודל האשכול.
- אם רישום הצומת נכשל מחוץ להיקף של פעולה, למשל במהלך פעולת תיקון, צריך לחכות שהמכונות הווירטואליות ינסו להירשם שוב.
איסוף מידע לצורך בדיקה נוספת
אם לא הצלחתם לפתור את הבעיה ברישום הצומת, תוכלו לאסוף מידע נוסף כדי לעזור לצוות Cloud Customer Care בחקירה. לשם כך, צריך לפעול לפי ההוראות הבאות. כדי לבצע את השלבים האלה, צריך גישת SSH למכונות וירטואליות בפרויקט, ולהשתמש בכלי sosreport, שנכלל בתמונות COS.
איסוף מידע על תוצאות ניפוי הבאגים באמצעות sosreport.
לחלופין, אם הכלי
sosreportלא הורד לצמתים שלכם ואי אפשר להתקין אותו, אפשר לאסוף מידע על תוצאות ניפוי הבאגים באופן ידני על ידי הרצת הפקודות הבאות:# Check cloud-init logs for issues during early VM boot sudo journalctl -u cloud-init-local --no-pager sudo journalctl -u cloud-init --no-pager sudo journalctl -u cloud-final --no-pager sudo journalctl -u cloud-config --no-pager # Check kubelet status and logs sudo systemctl status kubelet sudo journalctl -u kubelet --no-pager # Check GKE node installation service status and logs sudo systemctl status kube-node-installation.service sudo journalctl -u kube-node-installation.service --no-pager # Check GKE node configuration service status and logs sudo systemctl status kube-node-configuration.service sudo journalctl -u kube-node-configuration.service --no-pagerאורזים את המידע הזה בקובץ ZIP ומצרפים אותו כששולחים בקשת תמיכה ל-Cloud Customer Care.
המאמרים הבאים
אם לא מצאתם פתרון לבעיה שלכם במסמכים, תוכלו להיעזר בקבלת תמיכה, כולל עצות בנושאים הבאים:
- פתיחת בקשת תמיכה באמצעות פנייה אל Cloud Customer Care.
- קבלת תמיכה מהקהילה על ידי פרסום שאלות ב-StackOverflow ושימוש בתג
google-kubernetes-engineכדי לחפש בעיות דומות. אפשר גם להצטרף לערוץ Slack#kubernetes-engineכדי לקבל תמיכה נוספת מהקהילה. - פתיחת באגים או בקשות להוספת תכונות באמצעות הכלי הציבורי למעקב אחר בעיות.