IBM Cloud Docs
更新 Istio

更新 Istio

請勿使用 istioctl 更新受管理附加元件所安裝的 Istio 版本。 更新時,受管理的 Istio 附加元件也會包含 Istio 版本的更新。

更新至 Istio 附加元件的次要版本

IBM Cloud IBM Cloud Kubernetes Service 所支援的最新 Istio 版本自動滾動更新修補程式,讓您的所有 Istio 元件都保持最新狀態。 支援的版本已通過 IBM Cloud 測試,並獲准在 IBM Cloud Kubernetes Service 中使用。

開始之前:

更新次要版本時,請記住下列事項:

  • 您一次只能手動更新 Istio 附加元件的一個版本。 若要更新兩個或更多版本的 Istio 附加元件,您可以重複手動更新程序,或者 卸載 附加元件,然後安裝 較後的版本。

  • 您無法將受管理的 Istio 附加元件還原為先前的版本。 若要回復到較早的次要版本,您必須 解除安裝 附加元件,然後再 安裝 較早的版本。

  • 當您將 istio-system 命名空間中的 Istio 控制元件更新至最新的次要版本時,您可能會遇到中斷性變更。 檢閱次版本更新期間發生的下列變更。

    • 當更新推出到控制平面 pod 時,會重新建立 pod。 直到更新完成後,Istio 控制平面才會完全可用。
    • 在更新期間,Istio 資料平面會繼續運作。 但是,服務網狀結構中某些應用程式的流量可能會短暫中斷。
    • istio-ingressgateway 負載平衡器的外部 IP 位址在更新期間或更新後都不會變更。

要更新 Istio 附加元件的次要版本:

  1. 檢視您的 Istio 附加元件的目前版本。

    kubectl get iop managed-istio -n ibm-operators -o jsonpath='{.metadata.annotations.version}'
    
  2. 檢視可用的 Istio 附加元件版本。

    ibmcloud ks addon-versions
    
  3. 檢視 Istio 附加元件變更記錄 中每個版本的變更。

  4. 如果您要從版本 1.11 升級到版本 1.12,而您的 Istio 元件是以版本 1.10 或更早的版本配置的:

    1. 執行指令可取得變更 webhook 設定的詳細資訊。

      kubectl get mutatingwebhookconfigurations
      

      輸出範例

      NAME                     WEBHOOKS   AGE
      istio-sidecar-injector   5          32m
      
    2. 在輸出中,找到 istio-sidecar-injector 並檢視 WEBHOOKS 列。 如果有 5 個或更多 webhooks,請執行下列指令刪除額外的 webhooks。

      kubectl delete mutatingwebhookconfigurations istio-sidecar-injector && kubectl rollout restart deploy addon-istio-operator -n ibm-operators
      

      輸出範例

      mutatingwebhookconfiguration.admissionregistration.k8s.io "istio-sidecar-injector" deleted
      
    3. 檢查額外的 webhooks 是否已刪除。 取得變更 webhook 設定的詳細資訊,並驗證是否有 4 個 istio-sidecar-injector webhook。

      kubectl get mutatingwebhookconfigurations
      

      輸出範例

      NAME                     WEBHOOKS   AGE
      istio-sidecar-injector   4          60s
      
    4. 執行指令以取得驗證 webhook 設定的詳細資訊。

      kubectl get validatingwebhookconfigurations
      

      輸出範例

      NAME                           WEBHOOKS   AGE
      istio-validator-istio-system   2          66s
      istiod-istio-system            1          31m
      
    5. 檢視輸出。 如果 istiod-istio-system webhook 在列,請執行下列指令將其刪除。

      kubectl delete ValidatingWebhookConfiguration istiod-istio-system
      

      輸出範例

      validatingwebhookconfiguration.admissionregistration.k8s.io "istiod-istio-system" deleted
      
    6. 驗證 istiod-istio-system webhook 是否已不再列出。

      kubectl get validatingwebhookconfigurations
      

      輸出範例

      NAME                           WEBHOOKS   AGE
      istio-validator-istio-system   2          2m
      
  5. 更新 Istio 附加元件。

    ibmcloud ks cluster addon update istio --version <version> -c <cluster_name_or_ID>
    
  6. 繼續之前,請確認更新是否完成。

    更新程序可能需要 20 分鐘才能完成。

    1. 確保 Istio 附加元件的 Health StatenormalHealth StatusAddon Ready。 如果狀態為 updating,則更新尚未完成。

      ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
      
    2. 確保 istio-system 命名空間中的控制平面元件 pod 的 STATUSRunning

      kubectl get pods -n istio-system
      
      NAME                                                     READY   STATUS    RESTARTS   AGE
      istio-system    istio-egressgateway-6d4667f999-gjh94     1/1     Running     0          61m
      istio-system    istio-egressgateway-6d4667f999-txh56     1/1     Running     0          61m
      istio-system    istio-ingressgateway-7bbf8d885-b9xgp     1/1     Running     0          61m
      istio-system    istio-ingressgateway-7bbf8d885-xhkv6     1/1     Running     0          61m
      istio-system    istiod-5b9b5bfbb7-jvcjz                  1/1     Running     0          60m
      istio-system    istiod-5b9b5bfbb7-khcht                  1/1     Running     0          60m
      
  7. 更新您的 istioctl 用戶端和 sidecars

