概述
藍綠部署(Blue-Green Deployment)和金絲雀部署(Canary Deployment)是部署中常用的兩種策略,用于在生產環境中引入新版本的應用程序或服務。這兩種部署策略旨在降低風險并確保新版本的穩定性,同時允許逐步發布或回滾變更。
藍綠部署中存在兩個完全獨立的生產環境(通常稱為藍環境和綠環境)被用于部署不同版本的應用程序。最初,藍環境是當前正在運行的穩定版本,而綠環境是新版本的部署目標。一旦綠環境成功部署并通過測試,可以將流量切換到綠環境,并將藍環境作為備份或回滾選項保留。這種方式可以確保在生產環境中保持穩定,并在需要時快速回滾到之前的版本。
金絲雀部署是一種逐步發布新版本的策略。在金絲雀部署中,新版本的應用程序或服務僅在一小部分用戶或服務器上進行部署,這些用戶或服務器被稱為金絲雀群體。通過監控金絲雀群體的性能和穩定性,可以評估新版本的表現,并在沒有負面影響的情況下逐步擴大金絲雀群體的規模,直到最終將新版本部署到整個生產環境。如果金絲雀部署中發現了問題或負面影響,可以快速回滾到之前的版本,以避免對所有用戶造成影響。
步驟
部署服務
首先在容器內部署兩個版本的服務,兩個版本的Deployment分別掛到reviews-v1和reviews-v2服務下:
apiVersion: v1
kind: Service
metadata:
name: reviews-v1
labels:
workloadKind: Deployment
workloadName: reviews-v1
spec:
ports:
- port: 9080
targetPort: 9080
name: http
selector:
app: reviews
version: v1
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: reviews-v1
spec:
replicas: 1
selector:
matchLabels:
name: reviews-v1
template:
metadata:
labels:
app: reviews
version: v1
name: reviews-v1
source: CCSE
spec:
containers:
- name: reviews
image: 'registry-vpc-crs-huadong1.cnsp-internal.daliqc.cn/library/istio-examples-bookinfo-reviews-v1:1.16.2'
imagePullPolicy: IfNotPresent
env:
- name: LOG_DIR
value: "/tmp/logs"
volumeMounts:
- name: tmp
mountPath: /tmp
- name: wlp-output
mountPath: /opt/ibm/wlp/output
volumes:
- name: wlp-output
emptyDir: {}
- name: tmp
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: reviews-v2
labels:
workloadKind: Deployment
workloadName: reviews-v2
spec:
ports:
- port: 9080
targetPort: 9080
name: http
selector:
app: reviews
version: v2
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: reviews-v2
spec:
replicas: 1
selector:
matchLabels:
name: reviews-v2
template:
metadata:
labels:
app: reviews
version: v2
name: reviews-v2
source: CCSE
spec:
containers:
- name: reviews
image: 'registry-vpc-crs-huadong1.cnsp-internal.daliqc.cn/library/istio-examples-bookinfo-reviews-v2:1.16.2'
imagePullPolicy: IfNotPresent
env:
- name: LOG_DIR
value: "/tmp/logs"
volumeMounts:
- name: tmp
mountPath: /tmp
- name: wlp-output
mountPath: /opt/ibm/wlp/output
volumes:
- name: wlp-output
emptyDir: {}
- name: tmp
emptyDir: {}
添加服務到網關
進入云原生網關控制臺,選擇目標實例,進入服務來源菜單,將容器集群添加為服務來源;
再進入服務管理菜單,選擇 創建服務,選擇服務所在的命名空間,選擇剛才部署的reviews-v1和reviews-v2服務,添加為網關服務。
創建路由
進入路由配置菜單,選擇創建路由。
基于請求特征訪問灰度版本
在請求頭部匹配規則處可以添加規則End-User頭部為jason時訪問reviews-v2版本,這樣在請求帶上End-User: jason頭部時將訪問到v2版本。
基于比例做灰度流量控制
創建路由時選擇多服務路由,選擇路由目標為reviews-v1和reviews-v2,并配置流量比例,這樣在請求時會按照指定的比例訪問到對應版本的服務。