פתרון בעיות ב-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. יכול להיות שיש אובייקטים צאצאים שמונעים את מחיקת האובייקט. אדמין צריך לבדוק את כל האובייקטים במרחב השמות ובאשכול כדי לראות אם צריך למחוק אחד מהם באופן ידני קודם.