2.3 权重路由(灰度发布)
背景:随着网站流量的增加,网站开始有了广告投放的需求,广告投放需要在商品页面增加广告位。网站的开发人员新开发了product服务的v2版本,以product v2的deployment的形式提供,并希望对product-v2版本做灰度发布。
先将product v2版本的deployment部署至主集群:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: product-v2 namespace: base labels: app: product version: v2 spec: replicas: 1 selector: matchLabels: app: product version: v2 template: metadata: labels: app: product version: v2 spec: containers: - name: product image: ccr.ccs.tencentyun.com/zhulei/testproduct2:v1 imagePullPolicy: Always env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: REGION value: "guangzhou-zoneA" ports: - containerPort: 7000 EOF
|
通过DR定义服务版本+通过VS定义权重路由来完成灰度发布的第一步,将部分流量(50%)路由至product v2 subset以验证新版本,剩余部分(50%)的流量仍然路由至product v1版本。将以下YAML文件提交至主集群即可完成以上设定。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| kubectl apply -f - <<EOF apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: product-vs namespace: base spec: hosts: - "product.base.svc.cluster.local" http: - match: - uri: exact: /product route: - destination: host: product.base.svc.cluster.local subset: v1 port: number: 7000 weight: 50 - destination: host: product.base.svc.cluster.local subset: v2 port: number: 7000 weight: 50 ---
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: product namespace: base spec: host: product subsets: - name: v1 labels: version: v1 - name: v2 labels: version: v2 EOF
|
配置完成后,访问product服务的流量将有50%被路由至v1版本,50%被路由至v2版本,刷新网站商品页面即可验证。
product v2版本验证通过后,即可修改关联product的VirtualService中路由规则目的端的权重,设置访问product服务的所有流量(100%)至v2版本,设置完成后可刷新商品列表页面验证。