升級 Cloud Service Mesh
本頁面說明如何:
執行
asmcli,從 Cloud Service Mesh 升級至 Cloud Service Mesh 1.31.1。視需要部署 Ingress 閘道。
執行 Canary 升級,將工作負載遷移至新的控制層。
可升級的 Cloud Service Mesh 版本因平台而異。
GKE
您可以從下列版本直接升級至 Google Kubernetes Engine 上的 Cloud Service Mesh 1.31.1-asm.19 :
1.29+
地端部署
您可以從下列版本直接升級至 Google Distributed Cloud (僅限軟體) for VMware 和 Google Distributed Cloud (僅限軟體) for 裸機 的 Cloud Service Mesh 1.31.1-asm.19 :
1.29+
GKE on AWS
您可以從下列版本直接升級至 GKE on AWS 上的 Cloud Service Mesh 1.31.1-asm.19 :
1.29+
GKE on Azure
Azure 上的 GKE 僅支援 Cloud Service Mesh 1.16。不支援從舊版 Cloud Service Mesh 升級。
Amazon EKS
如果您在 EKS 上安裝了 Cloud Service Mesh 1.7,請在新叢集上安裝 Cloud Service Mesh 1.31。不支援從 Cloud Service Mesh 1.7 升級至 Cloud Service Mesh1.31 。
Microsoft AKS
如果 AKS 上已安裝 Cloud Service Mesh 1.7,您必須在新的叢集安裝 Cloud Service Mesh 1.31。不支援從 Cloud Service Mesh 1.7 升級至 Cloud Service Mesh1.31 。
事前準備
開始前,請確認下列事項:
控制層自訂項目
如果您自訂了先前的安裝作業,升級至新版 Cloud Service Mesh 或從 Istio 遷移時,需要進行相同的自訂作業。如果您透過在 istioctl install 中加入 --set values 旗標自訂安裝作業,則必須將這些設定新增至 IstioOperator YAML 檔案,也就是疊加檔案。執行指令碼時,您可以使用 --custom_overlay 選項和檔案名稱指定疊加檔案。指令碼會將疊加層檔案傳遞至 istioctl install。
認證機構
升級期間變更憑證授權單位 (CA) 會導致停機。 升級期間,mTLS 流量會中斷,直到所有工作負載都改用新的控制層和新的 CA 為止。
升級 Cloud Service Mesh
以下說明如何升級 Cloud Service Mesh:
如果您要升級 GKE 上使用 Cloud Service Mesh 憑證授權機構的多叢集網格,請執行
asmcli create-mesh,將多叢集網格設定為信任機群工作負載身分,以便在升級期間進行跨叢集負載平衡,不會發生停機情形。執行
asmcli install,在單一叢集上安裝 Cloud Service Mesh。如需指令列範例,請參閱以下各節。範例中包含必要引數和選用引數,您可能會覺得很有用。建議您一律指定output_dir引數,方便您輕鬆找到範例閘道和工具,例如istioctl。如需範例清單,請參閱右側的導覽列。(選用) 安裝或升級 Ingress 閘道。依預設,
asmcli不會安裝istio-ingressgateway。建議您分別部署及管理控制層和閘道。如要使用隨叢集控制層安裝的預設istio-ingressgateway,請加入--option legacy-default-ingressgateway引數。如要完成 Cloud Service Mesh 設定,您需要啟用自動 Sidecar 插入功能,並部署或重新部署工作負載。
設定多叢集網格,信任機群 Workload Identity
如果您要升級 GKE 上的多叢集網格,且該網格使用 Cloud Service Mesh 憑證授權機構做為憑證授權機構,則必須先執行 asmcli create-mesh,再升級每個叢集。升級後,這項指令會將 Cloud Service Mesh 憑證授權單位設定為使用機群 Workload Identity 集區 FLEET_PROJECT_ID.svc.id.goog 做為信任網域。asmcli create-mesh 指令:
- 將所有叢集註冊至同一個機群。
- 設定網格,以信任機群工作負載身分。
- 建立遠端密鑰。
您可以為每個叢集指定 URI,也可以指定 kubeconfig 檔案的路徑。
叢集 URI
在下列指令中,將 FLEET_PROJECT_ID 替換為機群主機專案的專案 ID,並將叢集 URI 替換為每個叢集的叢集名稱、可用區/區域和專案 ID。
./asmcli create-mesh \
FLEET_PROJECT_ID \
PROJECT_ID_1/CLUSTER_LOCATION_1/CLUSTER_NAME_1 \
PROJECT_ID_2/CLUSTER_LOCATION_2/CLUSTER_NAME_2 # \
# Add a line for each cluster in the mesh
kubeconfig 檔案
在下列指令中,將 FLEET_PROJECT_ID 替換為機群主機專案的專案 ID,並將 PATH_TO_KUBECONFIG 替換為每個 kubeconfig 檔案的路徑。
./asmcli create-mesh \
FLEET_PROJECT_ID \
PATH_TO_KUBECONFIG_1 \
PATH_TO_KUBECONFIG_2 # \
# Add a line for each cluster in the mesh
使用預設功能和 Mesh CA 升級
本節說明如何執行 asmcli,以升級 Cloud Service Mesh 並使用平台支援的預設功能,以及如何啟用 Cloud Service Mesh 憑證授權單位做為憑證授權單位。
GKE
執行下列指令,使用預設功能和 Cloud Service Mesh 憑證授權單位升級控制層。在提供的預留位置中輸入值。
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--fleet_id FLEET_PROJECT_ID \
--output_dir DIR_PATH \
--enable_all \
--ca mesh_ca
--project_id、--cluster_name和--cluster_location:指定叢集所在的專案 ID、叢集名稱,以及叢集區域或地區。--fleet_id機群主專案的專案 ID。如果未加入這個選項,asmcli會在註冊叢集時,使用叢集建立所在的專案。--output_dir加入這個選項即可指定目錄,asmcli會將anthos-service-mesh套件下載至該目錄,並解壓縮安裝檔案,其中包含istioctl、範例和資訊清單。否則asmcli會將檔案下載至tmp目錄。你可以指定相對路徑或完整路徑。環境變數$PWD在這裡無法運作。-
--enable_all允許指令碼執行下列操作:- 授予必要的 IAM 權限。
- 啟用必要的 Google API。
- 為叢集加上標籤來識別網格。
- 將叢集註冊至機群 (如尚未註冊)。
--ca mesh_ca使用 Cloud Service Mesh 憑證授權單位做為憑證授權單位。升級期間變更憑證授權單位會導致停機。asmcli會設定 Cloud Service Mesh 憑證授權單位,以使用機群 Workload Identity
地端部署
在 Google Distributed Cloud (僅限軟體) for VMware 或 Google Distributed Cloud (僅限軟體) for 裸機 上執行下列指令,使用預設功能和 Cloud Service Mesh 憑證授權機構升級控制層。在提供的預留位置中輸入值。
將目前環境設定為使用者叢集:
kubectl config use-context CLUSTER_NAME執行
asmcli install:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca mesh_ca--fleet_id機群主專案的專案 ID。--kubeconfigkubeconfig檔案的完整路徑。環境變數$PWD在這裡無法運作。此外,使用 `~` 的相對kubeconfig檔案位置將無法運作。--output_dir加入這個選項即可指定目錄,asmcli會將anthos-service-mesh套件下載至該目錄,並解壓縮安裝檔案,其中包含istioctl、範例和資訊清單。否則asmcli會將檔案下載至tmp目錄。你可以指定相對路徑或完整路徑。環境變數$PWD在這裡無法運作。--platform multicloud指定平台不是 Google Cloud,例如地端部署或多雲端。-
--enable_all允許指令碼執行下列操作:- 授予必要的 IAM 權限。
- 啟用必要的 Google API。
- 為叢集加上標籤來識別網格。
- 將叢集註冊至機群 (如尚未註冊)。
--ca mesh_ca使用 Cloud Service Mesh 憑證授權單位做為憑證授權單位。在升級期間變更憑證授權單位會導致停機。asmcli設定 Cloud Service Mesh 憑證授權單位,以使用機群工作負載身分
使用 CA 服務升級預設功能
本節說明如何執行 asmcli,以使用平台預設的支援功能升級 Cloud Service Mesh,並啟用 憑證授權單位服務。
GKE
執行下列指令,升級控制層並使用預設功能和憑證授權單位服務。在提供的預留位置中輸入值。
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--fleet_id FLEET_PROJECT_ID \
--output_dir DIR_PATH \
--enable_all \
--ca gcp_cas \
--ca_pool projects/PROJECT_NAME/locations/ca_region/caPools/CA_POOL
--project_id、--cluster_name和--cluster_location:指定叢集所在的專案 ID、叢集名稱,以及叢集區域或地區。--fleet_id機群主專案的專案 ID。如果未加入這個選項,asmcli會在註冊叢集時,使用叢集建立所在的專案。--output_dir加入這個選項即可指定目錄,asmcli會將anthos-service-mesh套件下載至該目錄,並解壓縮安裝檔案,其中包含istioctl、範例和資訊清單。否則asmcli會將檔案下載至tmp目錄。你可以指定相對路徑或完整路徑。環境變數$PWD在這裡無法運作。-
--enable_all允許指令碼執行下列操作:- 授予必要的 IAM 權限。
- 啟用必要的 Google API。
- 為叢集加上標籤來識別網格。
- 將叢集註冊至機群 (如尚未註冊)。
--ca gcp_cas使用憑證授權單位服務做為憑證授權單位。在升級期間變更憑證授權單位會導致停機。asmcli會設定憑證授權單位服務,以使用機群工作負載身分--ca_pool憑證授權單位服務 CA 集區的完整 ID。
地端部署
在 Google Distributed Cloud (僅限軟體) for VMware 或 Google Distributed Cloud (僅限軟體) for Bare Metal 上執行下列指令,即可升級控制層,並使用預設功能和憑證授權單位服務。在提供的預留位置中輸入值。
將目前環境設定為使用者叢集:
kubectl config use-context CLUSTER_NAME執行
asmcli install:./asmcli install \ --kubeconfig KUBECONFIG_FILE \ --fleet_id FLEET_PROJECT_ID \ --output_dir DIR_PATH \ --enable_all \ --ca gcp_cas \ --platform multicloud \ --ca_pool projects/PROJECT_NAME/locations/ca_region/caPools/CA_POOL--fleet_id機群主專案的專案 ID。--kubeconfigkubeconfig檔案的完整路徑。環境變數$PWD在這裡無法運作。此外,使用 `~` 的相對kubeconfig檔案位置將無法運作。--output_dir加入這個選項即可指定目錄,asmcli會將anthos-service-mesh套件下載至該目錄,並解壓縮安裝檔案,其中包含istioctl、範例和資訊清單。否則asmcli會將檔案下載至tmp目錄。你可以指定相對路徑或完整路徑。環境變數$PWD在這裡無法運作。--platform multicloud指定平台不是 Google Cloud,例如地端部署或多雲端。-
--enable_all允許指令碼執行下列操作:- 授予必要的 IAM 權限。
- 啟用必要的 Google API。
- 為叢集加上標籤來識別網格。
- 將叢集註冊至機群 (如尚未註冊)。
--ca gcp_cas使用憑證授權單位服務做為憑證授權單位。在升級期間變更憑證授權單位會導致停機。asmcli會設定憑證授權單位服務,以使用機群工作負載身分--ca_pool憑證授權單位服務 CA 集區的完整 ID。
使用 Istio CA 升級預設功能
本節說明如何執行 asmcli,以升級 Cloud Service Mesh,並啟用 Istio CA,以及平台預設的支援功能。
GKE
執行下列指令,使用預設功能和 Istio CA 升級控制層。在提供的預留位置中輸入值。
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--fleet_id FLEET_PROJECT_ID \
--output_dir DIR_PATH \
--enable_all \
--ca citadel
--project_id、--cluster_name和--cluster_location:指定叢集所在的專案 ID、叢集名稱,以及叢集區域或地區。--fleet_id機群主專案的專案 ID。如果未加入這個選項,asmcli會在註冊叢集時,使用叢集建立所在的專案。--output_dir加入這個選項即可指定目錄,asmcli會將anthos-service-mesh套件下載至該目錄,並解壓縮安裝檔案,其中包含istioctl、範例和資訊清單。否則asmcli會將檔案下載至tmp目錄。你可以指定相對路徑或完整路徑。環境變數$PWD在這裡無法運作。-
--enable_all允許指令碼執行下列操作:- 授予必要的 IAM 權限。
- 啟用必要的 Google API。
- 為叢集加上標籤來識別網格。
- 將叢集註冊至機群 (如尚未註冊)。
--ca citadel使用 Istio CA。升級期間變更憑證授權單位會導致服務中斷。
地端部署
在 Google Distributed Cloud (僅限軟體) for VMware 或 Google Distributed Cloud (僅限軟體) for 裸機 上執行下列指令,使用預設功能和 Istio CA 升級控制層。在提供的預留位置中輸入值。
將目前環境設定為使用者叢集:
kubectl config use-context CLUSTER_NAME執行
asmcli install:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert FILE_PATH \ --ca_key FILE_PATH \ --root_cert FILE_PATH \ --cert_chain FILE_PATH--fleet_id機群主專案的專案 ID。--kubeconfigkubeconfig檔案的完整路徑。環境變數$PWD在這裡無法運作。此外,使用 `~` 的相對kubeconfig檔案位置將無法運作。--output_dir加入這個選項即可指定目錄,asmcli會將anthos-service-mesh套件下載至該目錄,並解壓縮安裝檔案,其中包含istioctl、範例和資訊清單。否則asmcli會將檔案下載至tmp目錄。你可以指定相對路徑或完整路徑。環境變數$PWD在這裡無法運作。--platform multicloud指定平台不是 Google Cloud,例如地端部署或多雲端。-
--enable_all允許指令碼執行下列操作:- 授予必要的 IAM 權限。
- 啟用必要的 Google API。
- 為叢集加上標籤來識別網格。
- 將叢集註冊至機群 (如尚未註冊)。
--ca citadel使用 Istio CA 做為憑證授權單位。--ca_cert中繼憑證--ca_key中繼憑證的金鑰--root_cert根憑證--cert_chain憑證鏈結
AWS
在 AWS 上的 GKE 執行下列指令,使用預設功能和 Istio CA 升級控制層。在提供的預留位置中輸入值。您可以選擇為公開子網路或私有子網路啟用 Ingress。
公開
將目前環境設定為使用者叢集:
kubectl config use-context CLUSTER_NAME執行
asmcli install:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert FILE_PATH \ --ca_key FILE_PATH \ --root_cert FILE_PATH \ --cert_chain FILE_PATH--fleet_id機群主專案的專案 ID。--kubeconfigkubeconfig檔案的完整路徑。環境變數$PWD在這裡無法運作。此外,使用 `~` 的相對kubeconfig檔案位置將無法運作。--output_dir加入這個選項即可指定目錄,asmcli會將anthos-service-mesh套件下載至該目錄,並解壓縮安裝檔案,其中包含istioctl、範例和資訊清單。否則asmcli會將檔案下載至tmp目錄。你可以指定相對路徑或完整路徑。環境變數$PWD在這裡無法運作。--platform multicloud指定平台不是 Google Cloud,例如地端部署或多雲端。-
--enable_all允許指令碼執行下列操作:- 授予必要的 IAM 權限。
- 啟用必要的 Google API。
- 為叢集加上標籤來識別網格。
- 將叢集註冊至機群 (如尚未註冊)。
--ca citadel使用 Istio CA 做為憑證授權單位。--ca_cert中繼憑證--ca_key中繼憑證的金鑰--root_cert根憑證--cert_chain憑證鏈結
私人
將目前環境設定為使用者叢集:
kubectl config use-context CLUSTER_NAME將下列 YAML 儲存至名為
istio-operator-internal-lb.yaml的檔案:apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: components: ingressGateways: - enabled: true k8s: serviceAnnotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" name: istio-ingressgateway執行
asmcli install:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert FILE_PATH \ --ca_key FILE_PATH \ --root_cert FILE_PATH \ --cert_chain FILE_PATH --custom_overlay istio-operator-internal-lb.yaml--fleet_id機群主專案的專案 ID。--kubeconfigkubeconfig檔案的完整路徑。環境變數$PWD在這裡無法運作。此外,使用 `~` 的相對kubeconfig檔案位置將無法運作。--output_dir加入這個選項即可指定目錄,asmcli會將anthos-service-mesh套件下載至該目錄,並解壓縮安裝檔案,其中包含istioctl、範例和資訊清單。否則asmcli會將檔案下載至tmp目錄。你可以指定相對路徑或完整路徑。環境變數$PWD在這裡無法運作。--platform multicloud指定平台不是 Google Cloud,例如地端部署或多雲端。-
--enable_all允許指令碼執行下列操作:- 授予必要的 IAM 權限。
- 啟用必要的 Google API。
- 為叢集加上標籤來識別網格。
- 將叢集註冊至機群 (如尚未註冊)。
--ca citadel使用 Istio CA 做為憑證授權單位。--ca_cert中繼憑證--ca_key中繼憑證的金鑰--root_cert根憑證--cert_chain憑證鏈結
Amazon EKS
在 Amazon EKS 上執行下列指令,使用預設功能和 Istio CA 升級控制層。在提供的預留位置中輸入值。
將目前環境設定為使用者叢集:
kubectl config use-context CLUSTER_NAME執行
asmcli install:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert FILE_PATH \ --ca_key FILE_PATH \ --root_cert FILE_PATH \ --cert_chain FILE_PATH--fleet_id機群主專案的專案 ID。--kubeconfigkubeconfig檔案的完整路徑。環境變數$PWD在這裡無法運作。此外,使用 `~` 的相對kubeconfig檔案位置將無法運作。--output_dir加入這個選項即可指定目錄,asmcli會將anthos-service-mesh套件下載至該目錄,並解壓縮安裝檔案,其中包含istioctl、範例和資訊清單。否則asmcli會將檔案下載至tmp目錄。你可以指定相對路徑或完整路徑。環境變數$PWD在這裡無法運作。--platform multicloud指定平台不是 Google Cloud,例如地端部署或多雲端。-
--enable_all允許指令碼執行下列操作:- 授予必要的 IAM 權限。
- 啟用必要的 Google API。
- 為叢集加上標籤來識別網格。
- 將叢集註冊至機群 (如尚未註冊)。
--ca citadel使用 Istio CA 做為憑證授權單位。--ca_cert中繼憑證--ca_key中繼憑證的金鑰--root_cert根憑證--cert_chain憑證鏈結
Microsoft AKS
在 Microsoft AKS 上執行下列指令,使用預設功能和 Istio CA 升級控制層。在提供的預留位置中輸入值。
將目前環境設定為使用者叢集:
kubectl config use-context CLUSTER_NAME執行
asmcli install:HUB_REGISTRATION_EXTRA_FLAGS=--has-private-issuer ./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca citadel \ --ca_cert FILE_PATH \ --ca_key FILE_PATH \ --root_cert FILE_PATH \ --cert_chain FILE_PATH--fleet_id機群主專案的專案 ID。--kubeconfigkubeconfig檔案的完整路徑。環境變數$PWD在這裡無法運作。此外,使用 `~` 的相對kubeconfig檔案位置將無法運作。--output_dir加入這個選項即可指定目錄,asmcli會將anthos-service-mesh套件下載至該目錄,並解壓縮安裝檔案,其中包含istioctl、範例和資訊清單。否則asmcli會將檔案下載至tmp目錄。你可以指定相對路徑或完整路徑。環境變數$PWD在這裡無法運作。--platform multicloud指定平台不是 Google Cloud,例如地端部署或多雲端。-
--enable_all允許指令碼執行下列操作:- 授予必要的 IAM 權限。
- 啟用必要的 Google API。
- 為叢集加上標籤來識別網格。
- 將叢集註冊至機群 (如尚未註冊)。
--ca citadel使用 Istio CA 做為憑證授權單位。--ca_cert中繼憑證--ca_key中繼憑證的金鑰--root_cert根憑證--cert_chain憑證鏈結
升級並使用選用功能
疊加檔案是 YAML 檔案,內含您傳遞至 asmcli 的 IstioOperator 自訂資源 (CR),用於設定控制層。您可以將 YAML 檔案傳遞至 asmcli,藉此覆寫預設控制層設定,並啟用選用功能。您可以疊加更多疊加層,每個疊加層檔案都會覆寫先前圖層的設定。
GKE
執行下列指令,安裝控制層和選用功能。如要新增多個檔案,請指定 --custom_overlay 和檔案名稱,例如:--custom_overlayoverlay_file1.yaml
--custom_overlay overlay_file2.yaml --custom_overlay overlay_file3.yaml
在提供的預留位置中輸入值。
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--fleet_id FLEET_PROJECT_ID \
--output_dir DIR_PATH \
--enable_all \
--ca mesh_ca \
--custom_overlay OVERLAY_FILE
--project_id、--cluster_name和--cluster_location:指定叢集所在的專案 ID、叢集名稱,以及叢集區域或地區。--fleet_id機群主專案的專案 ID。如果未加入這個選項,asmcli會在註冊叢集時,使用叢集建立所在的專案。--output_dir加入這個選項即可指定目錄,asmcli會將anthos-service-mesh套件下載至該目錄,並解壓縮安裝檔案,其中包含istioctl、範例和資訊清單。否則asmcli會將檔案下載至tmp目錄。你可以指定相對路徑或完整路徑。環境變數$PWD在這裡無法運作。-
--enable_all允許指令碼執行下列操作:- 授予必要的 IAM 權限。
- 啟用必要的 Google API。
- 為叢集加上標籤來識別網格。
- 將叢集註冊至機群 (如尚未註冊)。
--ca mesh_ca使用 Cloud Service Mesh 憑證授權單位做為憑證授權單位。升級期間變更憑證授權單位會導致停機。asmcli會設定 Cloud Service Mesh 憑證授權單位,以使用機群 Workload Identity--custom_overlay指定疊加檔案的名稱。
Google Cloud 以外
在 Google Distributed Cloud (僅限軟體) for VMware、Google Distributed Cloud (僅限軟體) for 裸機、GKE on AWS、Amazon EKS 或 Microsoft AKS 上執行下列指令。在提供的預留位置中輸入值。
將目前環境設定為使用者叢集:
kubectl config use-context CLUSTER_NAME執行
asmcli install:./asmcli install \ --fleet_id FLEET_PROJECT_ID \ --kubeconfig KUBECONFIG_FILE \ --output_dir DIR_PATH \ --platform multicloud \ --enable_all \ --ca mesh_ca \ --custom_overlay OVERLAY_FILE--fleet_id機群主專案的專案 ID。--kubeconfigkubeconfig檔案的完整路徑。環境變數$PWD在這裡無法運作。此外,使用 `~` 的相對kubeconfig檔案位置將無法運作。--output_dir加入這個選項即可指定目錄,asmcli會將anthos-service-mesh套件下載至該目錄,並解壓縮安裝檔案,其中包含istioctl、範例和資訊清單。否則asmcli會將檔案下載至tmp目錄。你可以指定相對路徑或完整路徑。環境變數$PWD在這裡無法運作。--platform multicloud指定平台不是 Google Cloud,例如地端部署或多雲端。-
--enable_all允許指令碼執行下列操作:- 授予必要的 IAM 權限。
- 啟用必要的 Google API。
- 為叢集加上標籤來識別網格。
- 將叢集註冊至機群 (如尚未註冊)。
--ca mesh_ca使用 Cloud Service Mesh 憑證授權單位做為憑證授權單位。升級期間變更憑證授權單位會導致停機。asmcli會設定 Cloud Service Mesh 憑證授權單位,以使用機群 Workload Identity--custom_overlay指定疊加檔案的名稱。
升級閘道
如果已部署閘道,也需要升級這些閘道。如要進行簡單升級,請按照「安裝及升級閘道」指南中的「就地升級」一節操作。
切換至新版控制層
取得
istiod上的修訂版本標籤。kubectl get pod -n istio-system -L istio.io/rev指令輸出內容如下所示。
NAME READY STATUS RESTARTS AGE REV istiod-asm-1311-19-67998f4b55-lrzpz 1/1 Running 0 68m asm-1311-16 istiod-asm-1311-19-67998f4b55-r76kr 1/1 Running 0 68m asm-1311-16 istiod-1311-16-1-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-1311-19 istiod-1311-16-1-5cd96f88f6-wm68b 1/1 Running 0 27s asm-1311-19
在輸出內容的
REV欄下方,記下新版本的修訂標籤值。在本範例中,該值為asm-1311-19。請注意舊版
istiod的修訂版本標籤值。 將工作負載移至新版本後,您需要這個 ID 才能刪除舊版istiod。在範例輸出內容中,舊版修訂版本標籤的值為asm-1311-16。
將修訂版本標籤新增至應用程式命名空間,並移除
istio-injection標籤 (如有)。在下列指令中,將REVISION變更為與istiod新修訂版本相符的值。kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
如果輸出內容中顯示
"istio-injection not found",請忽略。這表示該命名空間先前並未設定istio-injection標籤。如果命名空間同時有istio-injection和修訂版本標籤,自動插入行為會變成未定義,因此 Cloud Service Mesh 文件中的所有kubectl label指令都會明確確保只設定一個標籤。重新啟動 Pod,觸發重新注入作業。
kubectl rollout restart deployment -n NAMESPACE
測試應用程式,確認工作負載是否正常運作。
如果其他命名空間也有工作負載,請重複上述步驟,為命名空間加上標籤並重新啟動 Pod。
確認應用程式運作正常後,請繼續執行步驟,改用新版
istiod。如果應用程式有問題,請按照步驟進行復原。完成轉場
確認應用程式運作正常後,請移除舊版控制平面,完成新版轉換作業。
變更為
anthos-service-meshGitHub 存放區檔案所在的目錄。移動預設代碼:
<OUTPUT_DIR>/istioctl tag set default --revision <NEW REVISION NAME> --overwrite刪除舊版
istiod。使用的指令取決於您是從 Istio 遷移,還是從舊版 Cloud Service Mesh 升級。遷移
如果您是從 Istio 遷移,舊版
istio-ingressgateway沒有修訂版本標籤:kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget,sa,rolebinding,role istiod -n istio-system --ignore-not-found=true升級
如果您是從舊版 Cloud Service Mesh 升級,請確保下列指令中的
OLD_REVISION與舊版istiod的修訂版本標籤相符:kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget,sa,rolebinding,role istiod-OLD_REVISION -n istio-system --ignore-not-found=true刪除舊版修訂的
validatingwebhookconfiguration、mutatingWebhookConfiguration、configMap、clusterRole和clusterRoleBinding資源:kubectl delete validatingwebhookconfiguration istio-validator-OLD_REVISION-istio-system --ignore-not-found kubectl delete mutatingWebhookConfiguration istio-sidecar-injector-OLD_REVISION --ignore-not-found kubectl delete configMap istio-OLD_REVISION istio-sidecar-injector-OLD_REVISION -n istio-system --ignore-not-found kubectl delete clusterRole,clusterRoleBinding istio-reader-clusterrole-OLD_REVISION-istio-system istiod-clusterrole-OLD_REVISION-istio-system istiod-gateway-controller-OLD_REVISION-istio-system --ignore-not-found
移除舊版
IstioOperator設定:kubectl delete IstioOperator installed-state-OLD_REVISION -n istio-system預期的輸出內容如下所示:
istiooperator.install.istio.io "installed-state-OLD_REVISION" deleted
復原
如果使用新版
istiod測試應用程式時遇到問題,請按照下列步驟還原至舊版:重新標記命名空間,以啟用先前版本的
istiod自動插入功能。使用的指令取決於您是否在先前版本中使用修訂版本標籤或istio-injection=enabled。如果您使用修訂版本標籤進行自動插入:
kubectl label namespace NAMESPACE istio.io/rev=OLD_REVISION --overwrite如果你使用
istio-injection=enabled:kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
預期輸出內容:
namespace/NAMESPACE labeled
確認命名空間的修訂版本標籤與先前版本
istiod的修訂版本標籤相符:kubectl get ns NAMESPACE --show-labels重新啟動 Pod,觸發重新注入程序,讓 Proxy 採用先前版本:
kubectl rollout restart deployment -n NAMESPACE移除新版
istiod。確認下列指令中的REVISION值正確無誤。kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true移除新版
IstioOperator設定。kubectl delete IstioOperator installed-state-REVISION -n istio-system預期輸出內容如下:
istiooperator.install.istio.io "installed-state-REVISION" deleted
如果您未加入
--disable_canonical_service旗標,asmcli則已啟用 Canonical Service 控制器。建議您保持啟用狀態,但如需停用,請參閱「啟用及停用 Canonical Service 控制器」。如果已部署閘道,請務必變更命名空間或部署作業的修訂版本標籤,使其與先前的
istiod版本相符。請按照「安裝及升級閘道」指南中「就地升級」一節所述的相同程序操作。
部署與重新部署工作負載
啟用自動 Sidecar Proxy 插入功能 (自動插入) 後,安裝 (或升級) 程序才算完成。從 OSS Istio 遷移及升級時,請按照修訂版本升級程序 (在 Istio 說明文件中稱為「Canary 升級」) 進行。透過修訂版本升級時,系統會一併安裝新版控制層和現有控制層。接著,將部分工作負載移至新版本,這樣您就能先監控升級對一小部分工作負載的影響,再將所有流量遷移至新版本。
指令碼會在 istiod 上以 istio.io/rev=asm-1311-19 格式設定修訂版本標籤。如要啟用自動插入功能,請在命名空間中新增相符的修訂版本標籤。邊車容器加入器 Webhook 會使用這個修訂版本標籤,將插入的 Sidecar 與特定istiod修訂版本建立關聯。新增標籤後,請重新啟動命名空間中的 Pod,以便注入 Sidecar。
取得
istiod和istio-ingressgateway上的修訂版本標籤。 在下列指令中,將INGRESS_NAMESPACE值變更為執行 Ingress 閘道的命名空間:kubectl get pod -n INGRESS_NAMESPACE -L istio.io/rev如果您的 Ingress 閘道名稱為
istio-ingressgateway,指令輸出內容會類似於下列內容:NAME READY STATUS RESTARTS AGE REV istio-ingressgateway-65d884685d-6hrdk 1/1 Running 0 67m istio-ingressgateway-65d884685d-94wgz 1/1 Running 0 67m istio-ingressgateway-asm-182-2-8b5fc8767-gk6hb 1/1 Running 0 5s asm-1311-19 istio-ingressgateway-asm-182-2-8b5fc8767-hn4w2 1/1 Running 0 20s asm-1311-19 istiod-asm-1311-19-67998f4b55-lrzpz 1/1 Running 0 68m asm-1311-16 istiod-asm-1311-19-67998f4b55-r76kr 1/1 Running 0 68m asm-1311-16 istiod-asm-1311-16-5cd96f88f6-n7tj9 1/1 Running 0 27s asm-1311-19 istiod-asm-1311-16-5cd96f88f6-wm68b 1/1 Running 0 27s asm-1311-19
在輸出內容的
REV欄下方,記下新版本的修訂標籤值。在本範例中,該值為asm-1311-19。請注意舊版
istiod的修訂版本標籤值。 將工作負載移至新版本後,您需要這個 ID 才能刪除舊版istiod。在範例輸出中,舊版的修訂版本標籤值為asm-1311-16。
將 Ingress 閘道切換至新修訂版本。在下列指令中,請將
REVISION變更為與新版本修訂版本標籤相符的值。將INGRESS_NAMESPACE改為 Ingress 閘道執行的命名空間,並將INGRESS_NAME改為 Ingress 閘道名稱。kubectl patch service -n INGRESS_NAMESPACE INGRESS_NAME --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "REVISION"}]'預期的輸出內容:
service/istio-ingressgateway patched將修訂版本標籤新增至命名空間,並移除
istio-injection標籤 (如有)。在下列指令中,將REVISION變更為與istiod新修訂版本相符的值。kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
如果輸出內容中顯示
"istio-injection not found",請忽略。這表示該命名空間先前並未設定istio-injection標籤。如果命名空間同時有istio-injection和修訂版本標籤,自動插入行為會變成未定義,因此 Cloud Service Mesh 文件中的所有kubectl label指令都會明確確保只設定一個標籤。重新啟動 Pod,觸發重新注入作業。
kubectl rollout restart deployment -n NAMESPACE
測試應用程式,確認工作負載是否正常運作。
如果其他命名空間也有工作負載,請重複上述步驟,為命名空間加上標籤並重新啟動 Pod。
確認應用程式運作正常後,請繼續執行步驟,改用新版
istiod。如果應用程式有問題,請按照步驟進行復原。完成轉場
確認應用程式運作正常後,請移除舊版控制平面,完成新版轉換作業。
變更為
anthos-service-meshGitHub 存放區檔案所在的目錄。移動預設代碼。
<OUTPUT_DIR>/istioctl tag set default --revision <NEW REVISION NAME> --overwrite刪除舊的 Ingress 閘道部署作業。您執行的指令取決於是否要從 Istio 遷移,或是從舊版 Cloud Service Mesh 升級:
遷移
如果您是從 Istio 遷移,舊版
INGRESS_NAME沒有修訂版本標籤。kubectl delete deploy/INGRESS_NAME -n INGRESS_NAMESPACE升級
如果您是從舊版 Cloud Service Mesh 升級,請在下列指令中,將
OLD_REVISION換成舊版INGRESS_NAME的修訂版本標籤。kubectl delete deploy -l app=INGRESS_NAME,istio.io/rev=OLD_REVISION -n INGRESS_NAMESPACE --ignore-not-found=true刪除舊版
istiod。使用的指令取決於您是從 Istio 遷移,還是從舊版 Cloud Service Mesh 升級。遷移
如果您是從 Istio 遷移,舊版
istiod沒有修訂版本標籤。kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget,sa,rolebinding,role istiod -n istio-system --ignore-not-found=true如果您使用舊版控制層 (具有
OLD_REVISION修訂版本標籤),請按一下「upgrade」分頁標籤,然後使用OLD_REVISION完成 istiod 控制層的刪除作業。升級
如果您是從舊版 Cloud Service Mesh 升級,請務必在下列指令中,確認
OLD_REVISION與舊版istiod的修訂版本標籤相符。kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget,sa,rolebinding,role istiod-OLD_REVISION -n istio-system --ignore-not-found=true刪除舊版修訂的
validatingwebhookconfiguration、mutatingWebhookConfiguration、configMap、clusterRole和clusterRoleBinding資源:kubectl delete validatingwebhookconfiguration istio-validator-OLD_REVISION-istio-system --ignore-not-found kubectl delete mutatingWebhookConfiguration istio-sidecar-injector-OLD_REVISION --ignore-not-found kubectl delete configMap istio-OLD_REVISION istio-sidecar-injector-OLD_REVISION -n istio-system --ignore-not-found kubectl delete clusterRole,clusterRoleBinding istio-reader-clusterrole-OLD_REVISION-istio-system istiod-clusterrole-OLD_REVISION-istio-system istiod-gateway-controller-OLD_REVISION-istio-system --ignore-not-found移除舊版
IstioOperator設定。kubectl delete IstioOperator installed-state-OLD_REVISION -n istio-system --ignore-not-found=true預期的輸出內容如下所示:
istiooperator.install.istio.io "installed-state-OLD_REVISION" deleted
復原
如果使用新版
istiod測試應用程式時遇到問題,請按照下列步驟還原至舊版:重新標記命名空間,以啟用先前版本的
istiod自動插入功能。使用的指令取決於您是否在先前版本中使用修訂版本標籤或istio-injection=enabled。如果您使用修訂版本標籤進行自動插入:
kubectl label namespace NAMESPACE istio.io/rev=OLD_REVISION --overwrite如果你使用
istio-injection=enabled:kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
預期輸出內容:
namespace/NAMESPACE labeled
確認命名空間的修訂版本標籤與先前版本
istiod的修訂版本標籤相符:kubectl get ns NAMESPACE --show-labels重新啟動 Pod,觸發重新注入程序,讓 Proxy 採用先前版本:
kubectl rollout restart deployment -n NAMESPACE移除新的
istio-ingressgatewayDeployment。確認下列指令中的REVISION值是否正確。kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=REVISION -n istio-system --ignore-not-found=true移除新版
istiod。確認下列指令中的REVISION值正確無誤。kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true移除新版
IstioOperator設定。
kubectl delete IstioOperator installed-state-REVISION -n istio-system --ignore-not-found=true預期輸出內容如下:
istiooperator.install.istio.io "installed-state-REVISION" deleted
- 如果未加入
--disable_canonical_service旗標,指令碼會啟用 Canonical Service 控制器。建議您保持啟用狀態,但如需停用,請參閱「啟用及停用 Canonical Service 控制器」。