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

简介: 快速学习 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的情况。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
14天前
|
JavaScript NoSQL Redis
深入浅出:使用 Docker 容器化部署 Node.js 应用
在当今快速发展的软件开发领域,Docker 作为一种开源的容器化技术,已经成为了提高应用部署效率、实现环境一致性和便于维护的关键工具。本文将通过一个简单的 Node.js 应用示例,引导读者从零开始学习如何使用 Docker 容器化技术来部署应用。我们不仅会介绍 Docker 的基本概念和操作,还会探讨如何构建高效的 Docker 镜像,并通过 Docker Compose 管理多容器应用。此外,文章还将涉及到一些最佳实践,帮助读者更好地理解和应用 Docker 在日常开发和部署中的强大功能。
16 0
|
15天前
|
消息中间件 Kubernetes NoSQL
「译文」K8S 及 OpenShift 上应用程序的 Labels 和 Annotations 最佳实践
「译文」K8S 及 OpenShift 上应用程序的 Labels 和 Annotations 最佳实践
|
15天前
|
存储 运维 Kubernetes
批处理及有状态等应用类型在 K8S 上应该如何配置?
批处理及有状态等应用类型在 K8S 上应该如何配置?
|
16天前
|
Kubernetes 应用服务中间件 nginx
百度搜索:蓝易云【使用Kubernetes部署Nginx应用教程】
现在,你已经成功在Kubernetes集群上部署了Nginx应用。通过访问Service的外部IP地址,你可以访问Nginx服务。
23 4
|
16天前
|
运维 JavaScript 开发者
深入浅出:使用Docker容器化部署Node.js应用
在当今快速发展的软件开发领域,构建一套高效、可靠且易于扩展的开发环境成为了许多开发者和企业的首要任务。本文将探讨如何利用Docker这一强大的容器化技术,实现对Node.js应用的快速部署和管理。不同于传统的摘要方式,我们将通过一个实际操作的视角,逐步引导读者理解Docker的基本概念、容器与镜像的区别、以及如何构建自己的Node.js应用Docker镜像,最终实现应用的容器化部署。此外,文章还将简要介绍Docker Compose的使用,帮助读者管理包含多个服务的复杂应用。无论是刚接触Docker的新手,还是希望深化理解容器化技术的资深开发者,本文都将提供有价值的见解。
13 0
|
22天前
|
存储 Kubernetes 监控
Kubernetes快速进阶与实战:构建可靠的容器化应用平台
Kubernetes快速进阶与实战:构建可靠的容器化应用平台
57 0
|
25天前
|
存储 Kubernetes API
Kubernetes:现代应用部署与管理的新篇章
Kubernetes:现代应用部署与管理的新篇章
61 0
|
29天前
|
存储 Kubernetes 监控
K8s技术全景:架构、应用与优化
K8s技术全景:架构、应用与优化
157 0
|
1月前
|
Kubernetes 负载均衡 网络协议
|
1月前
|
Kubernetes 负载均衡 Linux
Kubernetes的应用
Kubernetes的应用
24 0