פתרון בעיות ב-CNI מנוהל

בדף הזה מוסבר על בעיות נפוצות ב-CNI מנוהל ב-Cloud Service Mesh ואיך לפתור אותן. לקבלת עזרה נוספת, אפשר לעיין במאמר בנושא קבלת תמיכה.

הגדרה מנוהלת של CNI מופעל שלא נתמכת

הטמעה של מישור הבקרה TRAFFIC_DIRECTOR ב-Managed Cloud Service Mesh מחייבת שימוש ב-CNI מנוהל, ואי אפשר להשבית אותו. יכול להיות שתראו את הקוד CNI_CONFIG_UNSUPPORTED בהודעה על מצב התכונה אם התווית mesh.cloud.google.com/managed-cni-enabled קיימת אבל לא מוגדר לה הערך true במשאב המותאם אישית (CR) של עדכון מישור הבקרה (CPR), או אם רשומת ה-CNI ב-configmap של asm-options קיימת אבל לא מוגדר לה הערך on.

כדי לפתור את השגיאה הזו, צריך להסיר את כל הניסיונות להשבית את CNI מנוהל.

  • תרחיש 1: מסירים את התווית CNI Enabled (הפעלת CNI) המנוהלת ב-CPR CR באשכול.

    apiVersion: v1
    items:
    - apiVersion: mesh.cloud.google.com/v1beta1
      kind: ControlPlaneRevision
      metadata:
        annotations:
          mesh.cloud.google.com/proxy: '{"managed":"false"}'
        creationTimestamp: "2024-02-18T08:13:30Z"
        generation: 1
        labels:
          app.kubernetes.io/created-by: mesh.googleapis.com
          mesh.cloud.google.com/managed-cni-enabled: false # Remove the "mesh.cloud.google.com/managed-cni-enabled" label
        name: asm-managed
        namespace: istio-system
        resourceVersion: "13422558"
        uid: 3ad755ec-78ab-4d57-8fb9-c5e1a07740d5
    
  • מקרה 2: מסירים את מחרוזת הנתונים של asm-options configmap ASM_OPTS של רשומת ה-CNI.

    apiVersion: v1
    data:
      ASM_OPTS: CNI=off # Remove CNI entry in the ASM_OPTS data.
      multicluster_mode: connected
    kind: ConfigMap
    metadata:
      creationTimestamp: "2024-02-18T08:13:30Z"
      name: asm-options
      namespace: istio-system
      resourceVersion: "1640225"
      uid: 576602da-e60b-4df7-9427-5be06e5bf014
    

אי אפשר לתזמן את ה-Pod של CNI

השגיאה הזו עשויה להופיע אם ל-DaemonSet של CNI מנוהל אין אפשרות לתזמן Pods באף אחד מהצמתים באשכול.

שימו לב שמשאבים בתוך האשכול דורשים לפחות memory: 100Mi בכל צומת. מידע נוסף זמין במאמר בנושא הדרישות של Cloud Service Mesh. אם כבר הוקצה ל-Cluster מספיק זיכרון, אפשר לעיין במאמר Pod unschedulable כדי לראות שלבים נוספים לפתרון בעיות.

צמתים תקועים בסטטוס NotReady עם שגיאה של containerID חסר

יכול להיות שהשגיאה הזו תופיע אם הצמתים באשכול לא יהיו מוכנים אחרי שמשדרגים את הגרסה של Google Kubernetes Engine‏ (GKE).

הודעת שגיאה:

container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: missing containerID

הסיבה:

הבעיה הזו נובעת מחוסר תאימות בין Cloud Service Mesh Container Network Interface ‏ (CNI) בגרסה 1.20.x לבין התוספים של Container Network Interface ‏ (CNI) ב-GKE. תוספי CNI צריכים להיות תואמים למפרט CNI 1.1.0. באשכולות שמופעלת בהם גרסה 1.35.1-gke.1516000 ואילך של GKE, התמיכה במפרט הזה מופעלת באופן אוטומטי. מכיוון שגרסה 1.20.x של Cloud Service Mesh CNI לא תומכת במפרט CNI בגרסה 1.1.0, בדיקות תקינות הצומת נכשלות והצמתים נשארים במצב NotReady.

פתרון עקיף:

אם האשכול שלכם עדיין מריץ את Cloud Service Mesh CNI בגרסה 1.20.x, אל תשדרגו את מאגרי הצמתים של GKE לגרסה 1.35.1-gke.1516000 ואילך.

אם כבר שדרגתם ואתם נתקלים בבעיה הזו, הפתרון המומלץ הוא לשנמך את גרסת GKE לגרסה ישנה יותר מ-1.35.1-gke.1516000 עד ש-CNI המנוהל של האשכול ישודרג לגרסה 1.23.x או לגרסה חדשה יותר.