灰度發布是可以幫助您漸進式更新Deployment的工具。它能結合Ingress Controller實現多版本共存,發布暫停,流量百分比切換,健康檢查等功能,極大解放灰度發布過程中的手動操作,全自動化實現線上灰度流量切換。本文介紹灰度發布的概念和如何安裝灰度發布組件。
什么是灰度發布?
灰度發布,又稱金絲雀發布,是將應用的舊版本A與新版本B同時部署在環境中,業務請求可能會被路由到版本A的后端上,也可能會被路由到版本B的后端上。您可以自定義灰度發布策略,快速調整版本A和B的流量占比。
灰度發布可以在發布新版本應用時,自定義控制新版本應用流量比重,漸進式完成新版本應用的全量上線,最大限度地控制新版本發布帶來的業務風險,降低故障帶來的影響面,同時支持快速回滾。
圖 1. 灰度發布流程圖
安裝灰度發布組件
您需要在ACK中安裝對應的組件后才可以使用灰度發布功能。在灰度發布頁面,直接通過單擊開始安裝即可實現對應的組件安裝。
灰度發布是可以幫助您漸進式更新Deployment的工具。它能結合Ingress Controller實現多版本共存,發布暫停,流量百分比切換,健康檢查等功能,極大解放灰度發布過程中的手動操作,全自動化實現線上灰度流量切換。本文介紹如何創建灰度發布。
前提條件
- 創建一個類型為Deployment的工作負載。有關具體操作,請參見創建無狀態工作負載Deployment。
- 創建一個服務(Service)。有關具體操作,請參見管理服務。
- 創建一個路由(Ingress)。有關具體操作,請參見創建Ingress路由。
創建灰度發布
創建灰度發布時,您可以選擇自動發布和手動發布兩種灰度發布方式。文本介紹兩種發布方式的高級選項特性。
背景信息
手動發布


自動發布
參數 | 描述 |
---|---|
權重調整步長 | 切換新的流量百分比。例如設置此參數為20,則說明新流量每次增加20%。 |
健康檢查路徑 | 在自動發布的過程中,填入一個URL地址。允許灰度發布控制器可以通過這個URL檢查網絡的連通性。此健康檢查必須是一個HTTP模式的URL,且返回的HTTP Code必須是2xx才會認為是通過,否則就認為失敗。 |
允許失敗次數 | 需要配合健康檢查路徑來使用。如果健康檢查失敗次數超過了允許失敗的次數,就會自動回滾。 |
超時時間 | 如果在自動發布過程中,新建Pod出現無法啟動,或者健康檢查卡住無法返回時超過設定的超時時間,就會認為發布失敗。如果超過了允許失敗的次數,系統就會觸發自動回滾。 |
釘釘通知地址 | 生成的釘釘機器人Webhook。將Webhook填入到對應的釘釘通知地址。有關詳情,請參見上述手動發布。 |
在使用灰度發布的手動發布方式的時候,您需要創建一個Ingress、Service和Deployment結構的應用。目前灰度發布只支持基於Deployment和Ingress的灰度發布。本文舉例介紹使用手動發布方式的灰度發布流程。
步驟一:創建測試應用
本文使用以下YAML文件模板作為測試示例。該示例使用Deployment部署一個Web應用,並通過路由(Ingress)向外暴露服務(Service)。有關如何使用YAML模板創建應用的具體步驟,請參見通過編排模板創建Linux應用。
apiVersion: apps/v1 kind: Deployment metadata: name: podinfo labels: app: podinfo spec: replicas: 4 minReadySeconds: 5 revisionHistoryLimit: 5 progressDeadlineSeconds: 60 strategy: rollingUpdate: maxUnavailable: 1 type: RollingUpdate selector: matchLabels: app: podinfo template: metadata: labels: app: podinfo spec: containers: - name: podinfod image: registry.cn-hangzhou.aliyuncs.com/acs/rollouts-demo:green imagePullPolicy: IfNotPresent ports: - name: http containerPort: 8080 protocol: TCP readinessProbe: tcpSocket: port: 8080 initialDelaySeconds: 5 timeoutSeconds: 5 --- apiVersion: v1 kind: Service metadata: name: my-podinfo-svc spec: selector: app: podinfo ports: - protocol: TCP port: 80 targetPort: 8080 --- apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: podinfo labels: app: podinfo spec: rules: - host: app.example.com http: paths: - backend: serviceName: my-podinfo-svc servicePort: 80
步驟二:創建灰度發布
創建灰度發布時,設置上述創建的Deployment、Service、Ingress,然后設置發布方式為手動發布。有關創建灰度發布的具體操作,請參見創建灰度發布。

步驟三:執行灰度發布
初始化完畢后,就可以進行灰度發布。開始灰度發布前,您需要先更新一下應用。本文示例以更新鏡像tag為例,修改鏡像tag中的green為blue。先發布兩個Pod為新版本,同時將新版本的灰度流量設置為10%。
查看歷史記錄
- 在灰度發布頁面的歷史記錄區域,您可以查看所有創建的灰度發布的發布記錄。
- 在每個創建的灰度發布詳情頁面下方的發布日志區域,查看發布的過程。