解除安裝 Cloud Service Mesh
如果您使用 Istio API,本頁會說明如何解除安裝 Cloud Service Mesh。如果您使用的是 Compute Engine API,則不需要執行任何步驟。請參閱 Cloud Service Mesh 總覽,瞭解兩者的差異。
按照這些操作說明解除安裝 Cloud Service Mesh 時,無論控制層類型 (叢集內或代管) 為何,都會移除所有設定。如果您要從叢集內遷移至受管理,請改為按照遷移指南操作。
解除安裝 Cloud Service Mesh
使用下列指令卸載所有 Cloud Service Mesh 元件。這些指令也會刪除 istio-system
命名空間和所有自訂資源定義 (CRD),包括您套用的任何 CRD。
如要避免應用程式流量中斷,請按照下列步驟操作:
- 將所有 STRICT mTLS 政策降級為 PERMISSIVE。
- 移除可能封鎖流量的 AuthorizationPolicy。
在這個叢集中停用自動管理功能 (無論是直接套用還是使用機群預設設定):
gcloud container fleet mesh update \ --management manual \ --memberships MEMBERSHIP_NAME \ --project FLEET_PROJECT_ID \ --location MEMBERSHIP_LOCATION
更改下列內容:
- MEMBERSHIP_NAME 是您驗證叢集已註冊至機群時列出的會員名稱。
- MEMBERSHIP_LOCATION 是會員身分的所在地 (區域或
global
)。
停用命名空間的補充資訊自動插入功能(如果已啟用)。執行下列指令,顯示命名空間標籤:
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/rev
或istio-injection
標籤,表示命名空間未啟用自動插入功能。重新啟動已插入 Sidecar 的工作負載,以移除 Proxy。
如果您使用的是受管理的 Cloud Service Mesh,請檢查叢集中的控制層實作,這有助於您在後續步驟中刪除相關資源。
如果您使用的是代管 Cloud Service Mesh,請移除叢集中的所有
controlplanerevision
資源:kubectl delete controlplanerevision asm-managed asm-managed-rapid asm-managed-stable -n istio-system --ignore-not-found=true
刪除叢集中的 webhook (如果有的話)。
叢集內 Cloud Service Mesh
刪除
validatingwebhooksconfiguration
和mutatingwebhookconfiguration
。kubectl delete validatingwebhookconfiguration,mutatingwebhookconfiguration -l operator.istio.io/component=Pilot,istio.io/owned-by!=mesh.googleapis.com
代管 Cloud Service Mesh
A. 刪除
validatingwebhooksconfiguration
。kubectl delete validatingwebhookconfiguration istiod-istio-system-mcp
B. 刪除所有
mutatingwebhookconfiguration
。kubectl delete mutatingwebhookconfiguration istiod-RELEASE_CHANNEL
所有工作負載都啟動且沒有發現任何 Proxy 後,您就可以安全地刪除叢集內控制平面,停止計費。
如要移除叢集內控制平面,請執行下列指令:
istioctl uninstall --purge
如果沒有其他控制平面,您可以刪除
istio-system
命名空間,以便移除所有 Cloud Service Mesh 資源。否則,請刪除與 Cloud Service Mesh 修訂版本相對應的服務。這樣可避免刪除 CRD 等共用資源。刪除
istio-system
和asm-system
命名空間:kubectl delete namespace istio-system asm-system --ignore-not-found=true
檢查刪除作業是否成功:
kubectl get ns
輸出內容應顯示
Terminating
狀態,並如圖所示傳回,否則您可能必須手動刪除命名空間中的所有剩餘資源,然後再試一次。NAME STATUS AGE istio-system Terminating 71m asm-system Terminating 71m
如果您要刪除叢集,或已刪除叢集,請務必確保每個叢集都已從機群中取消註冊。
如果您已啟用代管型 Cloud Service Mesh 機群預設設定,但想為日後的叢集停用這項設定,請停用該設定。如果您只想從單一叢集中解除安裝,可以略過這個步驟。
gcloud container hub mesh disable --fleet-default-member-config --project FLEET_PROJECT_ID
其中 FLEET_PROJECT_ID 是車隊主機專案的 ID。
如果您打算停止在機群層級使用 Cloud Service Mesh,請為機群主機專案停用服務網格功能。
gcloud container hub mesh disable --project FLEET_PROJECT_ID
其中 FLEET_PROJECT_ID 是車隊主機專案的 ID。
如果您已啟用代管 Cloud Service Mesh,請檢查並刪除代管資源 (如有):
刪除
mdp-controller
部署:kubectl delete deployment mdp-controller -n kube-system
如果您已實作
TRAFFIC_DIRECTOR
控制層,請清除透明健康狀態檢查資源。這些檔案通常會自動移除,但您可以按照下列步驟確認是否已清除:刪除
snk
daemonset。kubectl delete daemonset snk -n kube-system
刪除防火牆規則。
gcloud compute firewall-rules delete gke-csm-thc-FIRST_8_CHARS_OF_CLUSTER_ID
更改下列內容:
- FIRST_8_CHARS_OF_CLUSTER_ID 是特定叢集的叢集 ID 前 8 個字元。
檢查是否有
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
刪除
istio-cni-node
daemonset:kubectl delete daemonset istio-cni-node -n kube-system
如果您要解除安裝受管理的 Cloud Service Mesh,請與支援團隊聯絡,確保所有Google Cloud 資源都已清除。如果您未按照此步驟操作,系統可能也會繼續重新建立
istio-system
命名空間和設定對應項目。
完成這些步驟後,系統會有系統地從叢集中移除所有 Cloud Service Mesh 元件,包括 Proxy、叢集內憑證授權單位,以及 RBAC 角色和繫結。在安裝過程中,Google 擁有的服務帳戶會獲得必要權限,以便在叢集中建立服務中介資源。這些解除安裝操作說明不會撤銷這些權限,方便日後順利重新啟用 Cloud Service Mesh。