操作场景
随着网站流量的增加,网站开始有了广告投放的需求,广告投放需要在商品页面增加广告位。网站的开发人员新开发了 product 服务的 v2版本,以 product v2的 deployment 的形式提供,并希望对 product-v2版本做灰度发布。
灰度发布概览图如下所示:
操作步骤
先将 product v2版本的 deployment 部署至主集群:
apiVersion: apps/v1kind: Deploymentmetadata:name: product-v2namespace: baselabels:app: productversion: v2spec:replicas: 1selector:matchLabels:app: productversion: v2template:metadata:labels:app: productversion: v2spec:containers:- name: productimage: ccr.ccs.tencentyun.com/zhulei/testproduct2:v1imagePullPolicy: Alwaysenv:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: REGIONvalue: "guangzhou-zoneA"ports:- containerPort: 7000
通过 DR 定义服务版本 + 通过 VS 定义权重路由来完成灰度发布的第一步,将部分流量(50%)路由至 product v2 subset 以验证新版本,剩余部分(50%)的流量仍然路由至 product v1版本。将以下 YAML 文件提交至主集群即可完成以上设定。
apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:name: product-vsnamespace: basespec:hosts:- "product.base.svc.cluster.local"http:- match:- uri:exact: /productroute:- destination:host: product.base.svc.cluster.localsubset: v1port:number: 7000weight: 50- destination:host: product.base.svc.cluster.localsubset: v2port:number: 7000weight: 50---apiVersion: networking.istio.io/v1alpha3kind: DestinationRulemetadata:name: productnamespace: basespec:host: productsubsets:- name: v1labels:version: v1- name: v2labels:version: v2
配置完成后,访问 product 服务的流量将有 50%被路由至 v1 版本,50%被路由至 v2 版本,刷新网站商品页面即可验证。
权重路由如下图所示:
50%的请求路由到 product v2版本如下图所示:
product v2版本验证通过后,即可修改关联 product 的 VirtualService 中路由规则目的端的权重,设置访问 product 服务的所有流量(100%)至 v2版本,设置完成后可刷新商品列表页面验证。基于 virtual Service 更改权重如下图所示:
灰度发布完成如下图所示: