全部產品
Search
文件中心

Alibaba Cloud Service Mesh:ASM網關灰階升級

更新時間:Jun 30, 2024

ASM網關支援灰階升級,能夠提供流暢的升級體驗。本文以ASM原地升級為例,介紹如何使用ASM網關的灰階升級功能。

前提條件

背景資訊

網關作為業務的流量總入口和總出口,對可用性有著極高的要求。為了更好地保證升級後業務的連續性,ASM網關支援灰階升級。您可以通過配置先啟動一個新版本的網關Pod來驗證流量,驗證通過後再完全升級網關。驗證過程中如果出現任何問題,您可以隨時刪除這個新版本的Pod,問題解決後再繼續升級。

說明

ASM網關的灰階升級與ASM的金絲雀升級並不相同。無論您使用ASM的原地升級還是金絲雀升級,ASM網關的灰階升級均可以使用。

網關灰階升級介紹

ASM的控制面升級和資料面升級是分離的,您可以在控制面升級完成後再升級資料面。網關灰階升級的原理如下:

建立一個與當前控制面版本對應的網關單副本Deployment,這個Deployment被稱為Canary Deployment。它和網關原本的Deployment同時屬於一個Service,不同點是這個Deployment後面會加上-canary的尾碼。

重要

如果網關命名空間中原本存在帶了-canary尾碼的同名Deployment,此時不會覆蓋該Deployment。使用該功能前,請確保不存在帶-canary尾碼的同名Deployment。例如,如果網關名稱為ingressgateway,請確保istio-system命名空間下沒有名稱為istio-ingressgateway-canary的Deployment。

  • ASM原地升級

    控制面升級完成後,此時網關還是舊版本。您可以先建立Canary Deployment。Canary Deployment就緒後,部分流量就會被分配到這個灰階副本。此時觀察灰階副本上的流量是否正常。如果不正常,保留現場日誌,刪除灰階副本。解決問題後重新部署灰階副本進行驗證。驗證無誤之後,將網關升級至新版本。

  • ASM金絲雀升級

    網關的灰階升級同樣支援在ASM金絲雀升級中使用。在ASM金絲雀升級過程中,將新版本切換為預設控制面之後,此時網關處於待升級狀態。您可以部署網關的灰階副本進行驗證,驗證無誤後升級網關。

    網關升級到新版本之後,您可以通過配置刪除部署的灰階副本。

步驟一:升級控制面

為了盡量在升級過程中降低流量損失的風險,請在升級前開啟網關的優雅下線功能。具體操作,請參見使用優雅下線功能避免流量損失

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇網格執行個體 > 升級管理

  3. 升級管理頁面的原地升級頁簽,單擊運行檢查,在重要提示對話方塊,單擊確定

    說明

    若頁面顯示當前已為最新版本,無需升級,表明網格是最新版本,無法進行升級操作。

  4. 升級預檢查通過後,單擊開始升級,在重要提示對話方塊,單擊確定

步驟二:部署ASM網關的灰階副本

ASM網關的灰階副本通過Annotation開啟。

  1. 在ASM網關的YAML中添加asm.alibabacloud.com/enable-canary-deployment: "true"的Annotation,部署一個灰階副本。

    方式一:通過ASM控制台

    1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

    2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇ASM網關 > 入口網關

    3. 入口網關頁面,單擊目標網關右側的查看YAML,在編輯對話方塊,將asm.alibabacloud.com/enable-canary-deployment: "true"註解添加到metadata欄位下的annotations中,然後單擊確定

    方式二:通過kubectl命令

    1. 執行以下命令,開啟ASM網關的YAML檔案。

      kubectl edit IstioGateway <YOUR-INGRESSGATEWAY-NAME> -n istio-system
    2. 編輯YAML檔案,將asm.alibabacloud.com/enable-canary-deployment: "true"註解添加到metadata欄位下的annotations中,然後進行儲存。

    展開查看添加Annotation的YAML樣本

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      labels:
        asm-gateway-type: ingress
      annotations:
        asm.alibabacloud.com/enable-canary-deployment: "true"  # 添加此Annotation。
      name: ingressgateway
      namespace: istio-system
    spec:
      clusterIds:
        - xxxxxxxxxxxxxx
      disableContainerPortExposed: true
      dnsPolicy: ClusterFirst
      externalTrafficPolicy: Local
      gatewayType: ingress
      ports:
        - name: http-0
          port: 80
          protocol: HTTP
          targetPort: 80
      replicaCount: 1
      resources:
        limits:
          cpu: '2'
          memory: 4G
        requests:
          cpu: 200m
          memory: 256Mi
      rollingMaxSurge: 25%
      rollingMaxUnavailable: 25%
      serviceAnnotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain: 'on'
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout: '10'
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: PayByCLCU
        service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
      serviceType: LoadBalancer
  2. 使用資料面KubeConfig,執行以下命令,查看部署的灰階副本。

    本樣本網關名稱為ingressgateway,請您根據實際情況進行替換。

    kubectl -n istio-system get deployment | grep ingressgateway

    預期輸出:

    istio-ingressgateway                1/1     1            1           10m
    istio-ingressgateway-canary         1/1     1            1           55s

    帶有-canary尾碼的Deployment即為灰階副本。

    灰階副本就緒後,會有部分流量進入對應的Pod,此時請觀察到達該網關的流量是否正常。如果出現異常,請保留網關日誌,刪除配置的Annotation。該灰階副本會被刪除,所有流量將全部流向舊版本網關副本。問題解決後,重新部署灰階副本進行驗證。

步驟三:驗證無誤後,升級網關

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇網格執行個體 > 升級管理

  3. 資料平面地區的升級列,選中目標網關,單擊升級網關,在重要提示對話方塊,單擊確定,等待網關升級完成。

步驟四:刪除灰階副本

網關升級完成後,刪除步驟二中增加的Annotation,灰階副本會被自動刪除。

重要

灰階副本永遠跟隨控制面的版本,如果不刪除,灰階副本會在下次升級控制面時同步升級。