פתרון בעיות

בדף הזה מפורטים שלבים לפתרון בעיות ושגיאות נפוצות.

מופע שנכשל

הסטטוס 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.

  1. מריצים את הפקודה ifconfig כדי לראות את רשימת ממשקי הרשת הזמינים. פלט לדוגמה יכול להציג כמה ממשקי רשת, כמו eth0, docker0, ens8, lo וכו'.

  2. מפסיקים את daos_agent.

  3. עורכים את /etc/daos/daos_agent.yml כדי להחריג את ממשקי הרשת הלא רצויים. מבטלים את ההערה בשורה exclude_fabric_ifaces ומעדכנים את הערכים. הערכים שאתם כוללים הם ספציפיים למצב שלכם. לדוגמה:

    exclude_fabric_ifaces: ["docker0", "ens8", "lo"]
    
  4. מפעילים מחדש את 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
  • AttachVolume.Attach failed for volume "volume" : rpc error: code = InvalidArgument desc = an error occurred while preparing mount options: invalid mount options
העברת דגלים לא תקינים של הרכבה אל PersistentVolume או אל StorageClass. לפרטים נוספים, אפשר לעיין באפשרויות ההרכבה של dfuse שנתמכות.
NotFound
  • AttachVolume.Attach failed for volume "volume" : rpc error: code = NotFound desc = failed to get instance "instance"
המופע של Parallelstore לא קיים. מוודאים ש-volumeHandle של PersistentVolume נמצא בפורמט הנכון.

כשלים ב-MountVolume.MountDevice

אחרי שמצרפים את אמצעי האחסון לצומת, אמצעי האחסון יוע��ר ��צומת.

הפעולה הזו מתבצעת ב��ומת ��כוללת את השלב MountVolume.MountDevice מתוך kubelet.

קוד שגיאה אזהרה על אירוע ב-Pod פתרון
FailedPrecondition
  • MountVolume.MountDevice failed for volume "volume" : rpc error: code = FailedPrecondition desc = mounter pod "pod" expected to exist but was not found
השגיאה הזו נגרמת בדרך כלל בגלל מחיקה ידנית של ה-pod של הכלי להרכבת מערכות קבצים. מוחקים את כל עומסי העבודה שצורכים את ה-PVC ומבצעים פריסה מחדש. ייווצר Pod חדש של כלי להרכבת נפח אחסון.
DeadlineExceeded
  • MountVolume.MountDevice failed for volume "volume": rpc error: code = DeadlineExceeded desc = context deadline exceeded
יש בעיה בהתחברות למופע של Parallelstore. מוודאים שרשת ה-VPC ונקודות הגישה מוגדרות בצורה נכונה.

כשלים ב-MountVolume.SetUp

אחרי שהנפח מועבר לצומת, הוא יותקן ויועבר למאגר התגים ב-Pod. הפעולה הזו מתבצעת בצומת וכוללת את השלב MountVolume.SetUp ב-kubelet.

תושבת ל-Pod

קוד שגיאה אזהרה על אירוע ב-Pod פתרון
ResourceExhausted
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = ResourceExhausted desc = the sidecar container failed with error: signal: killed
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = ResourceExhausted desc = the sidecar container terminated due to OOMKilled, exit code: 137
התהליך של dfuse הסתיים, בדרך כלל בגלל מצב של חוסר זיכרון (OOM). מומלץ להגדיל את מגבלת הזיכרון של קונטיינר ה-sidecar באמצעות ההערה gke-parallelstore/memory-limit.

אם אתם לא בטוחים לגבי כמות הזיכרון שאתם רוצים להקצות ל-parallelstore-sidecar, מומלץ להגדיר את gke-parallelstore/memory-limit: "0" כדי לבטל את הגבלת הזיכרון שמוטלת על ידי Parallelstore.

בוטל
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = NodePublishVolume request is aborted due to rate limit
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = An operation with the given volume key key already exists
הפעולה של צירוף אמצעי האחסון בוטלה בגלל הגבלת קצב או פעולות קיימות. האזהרה הזו היא רגילה וצריכה להיות זמנית.
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 פתרון
בוטל
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = NodePublishVolume request is aborted due to rate limit
  • MountVolume.SetUp failed for volume "volume" : rpc error: code = Aborted desc = An operation with the given volume key key already exists
הפעולה של צירוף אמצעי האחסון בוטלה בגלל הגבלת קצב או פעולות קיימות. האזהרה הזו היא רגילה וצריכה להיות זמנית.
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 החדש לחיבור הקיים:

  1. אחזור הרשימה של טווחי ה-IP הקיימים עבור הפירינג:

    EXISTING_RANGES=$(
      gcloud services vpc-peerings list \
        --network=NETWORK_NAME \
        --service=servicenetworking.googleapis.com \
        --format="value(reservedPeeringRanges.list())"
    )
    
  2. לאחר מכן, מוסיפים את הטווח החדש לקישור:

    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 הבעייתי:

  1. לוחצים על הודעת השגיאה כדי לפתוח את חלונית התובנות לגבי השגיאה.

  2. בודקים את השם של ה-Pod בקטע Unpermissive Pod Disruption Budgets.

  3. אם ה-Pod הוא parallelstorecsi-mount, אפשר להתעלם מהשגיאה הזו כי היא לא תמנע את התחזוקה. בכל Pod אחר, בודקים את ה-PDB.