日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

MSE+云效AppStack實現應用服務全鏈路灰度

在應用開發、測試驗證通過后,進行生產發布前,為了降低新版本發布帶來的風險,期望能夠先部署到灰度環境,用小部分業務流量進行全鏈路灰度驗證,驗證通過后再全量發布生產。本文主要介紹如何通過云效 AppStack 和 MSE 微服務引擎實現灰度發布。

場景描述

本文將以 A、B、C 三個 SpringCloud 應用為例,展示如何通過阿里云云效 AppStack 來整合 MSE 全鏈路灰度的功能,實現將應用一鍵部署到灰度環境,并進行全鏈路灰度的測試。假設已有 A、B、C 三個應用的基線版本正在運行。整體上應用的調用鏈路是,客戶端入口流量首先達到網關應用,而后按順序經過 A、B、C 三個應用:

image

一次需求發布窗口中,應用 A 和 C 進行了迭代,需要對 A 和 C 的新版本進行全鏈路灰度測試,調用鏈路如下:

image

前提條件

開啟 MSE 微服務治理

操作步驟

步驟一:創建應用,部署基線版本

在云效 應用交付AppStack 創建三個應用,用于部署應用的基線版本。應用的初始化可以使用應用模板批量配置(詳見 應用模板)。

高的 - 2024-12-16T142315.562.png

以 spring-cloud-a 應用為例配置流程如下:

  1. 應用關聯代碼倉庫,可以在Codeup中導入示例代碼 https://github.com/aliyun/alibabacloud-microservice-demo.git

    高的 - 2024-12-16T142624.908.png

  2. 應用環境配置,應用通常可以劃分開發環境、測試環境、預發環境、生產環境,可以關聯不同的部署資源(如K8s集群),分別對不同階段測試驗證,并最終提供線上服務。

    高的 - 2024-12-16T143141.420.png

  3. 應用 Kubernetes 部署編排 YAML 配置。

    • 將容器鏡像定義成占位符{{ .AppStack.image.backend }},由流水線運行時傳入構建好的鏡像。

    • 在應用配置的spec.template.metadata.labels下加入 MSE 基本配置及灰度相關。

    說明
    • msePilotCreateAppName為 MSE 服務治理接入的應用名;msePilotAutoEnable為是否接入MSE服務治理的開關 on 表示開啟,off 表示關閉;alicloud.service.tag則是 MSE 用于灰度發布的節點標簽。您可以在 MSE 服務治理控制臺,節點詳情頁面看到節點的標簽情況。更多信息,請參見ACK和ACS微服務應用接入MSE治理中心(Java版)節點詳情

    • {{if eq .AppStack.envName "gray" }}是基于 GO template 的方式識別當前云效發布的應用環境。如果環境名稱為gray,則為灰度服務。更多信息,請參見Kubernetes 部署編排

    • nacos-server 需要替換成上述創建的 Nacos 內網域名。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: spring-cloud-a-{{ .AppStack.envName }}
      labels:
        run: spring-cloud-a-{{ .AppStack.envName }}
      namespace: {{ .Values.namespace }}
    spec:
      selector:
        matchLabels:
          app: spring-cloud-a-{{ .AppStack.envName }}
      template:
        metadata:
          labels:
            app: spring-cloud-a-{{ .AppStack.envName }}
            # MSE 灰度相關配置
            msePilotCreateAppName: spring-cloud-a
            msePilotAutoEnable: 'on'
            {{ if eq .AppStack.envName "gray" }}
            alicloud.service.tag: gray
            {{ end }}
        spec:
          containers:
          - name: spring-cloud-a
            image: {{ .AppStack.image.backend }} # 應用鏡像占位符,由流水線運行時傳入
            imagePullPolicy: Always
            ports:
              - containerPort: 20001
            livenessProbe:
              tcpSocket:
                port: 20001
              initialDelaySeconds: 30
              periodSeconds: 60
            env:
            - name: spring.cloud.nacos.discovery.server-addr
              value: 'nacos-server'   # nacos-server 替換為上述創建的 Nacos 內網域名
            - name: dubbo.registry.address
              value: 'nacos://nacos-server:8848'  # nacos-server 替換為上述創建的 Nacos 內網域名

    高的 - 2024-12-16T143423.095.png

  4. 應用研發流程配置分為測試階段、預發階段、生產階段。生產階段包括鏡像構建(也可以選擇已有鏡像發布)、發布審核、生產發布多個任務。

    • 鏡像構建:選擇鏡像構建組件,配置需要推送到的鏡像倉庫、標簽默認${DATETIME}、用于構建的 Dockerfile 路徑本示例為mse-simple-demo/A/Dockerfile

    • 人工卡點:配置生產發布的審批人。

    • 生產環境部署:選擇AppStack部署組件,應用自動填充當前應用、環境選擇「生產環境-prod」,制品選擇構建的鏡像。

    高的 - 2024-12-16T143603.089.png

    高的 - 2024-12-16T143714.491.png

  5. 單擊運行生產發布流程,觸發應用鏡像構建,鏡像構建成功后推送到目標鏡像倉庫。人工審批通過后,觸發部署正式環境,單擊查看部署單詳情,查看部署進度,部署單成功后即完成了正式(基線)環境的部署。進入環境詳情可以查看 Deployment 資源狀態和詳細信息。

    高的 - 2024-12-16T144136.556.png

    高的 - 2024-12-16T144303.488.png

    高的 - 2024-12-16T144335.960.png

