解除安裝 Cloud Service Mesh

本頁面說明如何解除安裝 Cloud Service Mesh。

解除安裝 Cloud Service Mesh

使用下列指令卸載所有 Cloud Service Mesh 元件。這些指令也會刪除 istio-system 命名空間和所有自訂資源定義 (CRD),包括您套用的任何 CRD。

  1. 如要避免應用程式流量中斷,請按照下列步驟操作:

    • 將所有 STRICT mTLS 政策降級為 PERMISSIVE。
    • 移除可能封鎖流量的 AuthorizationPolicy。
  2. 在這個叢集中停用自動管理功能 (無論是直接套用還是使用機群預設設定):

      gcloud container fleet mesh update --management manual
    
  3. 停用命名空間的補充資訊自動插入功能(如果已啟用)。執行下列指令,顯示命名空間標籤:

     kubectl get namespace YOUR_NAMESPACE --show-labels
    

    輸出結果會與下列內容相似:

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

    如果在 LABELS 欄下方的輸出內容中看到 istio.io/rev=,請移除:

     kubectl label namespace YOUR_NAMESPACE istio.io/rev-
    

    如果在 LABELS 欄下方的輸出內容中看到 istio-injection,請移除:

     kubectl label namespace YOUR_NAMESPACE istio-injection-
    

    如果您沒有看到 istio.io/revistio-injection 標籤,表示命名空間未啟用自動插入功能。

  4. 重新啟動已插入 Sidecar 的工作負載,以移除 Proxy。

  5. 如果您使用的是代管 Cloud Service Mesh,請移除叢集中的任何 controlplanerevision 資源:

    kubectl delete controlplanerevision RELEASE_CHANNEL -n istio-system
    

    其中 RELEASE_CHANNEL 是您佈建的發布版本,例如 asm-managedasm-managed-rapidasm-managed-stable

  6. 刪除叢集中的 webhook (如果有的話)。

    叢集內 Cloud Service Mesh

    刪除 validatingwebhooksconfigurationmutatingwebhookconfiguration

    kubectl delete validatingwebhookconfiguration,mutatingwebhookconfiguration -l operator.istio.io/component=Pilot
    

    代管 Cloud Service Mesh

    A. 刪除 validatingwebhooksconfiguration

    kubectl delete validatingwebhookconfiguration istiod-istio-system-mcp
    

    B. 刪除 mutatingwebhookconfiguration

    kubectl delete mutatingwebhookconfiguration istiod-RELEASE_CHANNEL
    
  7. 所有工作負載都啟動且沒有發現任何 Proxy 後,您就可以安全地刪除叢集內控制平面,停止計費。如果您部署了受管理的控制層,系統會在前一個步驟中自動刪除該層。

    如要移除叢集內控制平面,請執行下列指令:

    istioctl x uninstall --purge
    

    如果沒有其他控制平面,您可以刪除 istio-system 命名空間,以便移除所有 Cloud Service Mesh 資源。否則,請刪除與 Cloud Service Mesh 修訂版本相對應的服務。這樣可避免刪除 CRD 等共用資源。

  8. 刪除 istio-systemasm-system 命名空間:

     kubectl delete namespace istio-system asm-system --ignore-not-found=true
    
  9. 檢查刪除作業是否成功:

     kubectl get ns
    

    輸出內容應顯示 Terminating 狀態,並如圖所示傳回,否則您可能必須手動刪除命名空間中的所有剩餘資源,然後再試一次。

     NAME                 STATUS       AGE
     istio-system         Terminating  71m
     asm-system           Terminating  71m
    
    1. 如果您要刪除叢集,或已刪除叢集,請務必確保每個叢集都已從機群中取消註冊
  10. 如果您已啟用代管型 Cloud Service Mesh 機群預設設定,且想為日後的叢集停用這項設定,請停用該設定。如果您只想從單一叢集中解除安裝,可以略過這個步驟。

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

    其中 FLEET_PROJECT_ID 是車隊主機專案的 ID。

  11. 如果您使用的是代管式 Cloud Service Mesh,請刪除 mdp-controller 部署:

     kubectl delete deployment mdp-controller -n kube-system
    
  12. 檢查是否有 istio-cni-plugin-config 設定檔:

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

    刪除 istio-cni-plugin-config 設定檔地圖 (如有):

     kubectl delete configmap istio-cni-plugin-config -n kube-system
    
  13. 刪除 istio-cni-node daemonset:

     kubectl delete daemonset istio-cni-node -n kube-system
    

完成這些步驟後,系統會有系統地從叢集中移除所有 Cloud Service Mesh 元件,包括 Proxy、叢集內憑證授權單位,以及 RBAC 角色和繫結。在安裝過程中,Google 擁有的服務帳戶會獲得必要權限,以便在叢集中建立服務中介資源。這些解除安裝操作說明不會撤銷這些權限,方便日後順利重新啟用 Cloud Service Mesh。