在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

如何在TKE集群中实现简单的蓝绿发布和灰度发布

125次阅读
没有评论

共计 4412 个字符,预计需要花费 12 分钟才能阅读完成。

如何在 TKE 集群中实现简单的蓝绿发布和灰度发布,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

原理介绍

我们通常使用 Deployment、StatefulSet 等 Kubernetes 自带的工作负载来部署业务,每个工作负载都管理一组 Pod,以 Deployment 为例:

如何在 TKE 集群中实现简单的蓝绿发布和灰度发布

通常还会为每个工作负载创建对应的 Service,Service 通过 selector 来匹配后端 Pod,其它服务或者外部通过访问 Service 即可访问到后端 Pod 提供的服务。要对外暴露可以直接将 Service 类型设置为 LoadBalancer,LB 插件会自动为其创建 CLB (腾讯云负载均衡器) 作为流量入口。

如何实现蓝绿发布?以 Deployment 为例,集群中部署两个不同版本的 Deployment,它们的 Pod 拥有共同的 label,但有一个 label 的值不同,用于区分不同的版本,Service 使用 selector 选中了其中一个版本的 Deployment 的 Pod,通过修改 Service 的 selector 中决定 服务版本的 label 的值来改变 Service 后端对应的 Deployment,实现让服务从一个版本直接切换到另一个版本,即蓝绿发布:

如何在 TKE 集群中实现简单的蓝绿发布和灰度发布

如何实现灰度发布?虽然我们通常会为每个工作负载都创建一个 Service,但 Kubernetes 并没有限制 Service 一定要与工作负载一一对应,因为 Service 是通过 selector 来匹配后端 Pod 的,只要不同工作负载的 Pod 都能被相同 selector 选中,就可以实现一个 Service 对应多个版本的工作负载的效果,调整不同版本工作负载的副本数就相当于调整不同版本服务的权重,实现灰度发布:

如何在 TKE 集群中实现简单的蓝绿发布和灰度发布

使用 YAML 创建资源

本文的示例将使用 yaml 的方式部署工作负载和创建 Service,有两种操作方式。

方式一:在 TKE 或 EKS 控制台右上角点击 YAML 创建资源,然后将本文示例的 yaml 粘贴进去:

如何在 TKE 集群中实现简单的蓝绿发布和灰度发布

方式二:将示例的 yaml 保存成文件,然后使用 kubectl 指定 yaml 文件来创建,如: kubectl apply -f xx.yaml。

部署多版本工作负载

要实现蓝绿发布或灰度发布,首先我们需要在集群中部署多个版本的工作负载,这里以简单的 nginx 为例,部署第一个版本:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-v1
spec:
 replicas: 3
 selector:
 matchLabels:
 app: nginx
 version: v1
 template:
 metadata:
 labels:
 app: nginx
 version: v1
 spec:
 containers:
 - name: nginx
 image:  openresty/openresty:centos 
 ports:
 - name: http
 protocol: TCP
 containerPort: 80
 volumeMounts:
 - mountPath: /usr/local/openresty/nginx/conf/nginx.conf
 name: config
 subPath: nginx.conf
 volumes:
 - name: config
 configMap:
 name: nginx-v1
apiVersion: v1
kind: ConfigMap
metadata:
 labels:
 app: nginx
 version: v1
 name: nginx-v1
data:
 nginx.conf: |-
 worker_processes 1;
 events {
 accept_mutex on;
 multi_accept on;
 use epoll;
 worker_connections 1024;
 }
 http {
 ignore_invalid_headers off;
 server {
 listen 80;
 location / {
 access_by_lua  
 local header_str = ngx.say(nginx-v1)
  
 }
 }
 }

再部署第二个版本:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-v2
spec:
 replicas: 3
 selector:
 matchLabels:
 app: nginx
 version: v2
 template:
 metadata:
 labels:
 app: nginx
 version: v2
 spec:
 containers:
 - name: nginx
 image:  openresty/openresty:centos 
 ports:
 - name: http
 protocol: TCP
 containerPort: 80
 volumeMounts:
 - mountPath: /usr/local/openresty/nginx/conf/nginx.conf
 name: config
 subPath: nginx.conf
 volumes:
 - name: config
 configMap:
 name: nginx-v2
apiVersion: v1
kind: ConfigMap
metadata:
 labels:
 app: nginx
 version: v2
 name: nginx-v2
data:
 nginx.conf: |-
 worker_processes 1;
 events {
 accept_mutex on;
 multi_accept on;
 use epoll;
 worker_connections 1024;
 }
 http {
 ignore_invalid_headers off;
 server {
 listen 80;
 location / {
 access_by_lua  
 local header_str = ngx.say(nginx-v2)
  
 }
 }
 }

可以在控制台看到部署的情况:

如何在 TKE 集群中实现简单的蓝绿发布和灰度发布

实现蓝绿发布

为我们部署的 Deployment 创建 LoadBalancer 类型的 Service 对外暴露服务,指定使用 v1 版本的服务:

apiVersion: v1
kind: Service
metadata:
 name: nginx
