對于 Istio 用戶,云效提供了藍綠發布的能力支持。從而讓用戶可以更安全的基于 Istio 的流量管理策略實現應用的安全發布。
實現原理
在 Kubernetes 中 Service 與多個版本的 Deployment 實例直接通過 LabelSelector 進行關聯。通過 VirtualService 可以進一步控制流量與特定版本Deployment實例之間的路由策略。
藍綠發布開始,飛流會基于當前的 Deployment 實例(綠環境)創建一個新版本的應用 Deployment 實例(藍環境)。
等待藍環境創建完成后通過更新 Istio 的 DestinationRule 資源對象,生成路由表信息
根據用戶的發布設置,修改 VirtualService 確定藍/綠環境的流量權重。
用戶也可以設置灰度標,確定哪些流量會直接進入到藍環境中。
在人工驗證完成后,完成發布將所有流量切流到藍環境,并且將原有的綠環境實例移除。
前提
Service/VirtualService/DestinationRule 同名
Deployment 的 labels 內包含有 Service 的全部 selector labels,如:
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: spring-boot-sample
name: spring-boot-sample
spec:
replicas: 2
selector:
matchLabels:
run: spring-boot-sample
template:
metadata:
labels:
run: spring-boot-sample
spec:
containers:
- image: ${IMAGE}
name: app
---
apiVersion: v1
kind: Service
metadata:
name: spring-boot-service
labels:
test: test
labele2: label
spec:
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 8080
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
run: spring-boot-sample
sessionAffinity: None
type: ClusterIP
準備 Istio 應用
以阿里云容器服務 Kubernetes 版為例,在創建完成集群后通過部署 Istio 組件就可以在控制臺部署應用并綁定虛擬服務 (VirtualService) ,如下所示:
這里在控制臺創建了一個名為 sample-svc 的虛擬服務,并關聯了一個 v1 版本的應用實例。
在流水線中添加藍綠發布任務
創建流水線并完成鏡像構建配置后,用戶可以通過添加任務向導添加“ Kubernetes 藍綠發布”任務,如下所示:
在藍綠部署配置中,配置發布的集群以及發布的目標服務即可。 在發布前需要確保目標集群已經正確安裝 Istio 組件,且關聯的命名空間需要開啟 Istio 自動注入。如下所示:
通過設置灰度 Cookie 標,可以讓用戶通過 Cookie 來進入到新版環境從而可以進行新版環境的功能驗證?;叶劝姹境跏蓟髁繖嘀卦O置可以在新版發布完成后讓部分正式流量進入到新版環境。對于應用啟動時間較長的應用可以設置啟動等待時間,確保在新版應用部署完成并等待指定時間后,使新版本的流量規則生效。
觸發藍綠部署
通過運行流水線,用戶可以觸發藍綠部署流程。
在當前狀態下用戶可以通過 Cookie 標進去到新版環境中進行功能驗證。在驗證完成后通過點擊完成,一鍵切流到新版應用。 如果驗證不通過則通過回滾取消當前發布。
在發布過程中用戶也可以通過阿里云容器服務 Kubernetes 查看當前的流量策略。