概述
蓝绿部署(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.ctyun.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.ctyun.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,并配置流量比例,这样在请求时会按照指定的比例访问到对应版本的服务。