spec:
 type: LoadBalancer
 ports:
 - port: 80
 protocol: TCP
 name: http
 selector:
 app: nginx
 version: v1

测试访问:

$ for i in {1..10}; do curl EXTERNAL-IP; done; #  替换  EXTERNAL-IP  为  Service  的  CLB IP  地址
nginx-v1
nginx-v1
nginx-v1
nginx-v1
nginx-v1
nginx-v1
nginx-v1
nginx-v1
nginx-v1
nginx-v1

全是 v1 版本的响应,现在我们切到 v2 版本,修改 Service 的 selector,让它选中 v2 版本的服务,如果在控制台改,先找到对应 Service,点击 编辑 YAML:

如何在 TKE 集群中实现简单的蓝绿发布和灰度发布

修改 selector 部分:

 selector:
 app: nginx
 version: v2

或者也可以直接用 kubectl 修改:

kubectl patch service nginx -p  {spec :{ selector :{ version : v2}}}

再次测试访问:

$ for i in {1..10}; do curl EXTERNAL-IP; done; #  替换  EXTERNAL-IP  为  Service  的  CLB IP  地址
nginx-v2
nginx-v2
nginx-v2
nginx-v2
nginx-v2
nginx-v2
nginx-v2
nginx-v2
nginx-v2
nginx-v2

全是 v2 版本的响应,成功实现了蓝绿发布。

实现灰度发布

相比蓝绿发布,我们为不给 Service 指定使用 v1 版本的服务,从 selector 中删除 version 标签,让 Service 同时选中两个版本的 Deployment 的 Pod:

apiVersion: v1
kind: Service
metadata:
 name: nginx
spec:
 type: LoadBalancer
 ports:
 - port: 80
 protocol: TCP
 name: http
 selector:
 app: nginx

测试访问:

$ for i in {1..10}; do curl EXTERNAL-IP; done; #  替换  EXTERNAL-IP  为  Service  的  CLB IP  地址
nginx-v1
nginx-v1
nginx-v2
nginx-v2
nginx-v2
nginx-v1
nginx-v1
nginx-v1
nginx-v2
nginx-v2

可以看到,一半是 v1 版本的响应,另一半是 v2 版本的响应。现在我们来调节 v1 和 v2 版本的 Deployment 的副本,将 v1 版本调至 1 个副本,v2 版本调至 4 个副本。

可以通过控制台操作:

如何在 TKE 集群中实现简单的蓝绿发布和灰度发布

也可以通过 kubectl 操作:

kubectl scale deployment/nginx-v1 --replicas=1
kubectl scale deployment/nginx-v2 --replicas=4

然后再次进行访问测试:

$ for i in {1..10}; do curl EXTERNAL-IP; done; #  替换  EXTERNAL-IP  为  Service  的  CLB IP  地址 nginx-v2nginx-v1nginx-v2nginx-v2nginx-v2nginx-v2nginx-v1nginx-v2nginx-v2nginx-v2$ for i in {1..10}; do curl EXTERNAL-IP; done; #  替换  EXTERNAL-IP  为  Service  的  CLB IP  地址
nginx-v2
nginx-v1
nginx-v2
nginx-v2
nginx-v2
nginx-v2
nginx-v1
nginx-v2
nginx-v2
nginx-v2

可以看到,10 次访问中只有 2 次返回了 v1 版本,v1 与 v2 的响应比例与其副本数比例一致,为 1:4,通过控制不同版本服务的副本数就实现了灰度发布。

关于如何在 TKE 集群中实现简单的蓝绿发布和灰度发布问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计4412字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 碰碰碰人人澡人人爱摸 | 性色av一二三天美传媒 | 亚洲av无码成人专区片在线观看 | 免费爱爱视频网站 | 亚洲成av人片一区二区密柚 | 浓毛老太交欧美老妇热爱乱 | 亚洲成人毛片 | 边做饭边被躁bd苍井空图片 | 久久精品无码鲁网中文电影 | 成人福利视频在线观看网址 | 91免费看片| 狠狠色噜噜狠狠狠狠97俺也去 | www一区 | 无码人妻一区二区三区在线 | 国产偷窥熟女精品视频 | 亚洲视频综合网 | 国产国语熟妇视频在线观看 | 自拍 欧美 在线 综合 另类 | 国产成人午夜福在线观看 | 一区二区三区视频 | 国产男女猛烈无遮挡免费网站 | 91天堂素人精品系列网站 | 美女网站免费观看视频 | 国产成人综合亚洲欧美天堂 | 天天综合天天影视色香欲俱全 | 国产一区视频在线播放 | 45分钟免费真人视频 | 亚洲精品国产福利一区二区三区 | 亚洲av日韩精品久久久久久久 | 在线看片亚洲 | 欧美一区二区三区视频在线 | 成人性视频免费网站 | 可以看黄色软件 | 亚洲中文字幕无码av在线 | 国产不卡精品一区二区三区 | 国模吧双双大尺度炮交gogo | 欧洲-级毛片内射 | 99视频有精品视频免费观看 | 五月婷之久久综合丝袜美腿 | 韩国毛片免费看 | 亚洲国产精品一区二区第一页 |