更新 istioctl 用戶端及 Sidecar

每當 Istio 管理附加元件更新時,請更新您的 istioctl 用戶端和應用程式的 Istio sidecars。

例如,附加元件的修補程式版本可能會由 IBM Cloud Kubernetes Service 自動更新,或者您可以 更新附加元件的次要版本。 無論哪種方式,請更新您的 istioctl 用戶端及應用程式現有的 Istio Sidecar 以與 Istio 的附加程式版本相符。

  1. 取得 istioctl 用戶端和 Istio 附加控制平面元件的版本。

    istioctl version --short=false
    

    輸出範例

    client version: version.BuildInfo{Version:"1.11.2"}
    pilot version: version.BuildInfo{Version:1.23.5}
    pilot version: version.BuildInfo{Version:1.23.5}
    data plane version: version.ProxyInfo{ID:"istio-egressgateway-77bf75c5c-vp97p.istio-system", IstioVersion:1.23.5}
    data plane version: version.ProxyInfo{ID:"istio-egressgateway-77bf75c5c-qkhgm.istio-system", IstioVersion:1.23.5}
    data plane version: version.ProxyInfo{ID:"istio-ingressgateway-6dcb67b64d-dffhq.istio-system", IstioVersion:1.23.5}
    data plane version: version.ProxyInfo{ID:"httpbin-74fb669cc6-svc8x.default", IstioVersion:1.23.5}
    data plane version: version.ProxyInfo{ID:"istio-ingressgateway-6dcb67b64d-cs9r9.istio-system", IstioVersion:1.23.5}
    ...
    
  2. 在輸出中,比較 client version (istioctl) 與 Istio 控制平面元件的版本,例如 pilot version。 如果 client version 和控制平面元件版本不匹配:

    1. 下載與控制平面元件相同版本的 istioctl 用戶端。

      curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.23.5 sh -
      
    2. 導覽至 Istio 套件目錄。

      cd istio-1.23.5
      
    3. Linux 和 使用者:將 用戶端加入您的 系統變數。macOS istioctl PATH

      export PATH=$PWD/bin:$PATH
      
  3. 在步驟 1 的輸出中,比較每個資料平面 pod 的 pilot versiondata plane version

    • 如果 pilot versiondata plane version 相匹配,則不需要進一步更新。
    • 如果 pilot versiondata plane version 不匹配,請重新啟動執行舊版本的資料平面 pod 的部署。 pod 名稱和命名空間會以 data plane version: version.ProxyInfo{ID:"<pod_name>.<namespace>", IstioVersion:"1.8.4"} 的方式列在每個項目中。
    kubectl rollout restart deployment <deployment> -n <namespace>
    

從不支援的 Istio 附加元件版本更新

