灰度发布在不同场景中实现方式不同,如果当前灰度机器仅对测试开放,可以定义一个新的deployment来配合service来实现。如果需要切入一部分随机真实用户的流量,可以将生产机器中一台机器作为灰度机器,通过灰度后再升级其它的机器。
# nginx-v1.15.yaml 与 nginx-v1.14.yaml 一致,仅仅修改了镜像文件
[root@hdss7-21 ~]# kubectl apply --filename=http://k8s-yaml.od.com/base_resource/deployment/nginx-v1.15.yaml --record=true && kubectl rollout pause deployment nginx-deploy -n app
[root@hdss7-21 ~]# kubectl rollout history deployment nginx-deploy -n app
REVISION CHANGE-CAUSE
1 kubectl apply --filename=http://k8s-yaml.od.com/base_resource/deployment/nginx-v1.12.yaml --record=true
2 kubectl apply --filename=http://k8s-yaml.od.com/base_resource/deployment/nginx-v1.13.yaml --record=true
3 kubectl apply --filename=http://k8s-yaml.od.com/base_resource/deployment/nginx-v1.14.yaml --record=true
4 kubectl apply --filename=http://k8s-yaml.od.com/base_resource/deployment/nginx-v1.15.yaml --record=true
[root@hdss7-21 ~]# kubectl get rs -n app -l tier=slb -L version # 存在两个ReplicaSet对外提供服务
NAME DESIRED CURRENT READY AGE VERSION
nginx-deploy-5597c8b45 0 0 0 177m v1.12
nginx-deploy-6695fd9655 1 1 1 2m22s v1.15
nginx-deploy-6bd88df699 0 0 0 176m v1.13
nginx-deploy-7c5976dcd9 5 5 5 23m v1.14
[root@hdss7-21 ~]# kubectl get pod -n app -l partition=website -L version -w # 新老共存
NAME READY STATUS RESTARTS AGE VERSION
nginx-deploy-6695fd9655-tcm76 1/1 Running 0 17s v1.15
nginx-deploy-7c5976dcd9-4tnv4 1/1 Running 0 21m v1.14
nginx-deploy-7c5976dcd9-bpjc2 1/1 Running 0 20m v1.14
nginx-deploy-7c5976dcd9-gv8qm 1/1 Running 0 20m v1.14
nginx-deploy-7c5976dcd9-ttlqx 1/1 Running 0 21m v1.14
nginx-deploy-7c5976dcd9-xq2qs 1/1 Running 0 21m v1.14
# 手动暂停
[root@hdss7-21 ~]# kubectl rollout resume deployment nginx-deploy -n app && kubectl rollout pause deployment nginx-deploy -n app
[root@hdss7-21 ~]# kubectl get pod -n app -l partition=website -L version -w
NAME READY STATUS RESTARTS AGE VERSION
nginx-deploy-6695fd9655-jmb94 1/1 Running 0 19s v1.15
nginx-deploy-6695fd9655-tcm76 1/1 Running 0 6m19s v1.15
nginx-deploy-7c5976dcd9-4tnv4 1/1 Running 0 27m v1.14
nginx-deploy-7c5976dcd9-gv8qm 1/1 Running 0 26m v1.14
nginx-deploy-7c5976dcd9-ttlqx 1/1 Running 0 27m v1.14
nginx-deploy-7c5976dcd9-xq2qs 1/1 Running 0 27m v1.14
# 升级剩余所有机器
[root@hdss7-21 ~]# kubectl rollout resume deployment nginx-deploy -n app