בדף הזה מפורטים שלבים לפתרון בעיות ושגיאות נפוצות.
מופע שנכשל
הסטטוס FAILED מציין שהנתונים של המופע אבדו וצריך למחוק את המופע.
ממשיכים לחייב על מופעים של Parallelstore במצב FAILED עד שהם נמחקים.
כדי לאחזר את מצב המכונה, פועלים לפי ההוראות במאמר ניהול מכונות: אחזור מכונה.
כדי למחוק מכונה, קוראים את המאמר ניהול מכונות: מחיקת מכונה.
פסק זמן במהלך הטמעה של dfuse או בדיקות רשת
אם כשמפעילים את מכונת Parallelstore, פג הזמן הקצוב לתגובה של הפקודה dfuse -m, או אם פג הזמן הקצוב לתגובה של פקודות לבדיקת הרשת כמו self_test או daos health net-test, יכול להיות שהבעיה היא בקישוריות לרשת.
כדי לאמת את הקישוריות לשרתי Parallelstore, מריצים את הפקודה
self_test --use-daos-agent-env -r 1
אם בבדיקה מופיעה בעיית חיבור, יכולות להיות שתי סיבות:
יכול להיות שהסוכן של DAOS בחר את ממשק הרשת הלא נכון במהלך ההגדרה
יכול להיות שתצטרכו להחריג ממשקי רשת שלא יכולים להגיע לכתובות ה-IP ברשימה access_points.
מריצים את הפקודה
ifconfigכדי לראות את רשימת ממשקי הרשת הזמינים. פלט לדוגמה יכול להציג כמה ממשקי רשת, כמוeth0,docker0,ens8,loוכו'.מפסיקים את daos_agent.
עורכים את
/etc/daos/daos_agent.ymlכדי להחריג את ממשקי הרשת הלא רצויים. מבטלים את ההערה בשורהexclude_fabric_ifacesומעדכנים את הערכים. הערכים שאתם כוללים הם ספציפיים למצב שלכם. לדוגמה:exclude_fabric_ifaces: ["docker0", "ens8", "lo"]מפעילים מחדש את daos_agent.
כתובת ה-IP של המופע או של הלקוח מתנגשת עם כתובות IP פנימיות
מופעים ולקוחות של Parallelstore לא יכולים להשתמש בכתובת IP מטווח תת-הרשת 172.17.0.0/16. מידע נוסף זמין במאמר בנושא בעיות מוכרות.
ENOSPC כשקיבולת המופע לא מנוצלת
אם המופע שלכם משתמש בפסיקה מינימלית או בפסיקה מאוזנת (ברירת המחדל), יכול להיות שתיתקלו בשגיאות ENOSPC גם אם הקבצים הקיימים לא משתמשים בכל הקיבולת של המופע. הבעיה הזו עלולה לקרות כשכותבים קבצים גדולים, בדרך כלל גדולים מ-8GB, או כשמייבאים קבצים כאלה מ-Cloud Storage.
כדי לצמצם את הסיכוי לשגיאות האלה, כדאי להשתמש בשיטה של חלוקת קבצים לרצועות (file striping) באופן מקסימלי.
פתרון בעיות ב-Google Kubernetes Engine
בקטע הבא מפורטות כמה בעיות נפוצות ופעולות לפתרון שלהן.
Transport endpoint is not connected בתרמילי Pod של עומסי עבודה
השגיאה הזו נובעת מסיום השימוש ב-dfuse. ברוב המקרים, dfuse הופסק בגלל חוסר זיכרון. משתמשים בהערות של Pod
gke-parallelstore/[cpu-limit|memory-limit] כדי להקצות יותר משאבים ל-Parallelstore sidecar container. אפשר להגדיר את הערך gke-parallelstore/memory-limit: "0" כדי להסיר את מגבלת הזיכרון של ה-sidecar אם אתם לא יודעים כמה זיכרון אתם רוצים להקצות לו. שימו לב שהאפשרות הזו פועלת רק עם אשכולות רגילים. באשכולות עם Autopilot, אי אפשר להשתמש בערך 0 כדי לבטל את ההגדרה של מגבלות ודרישות המשאבים של קונטיינר ה-sidecar. צריך להגדיר במפורש מגבלת משאבים גדולה יותר עבור קונטיינר ה-sidecar.
אחרי שמשנים את ההערות, צריך להפעיל מחדש את ה-Pod של עומס העבודה. הוספת הערות לעומס עבודה פעיל לא משנה באופן דינמי את הקצאת המשאבים.
אזהרות על אירועים ב-Pod
אם אי אפשר להפעיל ��ת ה-Pods של עומס העבודה, צריך לבדוק את אירועי ה-Pod:
kubectl describe pod POD_NAME -n NAMESPACE
הפתרונות הבאים מתייחסים לשגיאות נפוצות.
בעיות בהפעלת מנהל התקן CSI
אלה שגיאות נפוצות בהפעלת מנהל התקן CSI:
MountVolume.MountDevice failed for volume "volume" : kubernetes.io/csi:
attacher.MountDevice failed to create newCsiDriverClient:
driver name parallelstore.csi.storage.gke.io not found in the list of registered CSI drivers
MountVolume.SetUp failed for volume "volume" : kubernetes.io/csi:
mounter.SetUpAt failed to get CSI client:
driver name parallelstore.csi.storage.gke.io not found in the list of registered CSI drivers
האזהרות האלה מציינות שדרייבר ה-CSI לא מופעל או לא פועל.
אם רק לאחרונה בוצע שינוי בגודל האשכול, עדכון או שדרוג, האזהרה הזו היא נורמלית וזמנית. נדרשות כמה דקות עד שרכיבי ה-Pod של מנהל התקן ה-CSI יהיו פעילים אחרי פעולות באשכול.
אחרת, צריך לוודא שמנהל התקן CSI מופעל באשכול. פרטים נוספים זמינים במאמר בנושא הפעלת מנהל התקן CSI. אם ה-CSI מופעל, בכל צומת מוצג Pod בשם parallelstore-csi-node-id שפועל.
AttachVolume.Attach failures
אחרי שה-Pod מתוזמן לצומת, אמצעי האחסון יצורף לצומת וייווצר ה-Pod של הכלי לצירוף אמצעי אחסון אם משתמשים בצירוף אמצעי אחסון לצומת.
הפעולה הזו מתבצעת בשלט וכוללת את השלב AttachVolume מתוך attachdetach-controller.
| קוד שגיאה | אזהרה על אירוע ב-Pod | פתרון |
| InvalidArgument |
|
העברת דגלים לא תקינים של הרכבה אל PersistentVolume או אל StorageClass. לפרטים נוספים, אפשר לעיין באפשרויות ההרכבה של dfuse שנתמכות. |
| NotFound |
|
המופע של Parallelstore לא קיים. מוודאים ש-volumeHandle של PersistentVolume נמצא בפורמט הנכון. |
כשלים ב-MountVolume.MountDevice
אחרי שמצרפים את אמצעי האחסון לצומת, אמצעי האחסון יוע��ר ��צומת.
הפעולה הזו מתבצעת ב��ומת ��כוללת את השלב MountVolume.MountDevice מתוך kubelet.
| קוד שגיאה | אזהרה על אירוע ב-Pod | פתרון |
| FailedPrecondition |
|
השגיאה הזו נגרמת בדרך כלל בגלל מחיקה ידנית של ה-pod של הכלי להרכבת מערכות קבצים. מוחקים את כל עומסי העבודה שצורכים את ה-PVC ומבצעים פריסה מחדש. ייווצר Pod חדש של כלי להרכבת נפח אחסון. |
| DeadlineExceeded |
|
יש בעיה בהתחברות למופע של Parallelstore. מוודאים שרשת ה-VPC ונקודות הגישה מוגדרות בצורה נכונה. |
כשלים ב-MountVolume.SetUp
אחרי שהנפח מועבר לצומת, הוא יותקן ויועבר למאגר התגים ב-Pod. הפעולה הזו מתבצעת בצומת וכוללת את השלב MountVolume.SetUp ב-kubelet.
תושבת ל-Pod
| קוד שגיאה | אזהרה על אירוע ב-Pod | פתרון |
| ResourceExhausted |
|
התהליך של dfuse הסתיים, בדרך כלל בגלל מצב של חוסר זיכרון (OOM). מומלץ להגדיל את מגבלת הזיכרון של קונטיינר ה-sidecar באמצעות ההערה gke-parallelstore/memory-limit.
אם אתם לא בטוחים לגבי כמות הזיכרון שאתם רוצים להקצות ל-parallelstore-sidecar, מומלץ להגדיר את |
| בוטל |
|
הפעולה של צירוף אמצעי האחסון בוטלה בגלל הגבלת קצב או פעולות קיימות. האזהרה הזו היא רגילה וצריכה להיות זמנית. |
| InvalidArgument |
MountVolume.SetUp failed for volume "volume" : rpc
error: code = InvalidArgument desc =
|
אם סיפקתם ארגומנטים לא תקינים ב-StorageClass או ב-PersistentVolume, יומן השגיאות יציין את השדות עם הארגומנטים הלא תקינים. במקרה של הקצאת נפח אחסון דינמית, בודקים את Storage Class. במקרה של הקצאה סטטית, בודקים את Persistent Volume. |
| FailedPrecondition |
MountVolume.SetUp failed for volume "volume" : rpc
error: code = FailedPrecondition desc = can not find the sidecar
container in Pod spec
|
הקונטיינר של Parallelstore sidecar לא הוזרק. בודקים שההערה gke-parallelstore/volumes: "true" Pod מוגדרת בצורה נכונה.
|
תושבת לצומת
| קוד שגיאה | אזהרה על אירוע ב-Pod | פתרון |
| בוטל |
|
הפעולה של צירוף אמצעי האחסון בוטלה בגלל הגבלת קצב או פעולות קיימות. האזהרה הזו היא רגילה וצריכה להיות זמנית. |
| InvalidArgument |
MountVolume.SetUp failed for volume "volume" : rpc
error: code = InvalidArgument desc =
|
אם סיפקתם ארגומנטים לא תקינים ב-StorageClass או ב-Persistent Volume, ביומן השגיאות יצוינו השדות עם הארגומנטים הלא תקינים. במקרה של הקצאת נפח אחסון דינמית, בודקים את Storage Class. במקרה של הקצאה סטטית, בודקים את Persistent Volume. |
| FailedPrecondition |
MountVolume.SetUp failed for volume "volume" : rpc
error: code = FailedPrecondition desc = mounter pod expected to exist but was not found
|
ה-pod של Parallelstore mounter לא קיים. אם ה-Pod של הכלי להרכבת מערכות קבצים נמחק בטעות, צריך ליצור מחדש את כל עומסי העבודה כדי להפעיל את היצירה מחדש. |
| DeadlineExceeded |
MountVolume.SetUp failed for volume "volume" : rpc
error: code = DeadlineExceeded desc = timeout waiting for mounter pod gRPC server to become available
|
שרת ה-gRPC של ה-Pod של הכלי להרכבת מערכות קבצים לא הופעל. בודקים אם יש שגיאות ביומנים של ה-pod של הכלי להרכבת מערכות קבצים. |
פתרון בעיות ברשתות VPC
אין הרשאה להוסיף קישור בין רשתות עבור השירות servicenetworking.googleapis.com
ERROR: (gcloud.services.vpc-peerings.connect) User [$(USER)] does not have
permission to access services instance [servicenetworking.googleapis.com]
(or it may not exist): Permission denied to add peering for service
'servicenetworking.googleapis.com'.
השגיאה הזו מציינת שאין לכם הרשאת servicenetworking.services.addPeering
IAM בחשבון המשתמש.
במאמר בקרת גישה באמצעות IAM מוסבר איך להוסיף לחשבון אחד מהתפקידים הבאים:
roles/compute.networkAdminאוroles/servicenetworking.networksAdmin
אי אפשר לשנות את הטווחים שהוקצו ב-CreateConnection
ERROR: (gcloud.services.vpc-peerings.connect) The operation
"operations/[operation_id]" resulted in a failure "Cannot modify allocated
ranges in CreateConnection. Please use UpdateConnection.
השגיאה הזו מוחזרת אם כבר יצרתם vpc-peering ברשת הזו עם טווחי כתובות IP שונים. יש שתי אפשרויות לפתרון:
מחליפים את טווחי כתובות ה-IP הקיימים:
gcloud services vpc-peerings update \
--network=NETWORK_NAME \
--ranges=IP_RANGE_NAME \
--service=servicenetworking.googleapis.com \
--force
אפשר גם להוסיף את טווח כתובות ה-IP החדש לחיבור הקיים:
אחזור הרשימה של טווחי ה-IP הקיימים עבור הפירינג:
EXISTING_RANGES=$( gcloud services vpc-peerings list \ --network=NETWORK_NAME \ --service=servicenetworking.googleapis.com \ --format="value(reservedPeeringRanges.list())" )לאחר מכן, מוסיפים את הטווח החדש לקישור:
gcloud services vpc-peerings update \ --network=NETWORK_NAME \ --ranges=$EXISTING_RANGES,IP_RANGE_NAME \ --service=servicenetworking.googleapis.com
טווח כתובות ה-IP מוצה
יצירת המופע עלולה להיכשל עם השגיאה הבאה:
ERROR: (gcloud.alpha.Parallelstore.instances.create) FAILED_PRECONDITION: Invalid
resource state for "NETWORK_RANGES_NOT_AVAILABLE": IP address range exhausted
אם מופיעה הודעת השגיאה הזו, צריך לפעול לפי המדריך ל-VPC כדי ליצור מחדש את טווח כתובות ה-IP או להרחיב את טווח כתובות ה-IP הקיים.
אם יוצרים מחדש מכונה וירטואלית של Parallelstore, צריך ליצור מחדש את טווח כתובות ה-IP במקום להרחיב אותו.
התחזוקה נחסמה בגלל תקציב לשיבוש Pod מגביל
יכול להיות שיוצג במסוף Google Cloud הודעת השגיאה הבאה, שמציינת שלא ניתן להמשיך בתחזוקה כי תקציב לשיבוש Pod (PDB) מוגדר כך שמאפשר אפס פינויים של Pod:
GKE can't perform maintenance because the Pod Disruption Budget allows for 0 Pods evictions.
אם מוצגת לכם הודעת השגיאה הזו, אתם יכולים לפעול לפי השלבים הבאים כדי לזהות את ה-Pod הבעייתי:
לוחצים על הודעת השגיאה כדי לפתוח את חלונית התובנות לגבי השגיאה.
בודקים את השם של ה-Pod בקטע Unpermissive Pod Disruption Budgets.
אם ה-Pod הוא
parallelstorecsi-mount, אפשר להתעלם מהשגיאה הזו כי היא לא תמנע את התחזוקה. בכל Pod אחר, בודקים את ה-PDB.