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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习实验三:灰度发布

开发者学堂课程【企业级运维之云原生与 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。

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

 

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
Kubernetes 网络协议 前端开发
k8s更新策略-系列文章第一篇:蓝绿发布
k8s更新策略-系列文章第一篇:蓝绿发布
|
3月前
|
Kubernetes 监控 测试技术
在K8S中,如何实现金丝雀发布(灰度发布)?蓝绿发布?
在K8S中,如何实现金丝雀发布(灰度发布)?蓝绿发布?
|
3月前
|
Kubernetes 监控 Java
发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
448 0
|
6月前
|
应用服务中间件 测试技术 nginx
金丝雀发布(灰度发布)介绍 及 声明式管理方法简介
金丝雀发布(灰度发布)介绍 及 声明式管理方法简介
|
6月前
|
运维 负载均衡 Kubernetes
一文搞懂蓝绿发布、灰度发布和滚动发布
一文搞懂蓝绿发布、灰度发布和滚动发布
|
域名解析 运维 测试技术
不容闪失的灰度发布简介
不容闪失的灰度发布简介
149 0
|
JSON 监控 安全
分享一例有意思的灰度设计缺陷,浅谈灰度方案的设计
灰度很重要,灰度的策略也需要结合实际情况进行灵活的调整,本文跟大家分享了一个前些时间发现的灰度设计bug。
|
缓存 监控 Kubernetes
MSE 风险分布管理功能发布(一)| 学习笔记
快速学习 MSE 风险分布管理功能发布。
MSE 风险分布管理功能发布(一)| 学习笔记
|
缓存 监控 网络协议
MSE 风险分布管理功能发布(二)| 学习笔记
快速学习 MSE 风险分布管理功能发布。
MSE 风险分布管理功能发布(二)| 学习笔记
|
atlas Android开发 开发者
构建与基线发布 | 学习笔记
简介:快速学习构建与基线发布
245 0
构建与基线发布 | 学习笔记
下一篇
无影云桌面