更新您的 Istio 元件 至 IBM Cloud Kubernetes Service 支援的最新修補程式版本。

從 Istio 附加元件遷移到社群 Istio

您可以遷移至社群 Istio,而不是使用受管理的 Istio 附加元件。

開始之前

步驟 1:從主控台停用 Istio 附加元件

從主控台或 CLI 停用附加元件。

  1. 群集儀表板中,按一下要移除 Istio 附加元件的群集名稱。

  2. 導覽至附加元件區段。

  3. 在「受管理 Istio」卡上,按一下「動作」功能表圖示。

  4. 按一下解除安裝。 管理的 Istio 附加元件在此群集中已停用。

  5. 在 Managed Istio 卡上,確認您解除安裝的附加元件已不再列出。

步驟 1:從 CLI 停用 Istio 附加元件

停用附加元件,並驗證是否仍有其他 Istio 附加元件。

  1. 停用 istio 附加程式。
    ibmcloud ks cluster addon disable istio --cluster <cluster_name_or_ID> -f
    
  2. 驗證在此叢集裡已停用所有受管理 Istio 附加程式。 輸出中未傳回任何 Istio 附加程式。
    ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
    
  3. 等待 10 分鐘後再繼續下一步。 這讓我們有時間取消管理 istio 運算符號。

步驟 2:縮小 Istio 操作員的規模

縮小 Istio 操作員部署的規模。

執行下列指令:

kubectl scale deployment -n ibm-operators addon-istio-operator --replicas=0

步驟 3:節省資源

儲存您在 istio-system 命名空間中建立或修改的任何資源,以及自訂資源定義 (CRD) 自動產生的所有 Kubernetes 資源。

  1. 儲存 managed-istio-custom ConfigMap,以排除故障或稍後重新安裝附加元件。

    kubectl get cm -n ibm-operators managed-istio-custom -o yaml > Customizations.yaml
    
  2. 儲存所有 IstioOperator CR (IOP)。

    • 列出 IOP 資源:
      kubectl get iop -A
      
    • 對於列出的每個 IOP 資源,移除 finalizer。 使用 managed-istio IOP 的範例:
      kubectl patch -n ibm-operators istiooperator/managed-istio --type json --patch='[ { "op": "remove", "path": "/metadata/finalizers" } ]'
      
    • 針對列出的每個 IOP 資源,將每個資源儲存到檔案中:
      kubectl get iop -n <IOP_namespace> <IOP_name> -o yaml > <IOP_name>.yaml
      
  3. 等待 10 分鐘後再繼續下一步。

步驟 4:變更 IOP 的安裝程式

刪除所有 Istio 操作員 (IOP) 資源,例如自訂入口閘道的資源。

  1. 請確定您的 istioctl cli 工具是必要的修補程式版本。

    istioctl version
    
  2. 針對上一步儲存的每個 IOP 檔案,執行 upgrade 指令。

    istioctl upgrade -f <filename>.yaml
    

步驟 5:移除 Istio 操作員和 IOP

刪除 Istio 操作員部署、服務帳戶、群集角色綁定、群集角色和所有 IOP。

  1. 執行下列指令刪除 istio 操作員部署:

    kubectl delete deployment -n ibm-operators addon-istio-operator --ignore-not-found=true
    kubectl delete serviceaccount -n ibm-operators addon-istio-operator --ignore-not-found=true
    kubectl delete clusterrolebinding addon-istio-operator --ignore-not-found=true
    kubectl delete clusterrole addon-istio-operator --ignore-not-found=true
    
  2. 刪除 IOP。

    • 列出 IOP 資源:
      kubectl get iop -A
      
    • 對於列出的每個 IOP 資源,將其刪除:
      kubectl delete IstioOperator <resource_name> -n <namespace>
      

步驟 6:移除 ConfigMap

因為 ConfigMap 較早前已儲存,所以可以移除。

移除 managed-istio-custom ConfigMap。

kubectl delete cm -n ibm-operators managed-istio-custom

移除附加元件的工作已經完成,您可以繼續使用並視需要升級社群 Istio。