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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 快速学习 Kubernetes 应用通过 Service Mesh 进行流量切分与灰度发布

开发者学堂课程【Kubernetes 云原生管理实践Kubernetes 应用通过 Service Mesh 进行流量切分与灰度发布】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/293/detail/3440


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

二、分流

1、发布更新策略

分流在流量控制里面也是主要的事情。分流基于对service,网络进行控制实现,因为涉及到发布更新策略。

发布更新策略一直希望发布不中断,rolling update,要是停一下服务,对外服务断掉,在rolling update中有两种发布策略,一个是蓝绿发布,一个是金丝雀发布,蓝绿发布主要是简单粗暴,测试过了,全部都切换过来,新已经布置好,测试完直接把它切换。

金丝雀发布也叫灰度发布,慢慢迁移,迁移的过程,用到分流,有两个服务,切5%,切10%,20%,40%,80%,切到100%,都可以了,再把旧的关掉,因为业务在生产环境中必须要有的功能,但是原生在这方面支持做的不好,造成自己要做很多工作才能够做到金丝雀发布或者灰度发布。

在这种情况下都喜欢用其它第三方组件或者项目实现功能,比如很重项目,维护也比较头痛。

2、Demo

作为oam的初衷,把各种运维能力作为trait具有的特征绑定到组件上面,组件就是业务代码,它把应用作为基石把traits作为buliding block加上去,加上去以后把它搭建成完整应用发布,这是oam一直致力在做的事情,所以今天把osm中把OSM traffic split作为OAM的trait绑定到应用。

安装osm,sidecar injection,创建应用,应用中包括trait,分流的trait,可以看到osm是一个很新项目,文档不多,分流是针对smi实现,所以它特别重视api,osm是smi的样板实现,specification如何做,安装好osm,oam不但对于应用本身发布,强调以应用作为中心,而且对于技术团队分工也有一定期望,比如软件开发的同学做,有的工作是应用运维的在做,买公有云服务,不同的分工,侧重点都不一样,运维能力,装oam的runtime,装osm或者装普罗米修斯等,工作应该是平台开发的同学来做,每个公司或者每个用户自己设置不一样,有的更偏基础设施一点,会做这种运维工作,有的更偏应用一点,有基础设施的同学在做,但是工作应该分开的,如果把工作分开以后做事情变得很轻巧,如果看osm的文档。

demo都是非常的复杂。

是有一个应用,都是bookstore里面的微服务,有很多yaml,装很多东西,已经是速成,因为用了run,有脚本,如果没有脚本结合需要更久时间,整个流程,虽然它是轻量级或者buliding block,但是整个想法以平台为中心,以集群为中心这,再强调一下,oam以应用为中心,根本不同,osm项目比较新,所以它里面有小小问题,它在osm install,从github下载,编译以后,用现在的版本进行安装,会产生不一致的情况,因为github里面文件会新,编译时出现二进制码,拿到以后把它作为kubectl里面下的id,export之间不能通讯,为了实验方便可以允许通讯。

git clone https:/ /github . com/ openservicemesh/ osm.git

cd osm

make build-osm

export PATH= $PWD/bin: $PATH

commit=$(git rev-parse HEAD)

osm install --osm- image-tag $commit -enable-permiss ive-traffic-policy

## Allow sidecar injection

kubectl label namespace default openservicemesh. io/ monitored-by-osm

## Install appl ication

kubectl apply -f Components/

kubectl apply -f definitions/ smisplit. yaml

kubectl apply -f appconfig demo2. yaml

自动注入sidecar,添加应用,component,两个版本的 go-prom-app,所以component相对比较直接简单。重点看关于trait怎么定义,没有进行代码封装,所以直接引用,用api版本,oam知道去哪找crd把信息传过去,在demo2应用里面,有两个component,有go-prom-app1第一版本和go-prom-app2第二版本,在第二版本里面介绍trait如何定义,服务有两个版本,全部都放到go-prom-app1上面,如果不这么做,默认应该各一半,所以默认全部放到go-prom-app1上面,先注册component,再注册trait,smi的trait,定义应用,2是里面有两个容器,第二个容器是sidecar,以前装过的,所以都没有,service也有两个,可以看到都是running,产生流量测试分流,有没有做成功,流量给v1是100,osm是以service component进行流量控制,装的只有一个,所以没办法用,需要装service才可以,用port-forward比较好,进入本地curl localhost:8080/ test,所有流量都到v1上面,做10个,v2没有。

Demo app本身往回打标签,配工具太快,所以都没看见,一个一个打就可以看到,假设不用oam,很常见的配置文件,名字,

