הסרת Cloud Service Mesh

בדף הזה מוסבר איך להסיר את Cloud Service Mesh אם אתם משתמשים בממשקי Istio API. אם אתם משתמשים בממשקי Compute Engine API, לא צריך לבצע שום פעולה. ההבדלים מוסברים במאמר סקירה כללית על Cloud Service Mesh.

אם פועלים לפי ההוראות האלה להסרת Cloud Service Mesh, כל ההגדרות יוסרו בלי קשר לסוג מישור הבקרה (בתוך האשכול או מנוהל). אם אתם מבצעים העברה מתוך האשכול לניהול, עליכם לפעול לפי מדריך ההעברה.

הסרת Cloud Service Mesh

כדי להסיר את כל הרכיבים של Cloud Service Mesh, משתמשים בפקודות הבאות. הפקודות האלה מוחקות גם את מרחב השמות istio-system ואת כל ההגדרות של משאבים מותאמים אישית (CRD), כולל כל הגדרות ה-CRD שהחלתם.

  1. כדי למנוע שיבוש בתנועת הנתונים של האפליקציה:

    • מבצעים שדרוג לאחור של כל כללי מדיניות mTLS מסוג STRICT ל-PERMISSIVE.
    • מסירים את כל כללי המדיניות AuthorizationPolicy שעלולים לחסום תנועה.
  2. משביתים את הניהול האוטומטי באשכול הזה (בין אם הפעלתם אותו ישירות או באמצעות הגדרת ברירת המחדל של הצי):

      gcloud container fleet mesh update \
         --management manual \
         --memberships MEMBERSHIP_NAME \
         --project FLEET_PROJECT_ID \
         --location MEMBERSHIP_LOCATION
    

    מחליפים את מה שכתוב בשדות הבאים:

    • MEMBERSHIP_NAME הוא שם החברות שמופיע כשמאמתים שהאשכול רשום ב-Fleet.
    • MEMBERSHIP_LOCATION הוא המיקום של המינוי (אזור או global).
  3. אם האפשרות הזו מופעלת, משביתים את ההזרקה האוטומטית של sidecar במרחבי השמות. מריצים את הפקודה הבאה כדי להציג את תוויות מרחב השמות:

     kubectl get namespace YOUR_NAMESPACE --show-labels
    

    הפלט אמור להיראות כך:

     NAME   STATUS   AGE     LABELS
     demo   Active   4d17h   istio.io/rev=asm-181-5

    אם מופיע istio.io/rev= בפלט בעמודה LABELS, מסירים אותו:

     kubectl label namespace YOUR_NAMESPACE istio.io/rev-
    

    אם מופיע istio-injection בפלט בעמודה LABELS, מסירים אותו:

     kubectl label namespace YOUR_NAMESPACE istio-injection-
    

    אם לא מופיעה התווית istio.io/rev או istio-injection, סימן שההוספה האוטומטית לא הופעלה במרחב השמות.

  4. מפעילים מחדש את עומסי העבודה שהוחדרו להם קבצים מצורפים כדי להסיר את השרתים הפרוקסי.

  5. אם אתם משתמשים ב-Cloud Service Mesh מנוהל, כדאי לבדוק איזו הטמעה של מישור הבקרה יש לכם באשכול. זה יעזור לכם למחוק את המשאבים הרלוונטיים בשלבים הבאים.

  6. אם אתם משתמשים ב-Cloud Service Mesh מנוהל, צריך להסיר את כל המשאבים באשכול:controlplanerevision

    kubectl delete controlplanerevision asm-managed asm-managed-rapid asm-managed-stable -n istio-system --ignore-not-found=true
    
  7. מוחקים את ה-webhook מהאשכול, אם הוא קיים.

    ‫Cloud Service Mesh בתוך האשכול

    מוחקים את validatingwebhooksconfiguration ואת mutatingwebhookconfiguration.

    kubectl delete validatingwebhookconfiguration,mutatingwebhookconfiguration -l operator.istio.io/component=Pilot,istio.io/owned-by!=mesh.googleapis.com
    

    Managed Cloud Service Mesh

    א. מוחקים את validatingwebhooksconfiguration.

    kubectl delete validatingwebhookconfiguration istiod-istio-system-mcp
    

    ב. מחיקת כל הפעילות mutatingwebhookconfiguration.

    kubectl delete mutatingwebhookconfiguration istiod-RELEASE_CHANNEL
    
  8. אחרי שכל עומסי העבודה יפעלו ולא יזוהו שרתי proxy, תוכלו למחוק את מישור הבקרה בתוך האשכול כדי להפסיק את החיוב.

    כדי להסיר את מישור הבקרה בתוך האשכול, מריצים את הפקודה הבאה:

    istioctl uninstall --purge
    

    אם אין מישורי בקרה אחרים, אפשר למחוק את מרחב השמות istio-system כדי להיפטר מכל המשאבים של Cloud Service Mesh. אחרת, צריך למחוק את השירותים שמתאימים לגרסאות של Cloud Service Mesh. כך נמנעת מחיקה של משאבים משותפים, כמו CRD.

  9. מחיקת מרחבי השמות istio-system ו-asm-system:

     kubectl delete namespace istio-system asm-system --ignore-not-found=true
    
  10. כדי לבדוק אם המחיקות הצליחו:

     kubectl get ns
    

    הפלט אמור לציין מצב Terminating ולהופיע כמו שמוצג כאן, אחרת יכול להיות שתצטרכו למחוק ידנית את כל המשאבים שנותרו במרחבי השמות ולנסות שוב.

     NAME                 STATUS       AGE
     istio-system         Terminating  71m
     asm-system           Terminating  71m
    
  11. אם אתם מתכוונים למחוק את האשכולות, או שכבר מחקתם אותם, אתם צריכים לוודא שכל אשכול לא רשום בצי.

  12. אם הפעלתם את ההגדרה של צי ברירת המחדל של Cloud Service Mesh מנוהל ואתם רוצים להשבית אותה באשכולות עתידיים, אתם יכולים לעשות זאת. אפשר לדלג על השלב הזה אם מסירים את התוסף רק מאשכול אחד.

     gcloud container hub mesh disable --fleet-default-member-config --project FLEET_PROJECT_ID
    

    כאשר FLEET_PROJECT_ID הוא מזהה הפרויקט המארח של הצי.

  13. אם אתם מתכננים להפסיק להשתמש ב-Cloud Service Mesh ברמת הצי, אתם צריכים להשבית את התכונה של רשת השירות בפרויקט המארח של הצי.

     gcloud container hub mesh disable --project FLEET_PROJECT_ID
    

    כאשר FLEET_PROJECT_ID הוא מזהה הפרויקט המארח של הצי.

  14. אם הפעלתם את Cloud Service Mesh מנוהל, צריך לבדוק ולמחוק משאבים מנוהלים אם הם מופיעים:

    1. מוחקים את הפריסה mdp-controller:

        kubectl delete deployment mdp-controller -n kube-system
      
    2. מקבלים ואז מוחקים את המשאב המותאם אישית של בקרת מישור הנתונים:

      1. מקבלים את ה-CR של מישור הנתונים:

        kubectl get dataplanecontrol
        
      2. מוחקים את ה-CR של אמצעי הבקרה של מישור הנתונים:

        kubectl delete dataplanecontrol DATA_PLANE_CONTROL_CR_NAME
        

        מחליפים את DATA_PLANE_CONTROL_CR_NAME בפלט מהפקודה הקודמת.

      3. מחיקת ה-CRD‏ controlplanerevision ו-dataplanecontrol:

        kubectl delete crd controlplanerevisions.mesh.cloud.google.com dataplanecontrols.mesh.cloud.google.com
        
    3. אם יש לכם הטמעה של מישור הבקרה TRAFFIC_DIRECTOR, צריך לנקות את המשאבים של בדיקת התקינות השקופה. בדרך כלל הם מוסרים אוטומטית, אבל כדי לוודא שהם יוסרו, אפשר לבצע את הפעולות הבאות:

      1. מוחקים את snk daemonset.

           kubectl delete daemonset snk -n kube-system
        
      2. מוחקים את כלל חומת האש.

           gcloud compute firewall-rules delete gke-csm-thc-FIRST_8_CHARS_OF_CLUSTER_ID
        

        מחליפים את מה שכתוב בשדות הבאים:

        • FIRST_8_CHARS_OF_CLUSTER_ID הוא 8 התווים הראשונים של מזהה האשכול עבור האשכול הספציפי שלכם.
    4. בודקים אם קובץ ה-configmap‏ istio-cni-plugin-config קיים:

        kubectl get configmap istio-cni-plugin-config -n kube-system
      

      אם הוא קיים, מוחקים את ה-configmap‏ istio-cni-plugin-config:

        kubectl delete configmap istio-cni-plugin-config -n kube-system
      
    5. מחיקת ה-daemonset‏ istio-cni-node:

        kubectl delete daemonset istio-cni-node -n kube-system
      
  15. אם אתם מסירים את Cloud Service Mesh מנוהל, פנו לתמיכה כדי לוודא שכל משאביGoogle Cloud נוקו. אם לא תבצעו את השלב הזה, יכול להיות שמרחב השמות istio-system ומיפויי ההגדרות ימשיכו להיווצר מחדש.

בסיום השלבים האלה, כל הרכיבים של Cloud Service Mesh, כולל שרתי proxy, רשויות אישורים באשכול, תפקידים וקישורים של RBAC, מוסרים מהאשכול באופן שיטתי. במהלך תהליך ההתקנה, חשבון שירות בבעלות Google מקבל את ההרשאות הנדרשות ליצירת משאבי Service mesh באשכול. ההוראות האלה להסרת ההתקנה לא מבטלות את ההרשאות האלה, ולכן אפשר יהיה להפעיל מחדש את Cloud Service Mesh בעתיד בצורה חלקה.