实验三:灰度发布 | 学习笔记

简介: 快速学习实验三:灰度发布

开发者学堂课程【企业级运维之云原生与 Kubernets 实战课程:实验三:灰度发布】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/913/detail/14607


实验三:灰度发布

一、实验概述

通过 ingress 实现灰度发布,实现权重灰度和根据 header 灰度。

 

二、涉及实验资源

1. ACK 托管版集群;

2. ECS 客户端:Linux 带有公网 ip 的客户端,并且为集群外场景;

3. 域名账号。

 

三、实验架构

image.png

 

四、实验准备

1. 创建阿里云托管版 ACK 集群,已经部署好 nginx-ingress-controller 组件,已经部署好 logtail 组件(默认勾选“使用日志服务”,选择创建新的 Project);

2. 使用 ack 里面的 Cloud Shell 进行连接以配置管理集群或 kubectl 客户端(备注,所有执行操作都在 kubectl 客户端执行),客户端配置方法参考官网:容器集群控制台( cs.console.aliyun.com )->集群信息-“安装和设置 kubectl”;

3. 确认集群具有公网能力,保证可以拉取实验镜像;

4. 安装日志组件并确认其正常工作;

Ÿ 可以在创建集群时选中使用日志服务,启用 Logtail 组件;

Ÿ 也可以为已有集群启用 Logtail 组件:容器集群控制台( cs.console.aliyun.com)->运维管理->组件管理->日志与监控区->安装 logtail-ds 组件;

Ÿ 最后可以通过 “kubectl -n kube-system get pod | grep log”命令查看组件 Pod 的运行状态;

建议:在实验过程中尽量收集日志,以便遇到问题可以及时排查错误。

 

五、实验步骤

1. 创建测试应用

使用 yaml 创建好两个 Development 和 Service,分别创建 web1 应用以及灰度环境的 web2 应用:

Kubectl apply -f d.yaml

image.png

2. 创建 Ingress 实现权重灰度

apiVersion: extensions/v1beta1

kind:Ingress

metadata:

annotations:

kubernetes.io/ingress.class: nginx

name: huidu

namespace: default

spec:

rules:

#服务域名,可以自定义

- host: www.web.com

http:

paths:

- backend:

serviceName: web1-svc

servicePort: 80

path:/

pathType: ImplementationSpecific

---

apiVersion: extensions/v1beta1

kind:Ingress

metadata:

annotations:

kubernetes.io/ingress.class: nginx

nginx.ingress.kubernetes.io/canary: 'true'

nginx.ingress.kubernetes.io/canary-weight: '50'

name:huidu2

namespace: default

spec:

rules:

#服务域名,可以自定义

- host: www.web.com

http:

paths:

-backend:

当设置灰度权重为50%,测试实现效果:

image.png

Ÿ ClintIP 是 Ingress Controller Pod IP,ServerIP 是对应的后端 Service Pod IP,其中 10.205.0.135 是 web1,10.205.0.6 是 web2;

Ÿ 两个 Ingress Controller Pod 相互建联成功后,与后端 Service 连接,权重设置会有所不同;

Ÿ IP 为10.205.0.132的 Pod 会稍微多于另一个 Pod,即负载均衡稍有偏差;

3. 创建 Ingress 实现 Header 灰度

要求 header 为 ack:test 的请求灰度,其他 header 为 10% 流量灰度;

annotations:

kubernetes.io/ingress.class: nginx

nginx.ingress.kubernetes.io/canary: 'true'

nginx.ingress.kubernetes.io/canary-by-header: ack

nginx.ingress.kubernetes.io/canary-by-header-value: test nginx.ingress.kubernetes.io/canary-weight: '10'

name: huidu2

namespace: default

当没有 header 设定时,20 次 service 访问,其中有 2 次转发给 web2;

image.png

当 header 指向 ack:test 时,所有请求都转发给 web2。

image.png

4. 验证日志服务

a. 查看 Ingress 日志

image.png

b. 编写查询语句过滤需要的日志信息;

例如查询:_container_ip为172.20.0.142 的日志出现次数

查询语句: *│selectcount(*)where_container_ip_='172.20.0.142'

其中 172.20.0.142 替换为对应业务 pod 的实际 ip。

以上就是本次灰度发布实验。

 

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Linux 网络安全
嵌入式串口打印信息重定向到当前终端界面
嵌入式串口打印信息重定向到当前终端界面
231 1
|
移动开发 小程序 前端开发
uniapp开发小程序H5页面顶部导航栏navigationBar如何隐藏?三种解决办法
uniapp开发小程序H5页面顶部导航栏navigationBar如何隐藏?三种解决办法
|
Docker 容器
docker swarm 移除 Worker 节点
【10月更文挑战第12天】
243 5
|
机器学习/深度学习 数据可视化 JavaScript
Plotly可视化介绍
Plotly可视化介绍
473 0
|
存储 弹性计算 移动开发
阿里云电脑怎么使用?无影云电脑使用教程
阿里云电脑怎么使用?无影云电脑使用教程,阿里云无影云电脑即无影云桌面,云电脑如何使用?云电脑购买后没有用户名和密码,先创建用户设置密码,才可以登录连接到云电脑。云电脑想要访问公网还需要开通互联网访问功能。阿里云百科来详细说下阿里云无影云电脑从购买、创建用户名密码和访问互联网全过程
1113 1
|
SQL 分布式计算 Java
Spark 为什么比 Hive 快
Spark与Hive在数据处理上有显著区别。Spark以其内存计算和线程级并行提供更快的速度,但稳定性受内存限制。相比之下,Hive虽较慢,因使用MapReduce,其稳定性更高,对内存需求较小。在Shuffle方式上,Spark的内存 Shuffle 比Hive的磁盘 Shuffle 更高效。综上,Spark在处理速度和Shuffle上占优,Hive则在稳定性和资源管理上更胜一筹。
1110 0
|
缓存 安全 BI
|
Kubernetes 安全 API
打造成功的 SRE 团队
打造成功的 SRE 团队
430 0
|
数据安全/隐私保护
企微获取用户敏感数据
企微获取用户敏感数据
499 0
|
小程序 API 定位技术
微信小程序【关于地址信息的接入以及自动选择当前位置】
微信小程序【关于地址信息的接入以及自动选择当前位置】
589 0