matchlabels,名字,配版本号时很容易出错,弄起来非常不方便,很容易出错,所以Kubernetes设计以平台为中心,走不同的crd,每一个都会需要读一个或者写一个lable,比如去政府做事情要盖章,每个地方都要盖个章,就会有很多麻烦,会有这么多麻烦如果用以应用为核心发布方式,没有事情,关心自己的逻辑即可,因为到哪,traits跟着应用走,最后oam绑定这些事,把后面需要手工去做事情,它帮你管好,所以比如现在把应用删除,trait也会一起被删掉,不用再去管事情,所以这种以应用为核心,不同团队为分割的现代运维方式简单高效又好用方式,特别对于有很多很相近字段时trait是非常好的工具,trait没有改代码,所以还有很多冗余的字段在里面,但是如果已经有trait,因为项目比较新,包括osm都是比较新的开源项目,来不及做trait,直接把它套过来,有重复的东西,如果按照oam定义的trait更加经典更加好用,希望traits像应用一样,解java应用都有每本仓库,需要什么就去拿什么,oam标准要对trait进行管理,如果没有管理,在集群中连有哪些traits都不知道,像现在部署traits是没有办法直接进行管理,没办法给用户统计,自己知道,但用户没有办法查询。

比如有的trait之间互相抵触,比如hpa之间有可能会出现冲突情况,也要知道,想象假设有traits仓库,在进仓库之前,先填个com文件,先填好用哪些字段需要维护,有哪些功能,很容易进行管理,而且因为以应用为中心,不是应用围着转的系统,冗余字段都不会再需要,而且也不会容易产生错误,应用定义,比如component有两个,第一版本,第二版本,把它分成两个应用,假设有四五个,像osm网站上面的应用,有四五个微服务,只有一个微服务有两个版本,还是希望把它们放在一起作为一个应用,把v1和v2拆成两个应用,剩下的微服务怎么办,有问题,所以现在这么做毫无违和感,想怎么拆都可以,做一个可以,做两个也可以,只都从业务逻辑考量和出发,所以这是oam很多的优点,doem没有做代码修改,但是看到了yaml的情况。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
Kubernetes 容器
K8S的Service的LoadBanlance之Metallb解决方案
本文介绍了如何在Kubernetes中使用MetalLB来实现Service的LoadBalancer功能,包括MetalLB的部署、配置、以及通过创建地址池和部署服务来测试MetalLB的过程。
35 1
K8S的Service的LoadBanlance之Metallb解决方案
|
5天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
|
16天前
|
Kubernetes 监控 Cloud Native
云原生入门:从传统应用到容器化部署的旅程
【9月更文挑战第19天】在数字化浪潮中,企业正迅速将目光投向云原生技术,以实现更快的应用开发和更灵活的资源管理。本文将通过一个简单示例引导读者理解如何将传统应用转变为云原生应用,并部署至云端。我们将探索容器化技术的基础,以及它如何帮助企业解锁现代软件交付的速度和效率。准备好让你的应用乘上云原生的快车了吗?让我们开始这段令人兴奋的旅程吧!
|
18天前
|
Kubernetes Cloud Native Linux
云原生入门:Kubernetes的简易部署与应用
【8月更文挑战第49天】在云原生的世界里,Kubernetes(K8s)是一颗璀璨的星。本文将带你走进K8s的世界,从安装到简单应用,轻松驾驭这个强大的容器编排工具。让我们一起探索云原生的奥秘,解锁新技能!
|
29天前
|
Kubernetes Docker Python
如何在K8s中使用Python应用
一文带你了解如何在K8s中使用Python应用
21 4
|
2月前
|
Prometheus Kubernetes 网络协议
k8s学习笔记之CoreDNS
k8s学习笔记之CoreDNS
|
2月前
|
存储 Kubernetes 数据安全/隐私保护
k8s学习笔记之ConfigMap和Secret
k8s学习笔记之ConfigMap和Secret
|
17天前
|
Kubernetes Cloud Native Java
探索未来编程新纪元:Quarkus带你秒建高性能Kubernetes原生Java应用,云原生时代的技术狂欢!
Quarkus 是专为 Kubernetes 设计的全栈云原生 Java 框架,凭借其轻量级、快速启动及高效执行特性,在 Java 社区脱颖而出。通过编译时优化与原生镜像支持,Quarkus 提升了应用性能,同时保持了 Java 的熟悉度与灵活性。本文将指导你从创建项目、编写 REST 控制器到构建与部署 Kubernetes 原生镜像的全过程,让你快速上手 Quarkus,体验高效开发与部署的乐趣。
15 0
|
2月前
|
Kubernetes 网络安全 容器
在K8S中,有个服务使用service的nodeport进行暴露,发现访问不到如何排查?
在K8S中,有个服务使用service的nodeport进行暴露,发现访问不到如何排查?
|
2月前
|
Kubernetes 负载均衡 网络协议
在K8S中,Service的类型有哪几种,请说⼀下他们的用途?
在K8S中,Service的类型有哪几种,请说⼀下他们的用途?
下一篇
无影云桌面