פתרון בעיות ב-Kf

אפשר להיעזר בשלבים האלה כדי לפתור בעיות שונות שיכולות לקרות כשמריצים את Kf.

כשלים בהתקנה של Kf

שגיאה מהשרת (בקשה שגויה): תו לא חוקי

אם השגיאה הזו מופיעה כשמגדירים ברירות מחדל של config, סביר להניח שהערך של משתנה הסביבה ${DOMAIN} שמשמש בפקודה כולל תו '$' עם escape. צריך להשתמש במירכאות בודדות כדי להגדיר דומיין עם שם רווח או החלפה אחרת:

Error from server (BadRequest): invalid character '$' in string escape code

שגיאות באובייקטים של Kf Kubernetes

כדי לפתור בעיות באובייקטים של Kf Kubernetes, פועלים לפי ההוראות הבאות.

  1. כדי למצוא את השם של סוג משאב Kubernetes שרוצים לפתור בו בעיות, מציגים את כל משאבי Kf:

    kubectl api-resources --api-group=kf.dev

    פלט לדוגמה:

    NAME                      SHORTNAMES   APIGROUP   NAMESPACED   KIND
    apps                                   kf.dev     true         App
    builds                                 kf.dev     true         Build
    clusterservicebrokers                  kf.dev     false        ClusterServiceBroker
    routes                                 kf.dev     true         Route
    servicebrokers                         kf.dev     true         ServiceBroker
    serviceinstancebindings                kf.dev     true         ServiceInstanceBinding
    serviceinstances                       kf.dev     true         ServiceInstance
    spaces                                 kf.dev     false        Space
    
  2. משיגים את המופע של המשאב שרוצים לפתור בו בעיות באמצעות kubectl. אם האובייקט לא נמצא במרחב שמות, לא צריך להוסיף את הדגל -n:

    kubectl get api-resource-name.kf.dev object-name -n space-name -o yaml

    לדוגמה:

    kubectl get apps.kf.dev my-app -n my-space -o yaml
    
  3. בוחרים את הבעיה בכרטיסיות שלמטה:

    האובייקט לא מסתנכרן

    1. בודקים את הערך של metadata.generation. המספר הזה גדל בכל פעם שהאובייקט מתעדכן. אם המספר גבוה במיוחד, סביר להניח ששני בקרי Kubernetes מנסים להשתלט על האובייקט. בודקים את האשכול כדי לראות אם מדיניות כלשהי חלה על האובייקט, מה שעלול לשנות אותו מהמצב הרצוי.
    2. בודקים אם מרחב השמות שאליו שייך האובייקט נמחק. אם כן, יכול להיות שהאובייקט לא יסונכרן.
    3. בודקים שהשדה status.observedGeneration קיים. אם לא, יכול להיות שהבקר עדיין לא הופעל על האובייקט. מאמתים שהאשכול והבקרים תקינים באמצעות kf doctor.
    4. בודקים שהשדה metadata.generation תואם לשדה status.observedGeneration. אם לא, צריך לוודא שהאשכול והבקרים תקינים באמצעות kf doctor.
    5. בודקים אם יש כשלים ברשימה status.conditions בהשוואה לרשימה הזו של סיבות נפוצות לשגיאות:

      • NotOwned: קיים משאב אחר באשכול או במרחב השמות כמו זה שהאובייקט הזה מנסה ליצור. קוראים את ההודעה כדי למצוא את השם הכפול, ומשנים את השם של המשאב או של אובייקט Kf שגורם לבעיה.
      • TemplateError: יש הגדרה שגויה במפרט של משאב Kf או בהגדרת Kf שגורמת לתיאום שגוי של משאב הצאצא. מאמתים את ההגדרות של אובייקט Kf ושל מרחב Kf.
      • CacheOutdated: בקר Kf לא מקבל עדכונים מ-Kubernetes מספיק מהר. בודקים את התקינות של אשכול Kubernetes.
      • ReconciliationError: בקר Kf לא יכול ליצור את משאב הצאצא הנדרש. בודקים שהאשכול תקין, ש-Kf פועל ושהמדיניות לא מונעת מ-Kf ליצור את האובייקט שמצוין בהודעה.

    האובייקט לא נמחק

    1. בודקים שהמאפיין metadata.deletionTimestamp של האובייקט הוגדר. אם לא הוגדר, המחיקה המבוקשת לא תתבצע.
    2. בודקים שהתאריך metadata.deletionTimestamp של האובייקט חל בעבר. אם התאריך הוא בעתיד, יכול להיות שהאובייקט לא יימחק.
    3. בודקים אם קיימת רשימה של metadata.finalizers באובייקט. אם יש finalizers, האובייקט צריך לחכות עד שהם יוסרו לפני שהוא יימחק. אם רוצים לכפות מחיקה בלי לחכות ל-finalizers, צריך לערוך את האובייקט כדי להסיר אותם.
    4. יכול להיות שיש אובייקטים צאצאים שמונעים את מחיקת האובייקט. אדמין צריך לבדוק את כל האובייקטים במרחב השמות ובאשכול כדי לראות אם צריך למחוק אחד מהם באופן ידני קודם.