金丝雀发布(Cannary Release)
Posted 爱show的小卤蛋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了金丝雀发布(Cannary Release)相关的知识,希望对你有一定的参考价值。
文章目录
修改后退出立即生效
集群外部访问用那个类型:用nodeport
nodeip+nodeport外部访问
内部访问clusterip
用什么设置clusterip的端口号
金丝雀发布(Cannary Release)
- k8s中默认是滚动更新,deployment控制器可以自己控制滚动更新节奏,比如‘’暂停(pause)‘’和‘’继续(resume)‘’更新操作。比如原本有一批待更新的pod资源,先随机更新一部分pod资源然后立即停止更新,此时,只有一部分应用更新完成,主体部分还是旧的版本。然后将一部分(比例很小)用户的请求路由到新版本的应用来进行测试。应用测试没问题后再继续完成余下的pod资源滚动更新,如果应用的新版本测试的有问题的话,立即回滚更新操作。这个就是金丝雀发布
- 简单的来说就是先升级一部分,让用户使用,没有出现问题的话,再把其他的更新,过一段时间后自动把旧版本删除掉
新版本的流量怎么引过去的呢?
但是这里有个问题就是原本用户在用,但是升级之后不知道谁在用新的谁在用旧的版本,在这里可以专门挑一个用户来测试新版本,先告知他测试新版本,然后这个专门的用户来测试,新pod和原来的service关联(,这个指定的用户访问原来的serviceip,service此时和新旧资源都关联,)然后创建一个新的标签给新的pod,然后新的pod和service进行关联,然后根据新的service就会访问到新的pod上
新旧pservice如何联结在一起?
通过标签和标签选择器
类比金丝雀探瓦斯,探测到有瓦斯的话,就会产生反应,工作人员就知道有瓦斯存在,从而避免了意外的发生
不像蓝绿要两套设备
也不像滚动发布按照比例一部分一部分发布
金丝雀发布需要有个新资源让你先测试一下,用户在知情的情况下升级到这个版本中,用户去测试,如果没有问题的话,在逐步的把剩下的资源更新
service怎么关联到pod?
通过标签和标签选择器
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 Ready master 24h v1.15.1
node01 Ready <none> 24h v1.15.1
node02 Ready <none> 24h v1.15.1
[root@master01 opt]# kubectl get pod
No resources found.
查看资源:资源为空
创建一个资源nginx:1.14
kubectl create deployment nginx --image=nginx:1.14
#deployment.apps/nginx created说明创建成功
查看
kubectl get pod
kubectl get svc
kubectl get deployment
或
kubectl get deployment,pod,svc
暴露端口
kubectl expose deployment nginx --port=80 --target-port=80
查看版本号(可以先通过kubectl get svc查看到cluster IP以及端口)
curl http://10.103.74.102 -I
或
curl http://10.103.74.102:80 -I
注意:创建后必须将服务暴露出来才能查看这个服务也就是kubectl expose
提升pod数量
kubectl scale deployment nginx --replicas=3
下面的操作根据上面的来操作
更新deployment的版本并配置暂停deployment
开启跟踪
kubectl get pod -w
kubectl get pod -owide -w#详细跟踪
开启另一个终端
kubectl set image deployment nginx nginx=nginx:1.16 && kubectl rollout pause deployment nginx#联结起来,更新然后暂停,要不然会删除掉旧版本
监视更新的过程,可以看到已经新增了一个资源,但是并未按照预期的状态删除一个旧的资源,就是因为使用了pause暂停命令原终端查看
一部分更新了,而且没有Terminating 删除
查看状态
kubectl rollout status deployment nginx
查看更新的服务
curl http://10.244.2.12
curl http://10.244.2.12 -I
访问ClusterIP
由于有四个服务,所以四个一循环,
curl http://10.103.74.102 -I
curl http://10.103.74.102 -I
curl http://10.103.74.102 -I
curl http://10.103.74.102 -I
kubectl describe svc nginx
kubectl get endpoints
kubectl get endpoints nginx
将新创建的也关联起来
确保更新的pod没有问题,持续更新
kubectl rollout resume deployment nginx
动态跟踪的情况:发现此时已经删除
再次查看版本:发现都是1.16版本
curl http://10.103.74.102 -I
查看3种资源
kubectl get nodes
kubectl get pod
kubectl get service
删除3种资源,一般先查看资源名(以nginx为例)
[root@master01 opt]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 25h
nginx NodePort 10.110.47.18 <none> 80:30558/TCP 25h
[root@master01 opt]# kubectl delete service nginx
service "nginx" deleted
[root@master01 opt]# kubectl delete deployment nginx
deployment.extensions "nginx" deleted
[root@master01 opt]# kubectl delete deployment nginx
deployment.extensions "nginx" deleted
ubectl delete deployment nginx
deployment.extensions “nginx” deleted
[外链图片转存中...(img-lAl0KMhh-1635986634697)]
```shell
[root@master01 opt]# kubectl delete deployment nginx
deployment.extensions "nginx" deleted
以上是关于金丝雀发布(Cannary Release)的主要内容,如果未能解决你的问题,请参考以下文章