企业级运维之云原生与Kubernetes实战课程
第三章第6讲 实验三:灰度发布
视频地址:https://developer.aliyun.com/learning/course/913/detail/14607
一、实验概述
通过ingress实现灰度发布,实现权重灰度和根据header灰度。
二、涉及实验资源
1. ACK托管版集群;
2. ECS客户端:Linux带有公网ip的客户端,并且为集群外场景;
3. 域名账号。
三、实验架构
四、实验准备
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
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%,测试实现效果:
- 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;
当header指向ack:test时,所有请求都转发给web2。
4. 验证日志服务
a. 查看Ingress日志
b. 编写查询语句过滤需要的日志信息;
例如查询:_container_ip为172.20.0.142的日志出现次数
查询语句: *│selectcount(*)where_container_ip_='172.20.0.142'
其中172.20.0.142替换为对应业务pod的实际ip。
以上就是本次灰度发布实验。