前提条件
了解蓝绿部署、A/B测试以及金丝雀发布机制。详细信息,请参见 服务发布策略。
已具备云容器引擎CCE实例,参见 创建一个CCE应用集群。
已完成云原生API网关创建,具体操作,请参见 创建网关实例。
部署服务
容器内部署服务
首先在容器内部署两个版本的服务,两个版本的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*************************************************'
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-*************************************************'
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: {}
添加服务到网关
登录 云原生API网关控制台。
在左侧导航栏,选择 "实例" ,并在顶部菜单栏选择地域。
选择目标实例后,在左侧导航栏,选择 "服务" > "服务来源"。
点击 "创建来源",来源类型选择 "容器服务",选择对应的容器集群,然后单击 "确定"。
进入 "服务管理" > "创建服务",选择服务所在的命名空间。
选择刚部署的reviews-v1和reviews-v2服务,添加为网关服务,然后单击 "确定"。
创建路由
登录 云原生API网关控制台。
在左侧导航栏,选择 "API" ,并在顶部菜单栏选择地域。
单击 "创建API",类型选择"HTTP API"即可。
进入"API详情页" > "创建路由",填写相应配置,所属实例&后端服务选择上述步骤所配置的服务。
蓝绿部署
蓝绿部署需要按照服务当前版本所占用的资源状况为服务新版本申请同样的资源规格,部署完毕之后将流量整体切换到服务新版本。
创建一条路由规则,先将版本v1和v2比例设置为50%、通过蓝绿发布将流量从v1整体切换至v2,仅需要修改之前创建的路由规则中的目标服务,将v2比例设置为100%,则可以做到请求全部到v2中。
A/B测试
A/B测试是基于用户请求的元信息将流量路由到新版本,也就是可以根据请求内容来动态路由。在本示例中,希望End-User头部为jason时访问reviews-v2版本。
创建两条路由规则:
匹配Path为/version的请求访问服务版本v1。
匹配Path为/version,且End-User头部为jason的请求访问服务版本v2。
金丝雀发布
金丝雀发布允许引流一小部分流量到新版本,待验证通过后,逐步增加流量,直至完全切换,期间可伴随着新版本的扩容和旧版本的缩容操作,达到资源利用率最大化。
创建一条路由规则,在目标服务中按照权重将流量转发至新旧版本。创建路由时选择多服务路由,选择路由目标为reviews-v1和reviews-v2,并配置流量比例,例如,v1权重设置为80%,v2权重设置为20%,这样在请求时会按照指定的比例访问到对应版本的服务。