以上即完成了一個應用的配置和上線流程,從應用 spring-cloud-a 的代碼、環境、編排 YAML、研發流程等配置實現spring-cloud-a 基線環境的部署。spring-cloud-b、 spring-cloud-c 部署流程同上即可。

步驟二:配置灰度流程

  1. 創建 MSE 全鏈路灰度泳道。

    1. 創建全鏈路灰度泳道組:進入 MSE 治理中心 > 全鏈路灰度,單擊+ 創建泳道組及泳道(如果您已經創建過泳道組,則單擊+ 創建泳道組)。入口類型選擇MSE 云原生網關,泳道組流量入口選擇目標云原生網關,泳道組涉及應用選擇 spring-cloud-a、spring-cloud-b、spring-cloud-c。

    2. 創建分流泳道:泳道標簽設置為 gray,路由規則條件列表添加 Parameter group=gray,則請求參數中攜帶 group=gray的請求將去往灰度泳道。

高的 - 2024-12-16T145307.978.png

高的 - 2024-12-16T145447.440.png

  1. AppStack 應用增加灰度流程。

    進入云效應用交付AppStack應用,在設置 > 研發流程配置 > 生產階段編輯流水線。

    1. 在發布階段添加灰度環境部署任務,選擇AppStack 部署組件,應用自動填充當前應用,環境選擇灰度環境-gray,制品選擇構建的鏡像。

    高的 - 2024-12-16T150324.780.png

    1. 在灰度環境清理階段添加灰度環境清理任務,選擇AppStack清理環境組件,應用自動填充當前應用,環境選擇灰度環境-gray,選擇僅清理資源保留環境元數據,下次發布時可以重新部署拉起灰度服務資源。

      高的 - 2024-12-16T150431.772.png

配置完成后,保存生產階段流程,即可進入下一步。

步驟三:新需求發布,部署灰度環境,灰度驗證

  1. 灰度環境部署。

當接收到一個新的業務需求,涉及 spring-cloud-a 和 spring-cloud-c 應用的改動。A、C應用各自完成代碼開發、測試預發驗證后,進入生產發布階段。分別單擊運行A、C 生產階段研發流程,觸發A、C灰度環境部署,單擊查看部署單詳情,部署單成功后即完成 A、C 灰度環境的部署。

高的 - 2024-12-16T151028.992.png

  1. 開始灰度驗證。

  • 發起帶灰度標識的請求,則結果如下(A 和 C 進行了灰度發布,B 沒有進行灰度發布,所以請求去往了 B 的基線環境):

    > curl -X GET http://47.96.XX.XXX/A/a?group=gray
    Agray[192.168.110.161][config=base] -> B[192.168.110.14] -> Cgray[192.168.110.160]
  • 如果請求不帶灰度標識,則去往 A、B、C 的基線環境:

    > curl -X GET http://47.96.XX.XXX/A/a?group=xxx
    A[192.168.110.162][config=base] -> B[192.168.110.57] -> C[192.168.110.62]

可以在 MSE 控制臺上看到剛剛發起的灰度請求。高的 - 2024-12-16T151519.183.png

步驟四:灰度驗證通過,發布生產環境

上述灰度驗證通過后,即可繼續發布生產環境。點擊手動觸發生產環境發布,查看生產發布批次,觀測新老版本號,部署完成后觀測生產監控日志。

高的 - 2024-12-16T151748.411.png

高的 - 2024-12-16T151829.620.png

步驟五:生產發布成功后,銷毀灰度環境

生產發布成功后,銷毀灰度環境資源,所有流量都進入生產環境。

高的 - 2024-12-16T151910.754.png

至此即完成了應用基線環境的準備、灰度流程配置、灰度發布驗證、生產發布、灰度銷毀完整流程。