金丝雀发布(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)的主要内容,如果未能解决你的问题,请参考以下文章

金丝雀发布(Cannary Release)

金丝雀发布(Cannary Release)

various system release [online]

金丝雀发布的本质

一文搞懂蓝绿部署和金丝雀发布

一文搞懂蓝绿部署和金丝雀发布