Kubernetes 应用通过 Service Mesh 进行流量切分与灰度发布|学习笔记(二)

简介: 快速学习Kubernetes 应用通过 Service Mesh 进行流量切分与灰度发布

开发者学堂课程【Kubernetes 云原生管理实践】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/751/detail/13222


Kubernetes 应用通过 Service Mesh 进行流量切分与灰度发布


6、整个流程虽然说是轻量级的,但他的想法还是以平台为中心,以集群为中心,OAM 是以应用为中心,这是根本的不同。OSM 项目比较新,它有一个小问题,osm install 这个地方是要上 chart 的,从 github 下载 osm cli,下载之后把它编译,编译之后他就用现在的版本安装 helm chart,这里面会产生一个不一致的情况,github里面的文件可能会比 helm chart 里面的新。所以在编译的时候出现head 的二进制拿到,拿到之后作为 helm chart 里面要下载的 daughter image ID。还有一个地方默认的 service,一些 employ 之间是不能通信的,为了实验方便允许他通信。

 

7、下面从 Injection 开始自动注入 slidecar,主动注入 sildcar 以后就可以往里面添加应用。

image.png

 

之前用了第一版本,这个是第二版本,Containerrizeworkload 的定义放在了一个文件里,使用第二个版本。这个 component 相对是较为简单的,重点是看 trait 怎么定义的?

image.png

 

trait 没有进行代码的封装,所以直接引用,直接使用 API 版本,这样 OAM 就知道该怎么寻找 CRD,最后把信息传送过去。在 demo2 这个应用的定义里面,有两个 component,第一版本和第二版本。

image.png

 

在第二版本里面,要介绍 trait 是怎么定义的 。TrafficSplit 服务有两个版本,它是根据版本。把 Traffic split 全部放在 v1下面,如果不这样做,则默认各一半,所以把它全部放在v1下。

 

8、现在先注册 Components,然后把 trait 也注册上去,今天只需要用到一个 trait。下一步定义应用。

image.png

 

2”的意思是里面有两个容器,第二个容器是 OSM sildcarService也已经有了两个。

image.png

 

Pod 都起来之后,产生一些流量,测试分流这件事情有没有成功。该怎样测试流量呢?流量给 v1 100。现在有个问题,OSM 是以 service employ 来进行流量控制的,我们装的 front-end 只有一个 demployment,没办法使用,必须安装 service 。所以用 port forwarding 比较好。所有的流量都到 v1上,v2上没有,这就是 OSM 进行分流的概念。光标所示地方是v1,如果是 v2,会有显示。

image.png

 

Demo app 本身是往回打标签,hey 工具太快了,所以没看见,现在一个一个打,大家可以看到。

 

9、为什么提倡用 OAM 做这个事情?假设不用 OAM,这个配置文件很常见。

image.png

这个里面有 namematchLabels,然后又是名字。这些内容往后配版本号的时候,很容易出错。为什么 Kubernetes 这样设计?因为这体现了以行为为中心,Kubernetes 是以平台为中心,走不同的 CRD,或者走不同的 Control 都会需要去读一个或者写一个 label,有很多麻烦。如果使用的是以应用为核心的发布方式, 就没有这些事情,只需要关心自己的逻辑。OAM 是绑定这件事的,后面手工要做的事情他已经管理好了,比如现在把这个应用删了,trait也会一起被删掉,不用在管这些事情。以应用为核心,不同团队为分割现代的运维方式简单高效。特别是对于有很多相近的字段的时候,trait 是一个非常好的工具。今天这个 trait 并没有改代码,所以有多种余的字段在里面。如果已经有一个 trait,因为这几个项目是比较新的开源项目,来不及做  trait,是直接套用,所以还是有一些重复的内容。如果是按照 OAM 的定义,定义出来的 trait 会更加精准,更加好用。希望 trait 像应用一样有仓库,需要什么就拿什么。

 

