企业级运维之云原生与Kubernetes实战课程 - 第三章第6讲 实验三:灰度发布

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 通过ingress实现灰度发布,实现权重灰度和根据header灰度。

企业级运维之云原生与Kubernetes实战课程

第三章第6讲 实验三:灰度发布

 

视频地址: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创建好两个DevelopmentService,分别创建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

 

  • ClintIPIngress Controller Pod IPServerIP是对应的后端Service Pod IP,其中10.205.0.135web110.205.0.6web2
  • 两个Ingress Controller Pod相互建联成功后,与后端Service连接,权重设置会有所不同;
  • IP10.205.0.132Pod会稍微多于另一个Pod,即负载均衡稍有偏差;

 

3. 创建Ingress实现Header灰度

 

要求headerack:test的请求灰度,其他header10%流量灰度;

 

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设定时,20service访问,其中有2次转发给web2

 image.png

 

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

 image.png

 

4. 验证日志服务

 

a.  查看Ingress日志

 image.png

 

 

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

 

例如查询:_container_ip172.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搭建和管理企业级网站应用
相关文章
|
2月前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible实战应用
【9月更文挑战第33天】本文将带你深入理解Ansible,一个强大的自动化运维工具。我们将从基础概念开始,逐步探索其配置管理、任务调度等功能,并通过实际案例演示其在自动化部署和批量操作中的应用。文章旨在通过浅显易懂的语言和实例,为读者揭开Ansible的神秘面纱,展示其在简化运维工作中的强大能力。
185 64
|
1月前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
263 3
|
3月前
|
运维 安全 应用服务中间件
自动化运维的利剑:Ansible实战应用
【9月更文挑战第24天】在现代IT基础设施的快速迭代与扩展中,自动化运维成为提升效率、保障稳定性的关键。本文将深入探讨Ansible这一流行的自动化工具,通过实际案例分析其如何简化日常运维任务,优化工作流程,并提高系统的可靠性和安全性。我们将从Ansible的基础概念入手,逐步深入到高级应用技巧,旨在为读者提供一套完整的Ansible应用解决方案。
|
1月前
|
运维 监控 应用服务中间件
自动化运维的利器:Ansible实战应用
【10月更文挑战第41天】在现代IT运维领域,自动化已成为提高效率、减少错误的关键。Ansible作为一种简单而强大的自动化工具,正被越来越多的企业采纳。本文将通过实际案例,展示如何使用Ansible简化日常运维任务,包括配置管理和批量部署等,旨在为读者提供一种清晰、易懂的自动化解决方案。
29 1
|
1月前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
65 4
|
1月前
|
消息中间件 运维 UED
消息队列运维实战:攻克消息丢失、重复与积压难题
消息队列(MQ)作为分布式系统中的核心组件,承担着解耦、异步处理和流量削峰等功能。然而,在实际应用中,消息丢失、重复和积压等问题时有发生,严重影响系统的稳定性和数据的一致性。本文将深入探讨这些问题的成因及其解决方案,帮助您在运维过程中有效应对这些挑战。
36 1
|
4月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19380 30
|
2月前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
2月前
|
运维 关系型数据库 MySQL
自动化运维工具Ansible的实战应用
【10月更文挑战第9天】在现代IT运维领域,效率和可靠性是衡量一个系统是否健康的重要指标。自动化运维工具Ansible因其简洁、易用的特性,成为了众多企业和开发者的首选。本文将通过实际案例,展示如何利用Ansible进行日常的运维任务,包括配置管理、软件部署以及批量操作等,帮助读者深入理解Ansible的应用场景及其带来的效益。
|
1月前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第27天】在智能运维中,Prometheus和Grafana的组合已成为监控和告警体系的事实标准。Prometheus负责数据收集和存储,支持灵活的查询语言PromQL;Grafana提供数据的可视化展示和告警功能。本文介绍如何配置Prometheus监控目标、Grafana数据源及告警规则,帮助运维团队实时监控系统状态,确保稳定性和可靠性。
227 0