Kubernetes canary Deployment

Canary deployment

有时候,我们需要多个标签来区分相同微服务的不同版本。对于上线新版微服务,需要经过线上测试(灰度发布)。一般做法是通过service将一部分线上流量调度到新版本的pod,确定运行无误后,在对所有的pod进行rolling update

首先创建2两个Deployment,主体内容如下:

#Deployment 1
name: apigw
replicas: 1
...
labels:
    app: apigw
    track: stable
...
image: 172.16.18.5:30088/admin/centos7.1-v1-apigw:880

对于生成的pod实例,会拥有 app:apigwtrack: stable 两个标签

# Deployment 2
name: apigw-test
replicas: 1
...
labels:
    app: apigw
    track: canary
...
image: 172.16.18.5:30088/admin/centos7.1-v1-apigw:883

两个pod实例中,拥有相同的 app:apigw标签。通过 track 对应不同的值来标称应用的正式和测试版本

对于前端的 service ,需要在 selector 字段通过标签来筛选后端 pod

selector:
    app: apaigw
    track: stable

此时后端只对应同时拥有 app: apigwtrack: stable 标签的pod

[root@k8s-master test]# kubectl describe svc apigw-test --namespace=walker
Name:           apigw-test
Namespace:      walker
Labels:         app=apigw-test
Selector:       app=apigw,track=stable
Type:           ClusterIP
IP:         10.109.195.90
Port:           apigw   80/TCP
Endpoints:      192.168.169.135:80
Session Affinity:   None
No events.

当以 app: apigw 为筛选条件时,service会分别对应两个 pod

[root@k8s-master test]# kubectl describe svc apigw-test --namespace=walker
Name:           apigw-test
Namespace:      walker
Labels:         app=apigw-test
Selector:       app=apigw
Type:           ClusterIP
IP:         10.109.195.90
Port:           apigw   80/TCP
Endpoints:      192.168.169.135:80,192.168.236.32:80
Session Affinity:   None
No events.

通过 service 将部分请求分流到测试版本上去,由此可实现测试版本的线上测试。待新版本线上验证后哦,可通过 rolling update 的方式正式上线。

参考链接

https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/#canary-deployments

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值