使用 Helm 升級

請按照本指南使用 Helm 升級和配置 Istio 網格。本指南假設您先前已使用 Helm 進行安裝,安裝的是 Istio 的先前次要或修補版本。

本指南中使用的 baseistiod 的 Helm 圖表與透過 Istioctl 安裝 Istio 時使用的相同。然而,透過 Istioctl 進行的安裝會使用不同的 gateway 圖表,與本指南中描述的 圖表 不同。

先決條件

  1. 執行任何必要的 平台特定設定

  2. 檢查 Pod 和服務的要求

  3. 安裝 Helm 用戶端,版本 3.6 或以上。

  4. 設定 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 版本,以使用以下步驟驗證新版本是否與您現有的設定和資料平面相容

  1. 升級 Istio base 圖表,以確保所有叢集範圍的資源都是最新的

    $ helm upgrade istio-base istio/base -n istio-system
    
  2. 透過設定修訂版本值,安裝 Istio 探索圖表的 Canary 版本

    $ helm install istiod-canary istio/istiod \
        --set revision=canary \
        -n istio-system
    
  3. 驗證您的叢集中已安裝兩個版本的 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
    
  4. 如果您使用 Istio 閘道,請透過設定修訂版本值,安裝閘道圖表的 Canary 修訂版本

    $ helm install istio-ingress-canary istio/gateway \
        --set revision=canary \
        -n istio-ingress
    
  5. 驗證您的叢集中已安裝兩個版本的 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 升級的深入文件,請參閱升級閘道

  6. 按照此處的步驟,測試或遷移現有的工作負載以使用 Canary 控制平面。

  7. 在驗證並遷移您的工作負載以使用 Canary 控制平面後,您可以解除安裝舊的控制平面

    $ helm delete istiod -n istio-system
    
  8. 再次升級 Istio base 圖表,這次使新的 canary 修訂版本成為叢集範圍的預設值。

    $ helm upgrade istio-base istio/base --set defaultRevision=canary -n istio-system
    

穩定版本標籤

在將命名空間移動到新的修訂版本時,手動重新標記命名空間可能會很繁瑣且容易出錯。修訂版本標籤解決了這個問題。修訂版本標籤是指向修訂版本的穩定識別碼,可用於避免重新標記命名空間。網格運算子可以簡單地變更標籤以指向新的修訂版本,而無需重新標記命名空間。所有使用該標籤標記的命名空間將同時更新。

用法

考慮一個安裝了兩個修訂版本的叢集,1-23-11-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 -

修訂版本、標籤和命名空間之間的結果對應如下所示

Two namespaces pointed to prod-stable and one pointed to prod-canary
兩個命名空間指向 prod-stable,一個指向 prod-canary

叢集運算子可以透過 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 -

現在,修訂版本、標籤和命名空間之間更新的對應如下所示

Namespace labels unchanged but now all namespaces pointed to {{< istio_full_version_revision >}}
命名空間標籤未變更,但現在所有命名空間都指向 {{< istio_full_version_revision >}}

重新啟動標記為 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 的原地升級。

  1. 升級 Istio base 圖表

    $ helm upgrade istio-base istio/base -n istio-system
    
  2. 升級 Istio 探索圖表

    $ helm upgrade istiod istio/istiod -n istio-system
    
  3. (選用)升級叢集中安裝的閘道圖表

    $ helm upgrade istio-ingress istio/gateway -n istio-ingress
    

解除安裝

請參閱我們Helm 安裝指南中的解除安裝部分。

此資訊是否有用?
您有任何改進建議嗎?

感謝您的回饋!