במסמך הזה מוסבר איך לפתור בעיות נפוצות בשילוב של IBM Spectrum Symphony עם Google Cloud. באופן ספציפי, במסמך הזה מפורטות הנחיות לפתרון בעיות שקשורות לשירות IBM Spectrum Symphony host factory, למחברים של ספקי Compute Engine ו-GKE ול-Symphony Operator ל-Kubernetes.
בעיות בשירות של מארח Symphony
הבעיות האלה קשורות לשירות המארח המרכזי של Symphony. אפשר למצוא את קובץ היומן הראשי של השירות הזה במיקום הבא ב-Linux:
$EGO_TOP/hostfactory/log/hostfactory.hostname.log
מגדירים את משתנה הסביבה $EGO_TOP כשטוענים את משתני הסביבה של המארח.
ב-IBM Spectrum Symphony, $EGO_TOP מציין את ספריית הבסיס של Enterprise Grid Orchestrator (EGO), שהוא מנהל המשאבים המרכזי של האשכול. נתיב ההתקנה שמוגדר כברירת מחדל ל-$EGO_TOP ב-Linux הוא בדרך כלל /opt/ibm/spectrumcomputing.
באשכול לא נוספים מכונות וירטואליות חדשות לעומסי עבודה בהמתנה
הבעיה הזו מתרחשת כשיש משימות בתור של Symphony, אבל מפעל המארחים לא מצליח להקצות מכונות וירטואליות (VM) חדשות כדי לנהל את העומס. קובץ היומן של host
factory לא מכיל הודעות SCALE-OUT.
הבעיה הזו מתרחשת בדרך כלל כשהבקשה של Symphony לא מוגדרת או מופעלת בצורה נכונה. כדי לפתור את הבעיה, צריך לבדוק את הסטטוס של מבקש ההרשאות שהוגדר כדי לוודא שהוא מופעל ושיש עומס עבודה בהמתנה.
מאתרים את קובץ ההגדרה של השולח. בדרך כלל הקובץ נמצא במיקום:
$HF_TOP/conf/requestors/hostRequestors.jsonמשתנה הסביבה
$HF_TOPמוגדר בסביבה שלכם כשמשתמשים בפקודה source. הערך הוא הנתיב לספריית ההתקנה ברמה העליונה של שירות המפעל של מארח IBM Spectrum Symphony.פותחים את הקובץ
hostRequestors.jsonומאתרים את הרשומהsymAinst. בקטע הזה, מוודאים שהפרמטרenabledמוגדר לערך1ושרשימת הספקים כוללת את השם של מופע הספק שהגדרתם Google Cloud .- בהגדרות של Compute Engine, ברשימת הספקים צריך להופיע השם של ספק Compute Engine שיצרתם בקטע הפעלת מופע הספק במהלך ההתקנה של ספק Compute Engine.
- בהגדרות GKE, ברשימת הספקים צריך להופיע השם של ספק GKE שיצרתם בשלב הפעלת מופע הספק במהלך ההתקנה של ספק GKE.
אחרי שמוודאים שהשולח של בקשת symAinst מופעל, בודקים אם יש לצרכן עומס עבודה בהמתנה שדורש הרחבה.
כדי לראות רשימה של כל הצרכנים והסטטוס של עומס העבודה שלהם:
egosh consumer listבפלט, מחפשים את הצרכן שמשויך לעומס העבודה ומאמתים שעומס העבודה נמצא בהמתנה. אם השולח מופעל ויש עומס עבודה בהמתנה, אבל שירות HostFactory לא יוזם בקשות להרחבת קנה מידה, צריך לבדוק את יומני השירות HostFactory כדי לראות אם יש שגיאות.
שירות פקטורי המארח לא מופעל
אם שירות המפעל של המארח לא פועל, צריך לבצע את השלבים הבאים כדי לפתור את הבעיה:
בודקים את הסטטוס של שירות
HostFactory:egosh service listבפלט, מאתרים את השירות
HostFactoryומוודאים שהסטטוס בשדהSTATEהואSTARTED.אם השירות
HostFactoryלא מופעל, מפעילים אותו מחדש:egosh service stop HostFactory egosh service start HostFactory
שגיאות אחרות ורישום ביומן
אם נתקלתם בשגיאות אחרות בשירות של יצירת מארחים, כדאי להגדיל את רמת הפירוט של היומנים כדי לקבל יומנים מפורטים יותר. כדי לעשות זאת, פועלים לפי השלבים הבאים:
פותחים את הקובץ
hostfactoryconf.jsonלעריכה. בדרך כלל, הקובץ נמצא במיקום הבא:$EGO_TOP/hostfactory/conf/מידע נוסף על הערך של משתנה הסביבה
$EGO_TOPזמין במאמר בעיות בשירות של מפעל המארחים של Symphony.מעדכנים את הערך של
HF_LOGLEVELמ-LOG_INFOל-LOG_DEBUG:{ ... "HF_LOGLEVEL": "LOG_DEBUG", ... }שומרים את הקובץ אחרי שמבצעים את השינוי.
כדי שהשינוי ייכנס לתוקף, מפעילים מחדש את שירות
HostFactory:egosh service stop HostFactory egosh service start HostFactory
אחרי ההפעלה מחדש, שירות HostFactory יוצר יומנים מפורטים יותר, שאפשר להשתמש בהם כדי לפתור בעיות מורכבות. אפשר לראות את היומנים האלה בקובץ היומן של פקטורי המארחים הראשי, שנמצא בנתיב $EGO_TOP/hostfactory/log/hostfactory.hostname.log ב-Linux.
בעיות שקשורות לספק של מפעל המארחים
הבעיות הבאות מתרחשות בסקריפטים של ספק host factory ב-Compute Engine או ב-Google Kubernetes Engine.
כדאי לבדוק את היומנים של הספק (hf-gce.log או hf-gke.log) כדי לראות הודעות שגיאה מפורטות. המיקום של הקבצים hf-gce.log ו-hf-gke.log נקבע על ידי המשתנה LOGFILE שמוגדר בקובץ התצורה של הספק בקטע הפעלת מופע הספק.
המכונה הווירטואלית או ה-pod לא הוקצו
הבעיה הזו עשויה להתרחש אחרי שביומנים של ספק המפעל המארח מופיעה קריאה לסקריפט requestMachines.sh, אבל המשאב לא מופיע בפרויקט Google Cloud.
כדי לפתור את הבעיה, בצע את הצעדים הבאים:
בודקים את יומני הסקריפט של הספק (
hf-gce.logאוhf-gke.log) כדי לראות אם יש הודעות שגיאה מ- Google Cloud API. המיקום של הקבציםhf-gce.logו-hf-gke.logנקבע על ידי המשתנהLOGFILEשמוגדר בקובץ התצורה של הספק בקטע הפעלת מופע הספק.מוודאים שלחשבון השירות יש את הרשאות ה-IAM הנכונות:
- פועלים לפי ההוראות במאמר הצגת הגישה הנוכחית.
- מוודאים שלחשבון השירות יש את תפקיד ה-IAM Compute Instance Admin (v1) (אדמין מכונות של Compute (v1)) (roles/compute.instanceAdmin.v1) בפרויקט. מידע נוסף על הקצאת תפקידים מופיע במאמר ניהול הגישה לפרויקטים, לתיקיות ולארגונים.
כדי לוודא שהפרמטרים של Compute Engine בתבנית המארח תקינים, צריך לבדוק את הדברים הבאים:
הפרמטרים של תבנית המארח צריכים להיות בקובץ
gcpgceinstprov_templates.jsonשיצרתם כשהגדרתם מכונה של ספק במהלך ההתקנה של ספק Compute Engine. הפרמטרים הנפוצים ביותר שצריך לאמת הםgcp_zoneו-gcp_instance_group.מוודאים שקבוצת המופעים שהוגדרה על ידי הפרמטר
gcp_instance_groupקיימת. כדי לאשר את קבוצת המכונות, פועלים לפי ההוראות במאמר הצגת המאפיינים של קבוצת מכונות לניהול מופעים, באמצעות הערכים של שם קבוצת המכונותgcp_instance_groupואזור הזמינותgcp_zoneמקובץ התבנית.
פוד נתקע במצב Pending או Error ב-GKE
הבעיה הזו יכולה לקרות אחרי שביומן hf-gke מופיעה יצירה של משאב GCPSymphonyResource, אבל ה-Pod התואם באשכול GKE אף פעם לא מגיע למצב Running, ויכול להיות שיוצג סטטוס כמו Pending, ImagePullBackOff או CrashLoopBackOff.
הבעיה הזו מתרחשת אם יש בעיה באשכול Kubernetes, כמו שם לא תקין של קובץ אימג' של קונטיינר, מחסור במשאבי מעבד (CPU) או זיכרון, או הגדרה שגויה של נפח או הגדרות רשת.
כדי לפתור את הבעיה, משתמשים ב-kubectl describe כדי לבדוק את האירועים של המשאב המותאם אישית ושל ה-Pod, ולזהות את שורש הבעיה:
kubectl describe gcpsymphonyresource RESOURCE_NAME
kubectl describe pod POD_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
RESOURCE_NAME: שם המשאב. -
POD_NAME: שם ה-Pod.
פתרון בעיות שקשורות לאופרטור Kubernetes
אופרטור Kubernetes מנהל את מחזור החיים של פוד Symphony. הקטעים הבאים יכולים לעזור לכם לפתור בעיות נפוצות שאתם עשויים להיתקל בהן עם האופרטור ועם המשאבים האלה.
אבחון בעיות בשדות של סטטוס המשאבים
אופרטור Kubernetes מנהל עומסי עבודה של Symphony ב-GKE באמצעות שני סוגים עיקריים של משאבים:
- המשאב
GCPSymphonyResource(GCPSR) מנהל את מחזור החיים של פודים של מחשוב לעומסי עבודה של Symphony. - המשאב
MachineReturnRequest(MRR) מטפל בהחזרה ובניקוי של משאבי מחשוב.
אפשר להשתמש בשדות הסטטוס האלה כדי לאבחן בעיות במשאב GCPSymphonyResource
resource:
-
phase: השלב הנוכחי במחזור החיים של המשאב. האפשרויות הןPending,Running,WaitingCleanupאוCompleted. -
availableMachines: מספר פודים של מחשוב שמוכנים. -
conditions: תנאי סטטוס מפורטים עם חותמות זמן. -
returnedMachines: רשימה של פודים שהוחזרו.
אפשר להשתמש בשדות הסטטוס האלה כדי לאבחן בעיות במשאב MachineReturnRequest
resource:
-
phase: השלב הנוכחי של בקשת ההחזרה. האפשרויות הןPending,InProgress,Completed,FailedאוPartiallyCompleted. -
totalMachines: המספר הכולל של המכונות שיוחזרו. returnedMachines: מספר המכונות שהוחזרו בהצלחה.-
failedMachines: מספר המכונות שהחזרתן נכשלה. machineEvents: פרטי הסטטוס של כל מכונה.
משאב GCPSymphonyResource תקוע במצב Pending
הבעיה הזו מתרחשת כשהמשאב GCPSymphonyResource נשאר במצב Pending והערך של availableMachines לא עולה.
הבעיה הזו יכולה לקרות בגלל אחת מהסיבות הבאות:
- קיבולת הצמתים באשכול לא מספיקה.
- בעיות בשליפת קובץ אימג' של קונטיינר.
- מגבלות על מכסת משאבים.
כדי לפתור את הבעיה:
כדאי לבדוק את הסטטוס של ה-pods כדי לזהות בעיות בשליפת תמונות או בהקצאת משאבים:
kubectl describe pods -n gcp-symphony -l symphony.requestId=REQUEST_IDמחליפים את
REQUEST_IDבמזהה הבקשה.בודקים את הצמתים כדי לוודא שיש מספיק קיבולת:
kubectl get nodes -o wideיכול להיות שהסטטוס של תרמילים יהיה
Pending. הבעיה הזו מתרחשת בדרך כלל כשצריך להגדיל את קובץ ה-Kubernetes, והתהליך נמשך יותר זמן מהצפוי. עוקבים אחרי הצמתים כדי לוודא שמישור הבקרה יכול להתרחב.
התרמילים לא מוחזרים
הבעיה הזו מתרחשת כשיוצרים MachineReturnRequest (הכנסה חודשית חוזרת), אבל מספר returnedMachines לא גדל.
הבעיה הזו יכולה לקרות מהסיבות הבאות:
- הפודים תקועים במצב
Terminating. - יש בעיות בחיבור הצמתים.
כדי לפתור את הבעיה:
בודקים אם יש פודים תקועים במצב
Terminating:kubectl get pods -n gcp-symphony --field-selector=status.phase=Terminatingכדי לקבל פרטים על תהליך ההחזרה, אפשר לתאר את
MachineReturnRequest:kubectl describe mrr MRR_NAME -n gcp-symphonyמחליפים את
MRR_NAMEבשם שלMachineReturnRequest.מוחקים ידנית את אובייקט המשאב המותאם אישית. המחיקה הזו מפעילה את הלוגיקה של הניקוי הסופי:
kubectl delete gcpsymphonyresource RESOURCE_NAMEמחליפים את
RESOURCE_NAMEבשם של משאבGCPSymphonyResource.
מספר גבוה של מכונות שנכשלו ב-MachineReturnRequest
הבעיה הזו מתרחשת כשמספר הפריטים failedMachines בסטטוס MachineReturnRequest
גדול מ-0. הבעיה הזו יכולה לקרות מהסיבות הבאות:
- הזמן שהוקצב למחיקת ה-Pod פג.
- צומת לא זמין.
כדי לפתור את הבעיה:
בודקים את הסטטוס
machineEventsבMachineReturnRequestכדי לראות הודעות שגיאה ספציפיות:kubectl describe mrr MRR_NAME -n gcp-symphonyחפשו אירועים של כשל בצומת או בעיות בביצועים של מישור הבקרה:
כדי לקבל את הסטטוס של כל הצמתים:
kubectl get nodes -o wideבדיקת צומת ספציפי:
kubectl describe node NODE_NAME
התרמילים לא נמחקים
הבעיה הזו מתרחשת כשפודים שנמחקו נתקעים במצב Terminating או Error
הבעיה הזו יכולה לקרות מהסיבות הבאות:
- מישור בקרה או מפעיל עמוס מדי, שעלול לגרום לפסק זמן או לאירועי הגבלת קצב של API.
- מחיקה ידנית של משאב האב
GCPSymphonyResource.
כדי לפתור את הבעיה:
בודקים אם משאב האב
GCPSymphonyResourceעדיין זמין ולא במצבWaitingCleanup:kubectl describe gcpsymphonyresource RESOURCE_NAMEאם משאב ההורה
GCPSymphonyResourceכבר לא נמצא במערכת, צריך להסיר את ה-finalizer מה-pod או מה-pods באופן ידני. הפונקציה הסופית אומרת ל-Kubernetes לחכות שאופרטור Symphony ישלים את משימות הניקוי שלו לפני ש-Kubernetes מוחק את ה-pod באופן מלא. קודם כול, בודקים את הגדרת ה-YAML כדי למצוא את ה-finalizer:kubectl get pods -n gcp-symphony -l symphony.requestId=REQUEST_ID -o yamlמחליפים את
REQUEST_IDבמזהה הבקשה שמשויך ל-Pods.בפלט, מחפשים את השדה finalizers בקטע metadata. הפלט שיוצג אמור להיות דומה לקטע הקוד הבא:
metadata: ... finalizers: - symphony-operator/finalizerכדי להסיר ידנית את ה-finalizer מהפוד או מהפודים, משתמשים בפקודה
kubectl patch:kubectl patch pod -n gcp-symphony -l symphony.requestId=REQUEST_ID --type json -p '[{"op": "remove", "path": "/metadata/finalizers", "value": "symphony-operator/finalizer"}]'מחליפים את
REQUEST_IDבמזהה הבקשה שמשויך ל-Pods.
משאבי Symphony ישנים לא נמחקים אוטומטית מאשכול GKE
אחרי שסיימתם עומס עבודה ו-GKE הפסיק את הפודים שלו, האובייקטים המשויכים GCPSymphonyResource ו-MachineReturnRequest נשארים באשכול GKE שלכם למשך זמן ארוך יותר מפרק הזמן הצפוי של 24 שעות לניקוי.
הבעיה הזו מתרחשת כשבאובייקט GCPSymphonyResource חסר התנאי Completed status הנדרש. תהליך הניקוי האוטומטי של האופרטור תלוי בסטטוס הזה כדי להסיר את האובייקט. כדי לפתור את הבעיה, מבצעים את השלבים הבאים:
בודקים את הפרטים של משאב
GCPSymphonyResourceהרלוונטי:kubectl get gcpsr GCPSR_NAME -o yamlמחליפים את
GCPSR_NAMEבשם של משאבGCPSymphonyResourceעם הבעיה הזו.בודקים את התנאים של אחד מסוג
Completedעם סטטוסTrue:status: availableMachines: 0 conditions: - lastTransitionTime: "2025-04-14T14:22:40.855099+00:00" message: GCPSymphonyResource g555dc430-f1a3-46bb-8b69-5c4c481abc25-2pzvc has no pods. reason: NoPods status: "True" # This condition will ensure this type: Completed # custom resource is cleaned up by the operator phase: WaitingCleanup returnedMachines: - name: g555dc430-f1a3-46bb-8b69-5c4c481abc25-2pzvc-pod-0 returnRequestId: 7fd6805f-9a00-41f9-afe9-c38aa35002db returnTime: "2025-04-14T14:22:39.373216+00:00"אם התנאי הזה לא מופיע בפרטי
GCPSymphonyResource, אבל במקומו מופיעphase: WaitingCleanup, סימן שאירועCompletedאבד.בודקים אם יש תרמילים שמשויכים ל-
GCPSymphonyResource:kubectl get pods -l symphony.requestId=REQUEST_IDמחליפים את
REQUEST_IDבמזהה הבקשה.אם לא קיימים פודים, מוחקים בבטחה את המשאב
GCPSymphonyResource:kubectl delete gcpsr GCPSR_NAMEמחליפים את
GCPSR_NAMEבשם שלGCPSymphonyResource.אם הפודים נוצרו לפני שמחקתם את
GCPSymphonyResource, אתם צריכים למחוק אותם. אם הפודים עדיין קיימים, פועלים לפי השלבים שמפורטים בקטע הפודים לא נמחקים.
ה-Pod לא מצטרף לאשכול Symphony
הבעיה הזו מתרחשת כש-pod פועל ב-GKE, אבל הוא לא מופיע כמארח תקין באשכול Symphony.
הבעיה הזו מתרחשת אם תוכנת Symphony שפועלת בתוך ה-pod לא מצליחה להתחבר למארח הראשי של Symphony ולהירשם אליו. הבעיה הזו נובעת לרוב מבעיות בקישוריות לרשת או מהגדרה שגויה של לקוח Symphony בתוך הקונטיינר.
כדי לפתור את הבעיה, צריך לבדוק את היומנים של שירותי Symphony שפועלים בתוך ה-Pod.
משתמשים ב-SSH או ב-exec כדי לגשת ל-Pod ולהציג את היומנים:
kubectl exec -it POD_NAME -- /bin/bashמחליפים את
POD_NAMEבשם של ה-Pod.אם יש לכם קובץ sh בתוך ה-pod, היומנים של שדי ה-EGO וה-LIM נמצאים בספרייה
$EGO_TOP/kernel/log. משתנה הסביבה$EGO_TOPמצביע על הרמה הבסיסית (root) של ההתקנה של IBM Spectrum Symphony:cd $EGO_TOP/kernel/logמידע נוסף על הערך של משתנה הסביבה
$EGO_TOPזמין במאמר בעיות בשירות Symphony host factory.בודקים את היומנים כדי לזהות שגיאות בהגדרות או ברשת שחוסמות את החיבור מ-GKE pod אל Symphony primary pod המקומי.
בקשת החזרת מכונה נכשלת
הבעיה הזו יכולה להתרחש במהלך פעולות של הקטנת הקיבולת כשיוצרים משאב מותאם אישית MachineReturnRequest, אבל האובייקט נתקע והאופרטור לא מסיים את הפוד התואם של Symphony.
כשל בלוגיקה של ה-finalizer של האופרטור מונע את המחיקה הנקייה של ה-pod ושל המשאב המותאם אישית שמשויך אליו. הבעיה הזו עלולה לגרום למשאבים יתומים ולעלויות מיותרות.
כדי לפתור את הבעיה, צריך למחוק ידנית את המשאב המותאם אישית, מה שיפעיל את לוגיקת הניקוי של האופרטור:
kubectl delete gcpsymphonyresource RESOURCE_NAME
מחליפים את RESOURCE_NAME בשם המשאב.