使用 Helm 升級
請按照本指南使用 Helm 升級和配置 Istio 網格。本指南假設您先前已使用 Helm 進行安裝,安裝的是 Istio 的先前次要或修補版本。
本指南中使用的base
和 istiod
的 Helm 圖表與透過 Istioctl 安裝 Istio 時使用的相同。然而,透過 Istioctl 進行的安裝會使用不同的 gateway 圖表,與本指南中描述的 圖表 不同。先決條件
執行任何必要的 平台特定設定。
檢查 Pod 和服務的要求。
安裝 Helm 用戶端,版本 3.6 或以上。
設定 Helm 儲存庫
$ helm repo add istio https://istio-release.storage.googleapis.com/charts
$ helm repo update
升級步驟
在升級 Istio 之前,建議執行 istioctl x precheck
命令,以確保升級與您的環境相容。
$ istioctl x precheck
✔ No issues found when checking the cluster. Istio is safe to install or upgrade!
To get started, check out <https://istio.dev.org.tw/latest/docs/setup/getting-started/>
金絲雀升級 (建議)
您可以安裝 Istio 控制平面的 Canary 版本,以使用以下步驟驗證新版本是否與您現有的設定和資料平面相容
升級 Istio base 圖表,以確保所有叢集範圍的資源都是最新的
$ helm upgrade istio-base istio/base -n istio-system
透過設定修訂版本值,安裝 Istio 探索圖表的 Canary 版本
$ helm install istiod-canary istio/istiod \ --set revision=canary \ -n istio-system
驗證您的叢集中已安裝兩個版本的
istiod
$ kubectl get pods -l app=istiod -L istio.io/rev -n istio-system NAME READY STATUS RESTARTS AGE REV istiod-5649c48ddc-dlkh8 1/1 Running 0 71m default istiod-canary-9cc9fd96f-jpc7n 1/1 Running 0 34m canary
如果您使用 Istio 閘道,請透過設定修訂版本值,安裝閘道圖表的 Canary 修訂版本
$ helm install istio-ingress-canary istio/gateway \ --set revision=canary \ -n istio-ingress
驗證您的叢集中已安裝兩個版本的
istio-ingress gateway
$ kubectl get pods -L istio.io/rev -n istio-ingress NAME READY STATUS RESTARTS AGE REV istio-ingress-754f55f7f6-6zg8n 1/1 Running 0 5m22s default istio-ingress-canary-5d649bd644-4m8lp 1/1 Running 0 3m24s canary
有關閘道 Canary 升級的深入文件,請參閱升級閘道。
按照此處的步驟,測試或遷移現有的工作負載以使用 Canary 控制平面。
在驗證並遷移您的工作負載以使用 Canary 控制平面後,您可以解除安裝舊的控制平面
$ helm delete istiod -n istio-system
再次升級 Istio base 圖表,這次使新的
canary
修訂版本成為叢集範圍的預設值。$ helm upgrade istio-base istio/base --set defaultRevision=canary -n istio-system
穩定版本標籤
在將命名空間移動到新的修訂版本時,手動重新標記命名空間可能會很繁瑣且容易出錯。修訂版本標籤解決了這個問題。修訂版本標籤是指向修訂版本的穩定識別碼,可用於避免重新標記命名空間。網格運算子可以簡單地變更標籤以指向新的修訂版本,而無需重新標記命名空間。所有使用該標籤標記的命名空間將同時更新。用法
考慮一個安裝了兩個修訂版本的叢集,1-23-1
和 1-24-0
。叢集運算子建立一個指向舊的穩定 1-23-1
版本的修訂版本標籤 prod-stable
,以及一個指向較新的 1-24-0
修訂版本的修訂版本標籤 prod-canary
。可以透過以下命令達到該狀態$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-stable}" --set revision=1-23-1 -n istio-system | kubectl apply -f -
$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-canary}" --set revision=1-24-0 -n istio-system | kubectl apply -f -
修訂版本、標籤和命名空間之間的結果對應如下所示
叢集運算子可以透過 istioctl tag list
命令檢視此對應以及標記的命名空間
$ istioctl tag list
TAG REVISION NAMESPACES
default 1-23-1 ...
prod-canary 1-24-0 ...
prod-stable 1-23-1 ...
在叢集運算子對以 prod-canary
標記的控制平面的穩定性感到滿意後,可以透過修改 prod-stable
修訂版本標籤以指向較新的 1-24-0
修訂版本,透過一個動作更新標記為 istio.io/rev=prod-stable
的命名空間。
$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{prod-stable}" --set revision=1-24-0 -n istio-system | kubectl apply -f -
現在,修訂版本、標籤和命名空間之間更新的對應如下所示
重新啟動標記為 prod-stable
的命名空間中的注入工作負載,現在將導致這些工作負載使用 1-24-0
控制平面。請注意,將工作負載遷移到新的修訂版本不需要重新標記命名空間。
預設標籤
標籤 default
指向的修訂版本被視為預設修訂版本,並且具有額外的語義含義。預設修訂版本執行以下功能
- 為
istio-injection=enabled
命名空間選取器、sidecar.istio.io/inject=true
物件選取器和istio.io/rev=default
選取器注入 sidecar - 驗證 Istio 資源
- 從非預設修訂版本竊取領導鎖,並執行單例網格職責(例如,更新資源狀態)
若要將修訂版本 1-24-0
設定為預設值,請執行
$ helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags="{default}" --set revision=1-24-0 -n istio-system | kubectl apply -f -
當將 default
標籤與現有的非修訂版本 Istio 安裝一起使用時,建議移除舊的 MutatingWebhookConfiguration
(通常稱為 istio-sidecar-injector
),以避免較舊和較新的控制平面都嘗試注入。就地升級
您可以使用 Helm 升級工作流程在叢集中執行 Istio 的原地升級。
升級 Istio base 圖表
$ helm upgrade istio-base istio/base -n istio-system
升級 Istio 探索圖表
$ helm upgrade istiod istio/istiod -n istio-system
(選用)升級叢集中安裝的閘道圖表
$ helm upgrade istio-ingress istio/gateway -n istio-ingress
解除安裝
請參閱我們Helm 安裝指南中的解除安裝部分。