10、为什么 OAM 是一个标准?首先要对 trait 进行管理,如果没有管理,在一个集群当中有哪些 trait 都不知道,现在部署 trait 是没有办法进行管理的,没有办法给用户进行统计,用户没有办法查询。有些 trait 之间是互相抵触的,比如说 KEDA HPA,他之间有可能会出现冲突的情况。假设有一个 trait 的仓库,在进仓库之前,先填好有哪些字段需要维护,有哪些功能,这样就很容易进行管理,而且因为是以应用为中心,所以冗余的字段都不需要,也不会容易产生错误。Component 有两个,一个是第一版本,一个是第二版本,也可以把它分成两个应用。假设有四五个微服务,只有一个为服务有两个版本,还是希望把他们放在一起,作为一个应用。假设把 v1 v2 拆成两个应用,剩下的其他的微服务该怎么办?现在这样做是完全可以的,从业务靠量和出发,这就是 OAM 很多的优点。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
Kubernetes Java 容器
部署 Spring Boot 应用到 K8S 教程
部署 Spring Boot 应用到 K8S 教程
64 0
|
2天前
|
Kubernetes 应用服务中间件 nginx
Kubernetes详解(六)——Pod对象部署和应用
在Kubernetes系列中,本文聚焦Pod对象的部署和管理。首先,通过`kubectl run`命令创建Pod,如`kubectl run pod-test --image=nginx:1.12 --port=80 --replicas=1`。接着,使用`kubectl get deployment`或`kubectl get pods`查看Pod信息,添加`-o wide`参数获取详细详情。然后,利用Pod的IP地址进行访问。最后,用`kubectl delete pods [Pod名]`删除Pod,但因Controller控制器,删除后Pod可能自动重建。了解更多细节,请参阅原文链接。
9 5
|
5天前
|
Kubernetes Cloud Native 持续交付
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
【5月更文挑战第7天】本文探讨了Docker和Kubernetes如何协同构建和管理云原生应用。Docker提供容器化技术,Kubernetes则负责容器的部署和管理。两者结合实现快速部署、自动扩展和高可用性。通过编写Dockerfile创建镜像,然后在Kubernetes中定义部署和服务进行应用暴露。实战部分展示了如何部署简单Web应用,包括编写Dockerfile、构建镜像、创建Kubernetes部署配置以及暴露服务。Kubernetes还具备自动扩展、滚动更新和健康检查等高级特性,为云原生应用管理提供全面支持。
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
|
6天前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:Kubernetes与微服务架构的融合
【5月更文挑战第6天】 在数字化转型的浪潮中,企业正迅速采纳云原生技术以实现敏捷性、可扩展性和弹性。本文深入探讨了如何利用Kubernetes这一领先的容器编排平台,结合微服务架构,构建和维护高效、可伸缩的云原生应用。通过分析现代软件设计原则和最佳实践,我们提出了一个综合指南,旨在帮助开发者和系统架构师优化云资源配置,提高部署流程的自动化水平,并确保系统的高可用性。
29 1
|
15天前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:以Kubernetes为核心
【4月更文挑战第27天】 在当今数字化转型的浪潮中,企业急需构建灵活、可扩展的应用来应对不断变化的市场需求。云原生技术以其独特的优势应运而生,成为推动现代应用开发和部署的重要力量。本文深入探讨了云原生的核心组件之一——Kubernetes,解析其如何通过容器编排优化资源利用,提高应用的弹性和可维护性。同时,文章将展示如何在云平台上实现高效的服务发现、自动扩缩容以及持续集成和持续部署(CI/CD),进一步阐述云原生架构下的最佳实践和面临的挑战。
|
15天前
|
Kubernetes 负载均衡 Docker
【专栏】构建高效微服务架构:Docker和Kubernetes在构建微服务架构中的应用
【4月更文挑战第27天】本文介绍了Docker和Kubernetes在构建微服务架构中的应用。Docker是开源容器引擎,用于打包和分发应用,实现隔离和封装,提升可扩展性和可维护性。Kubernetes是容器编排平台,自动化部署、扩展和管理容器,提供负载均衡和故障转移。二者结合,能高效支持微服务架构。文中通过实例展示了如何将用户、商品和订单服务用Docker打包,再用Kubernetes部署和管理,确保微服务稳定运行。
|
29天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
23 4
|
1月前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
37 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
1月前
|
Kubernetes 网络协议 应用服务中间件
kubernetes核心技术之Service知识点总结
kubernetes核心技术之Service知识点总结
21 0
|
1月前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
29 0