大家下午好然后今天大家很不容易要坚持到今天然后今天会如我这个我赵章正然后还有赵明山他们我们两个都来自阿里云现在也是人工cruise的一个mentender然后跟大家介绍一下怎么样用这个cruise route去做一个先进发布特别是对你们自己如果有定制的一些工作负责或者是一些流量的方案的时候的一个这个方案吧然后我也想跟大家简单了解一下现在大家有没有目前还没有使用过OpenCruise相关功能的同学有没有好行那首先介绍一下首先是我会大概简单介绍一下什么叫做progressive delivery就是接近式发布还有介绍一下这个工作负载这个是kbass工作负载一个基本的一个概念吧然后会介绍一下cruise route也就是我们那个新的一个接近式发布的一个框架然后后面会介绍一下相关的一个流量道度就是cruise route集成流量道度的一些发案吧然后后面会再介绍一下这个我们新做的一个就是支持端道端流量恢度的一个功能吧那首先是首先是什么叫建订式发布建订式发布的话它其实主要是我们一般人来说就是发布都是需要能够可恢度可暂停是可观察然后可能建订式发布来说就是它需要能够是增量的去做发布然后是能够去可验证的然后可能这个经常是说很区别的话可能就是跟对那种一把缩的那种发布方式会有一个主要的区别那建订式发布主要是其实会有一些这样的一个流程首先就是它要发布的时候它会去首先是会发一些这个恢度的一些实力然后在恢度实力上面我们会可能的话会把一些一些流量就是比如说我们希望去做验证的一些流量把它倒到这个恢度的实力上面然后我们再会去做一下对它去做一些验证比如说去去考察一下相关的一些业务指标也没什么异常有没有达到我们新版本想要达到的业务目标如果符合我们的预期的话我们其实就会继续然后继续的时候其实有种方式是一种继续的话我们还是走这个分批就是还是一批一批再来然后中间可能还会有暂停也还会有继续观察也有可能是第一批验证完之后我们就继续就直接这个流逝去就发布下去这个其实就是一般的一个今天是发布的一个流程它其实可以很好地去增加我们整个新的业务功能的一个交付的一个效率以及它的一个稳定性然后今天发布其实是构建在那个K-8S这个workload的也就是K-8S Workload其实就是管理一组pod的一个基本的一个概念那K-8S原生的那个workload其实主要是两种一种是有无状态应用主要是用department的department的其实大家主要用的其实它就用它的一个滚动发布的一个测量然后它其实有几个有几个控制的参数我们可以用来对它做发布的时候可有用首先是叫做max unavailable也就是它的最大可以用发布的时候最大不可用数量它这个可以控制用来发布的一个兵发度然后还有一个是max searchmax search可能是用来可以控制你发布的时候可以额外新扩一些pod然后第三个比较关键就是pod这个就是它可以手动的去把一个发布的过程给它暂停住那这个其实也是后面off course route它用来去实现建议发布的一个很重要的一个机制就是它需要发布是需要能够暂停才能够我们去才能够对它去做观察然后stiffle set其实是一个有状态应用所以说它其实也有两个参数一个是max unavailable当然这个是1.24才新加入的一个功能然后它其他跟无状态应用的diploma一样也是这个最大的不可用数发布的时候不可用数量然后它还有一个是partition那这个其实是表示的是老版本的发布过程中要保持的老版本的一个数量那这个stiffle set那个partition以及plumnet pulse那其实就是off course后面实现这个建议发布的一个重要的一个重要的一个机制那我这边在介绍要cross route然后首先要实现一个建议发布其实是比较复杂的就是就按照比如说这流程来说可能你需要首先你需要去调用workload然后去想办法给它按照你新的版本去扩一个pull出来然后呢你还需要能够去去协调这个流量调度然后让它比如说在满足一定的流量特征就比如说它一带有某一些HPT头的情况下你要把那一部分流量比如说百分之多少流量把它引到你新扩出来的pull上面然后还需要说带后面的话你需要同步的去把那个新版本的pull的数量给逐渐增加同时你还得把这个流量也得同步的去放大那这里的话其实就有两个主要的一个协作就是说得需要同步的去协作这个工作负载的那个发布和这个流量的一个流量的一个调度中间这个谁去做那个两边的这个协调其实是一个比较关键的一个角色也就是cruzload其实就是要做的其实就是这个事情然后我们cruzload其实整体我们可以先从API上来去看一下就是我们API是想用了一个比较简洁的一个API首先分几个部分第一部分其实就是我们是通过引用的方式去把它给关联到了一个你们用户的已有的一个工作负载比如说就是一个deportment那这里其实也就是我们跟那个现有的其他的一些进行发布方这些发案的一个主要区别我们采用的是一种非侵入的方式所以说你可以直接使用你原有的比如说kbass原生的deportment来实现建设发布你不需要去做workload本身的一个修改那所以说这里是API上我们是引用一个workload然后我们这个workload其实我们在cruzload里面会实现这是多种那种workload包括原生的deportment包括stable set包括cruz的cruzset跟stable set然后最近也加速了对cruzdemonset的一个支持所以说对无状态应用有状态应用以及demonset组建我们都可以对它做坚定式发布然后第二部分是比较关键的是坚定式发布的一些主要配置首先是它可以有一些批次的一些定义比如说在右边压抹土地我们可以看到它有一些step的定义那每个step你可以定义说在那个step你想要发布多少的实力然后在这个step你可能想要暂停暂停多少时间或者说暂停等待人工的一个确认然后另外一个部分其实就是对这个流量的一个匹配的规则的一个定义就是它可能是可以需要去匹配一些Cookie或者匹配一些HB头来做一些定向的一个流量恢度然后后面的话其实就是还会有一些流量本身的一些比例相关的一些控制就是其实就是replicase或者是wait那个其实就是控制的是你新每个批次里面它这个pod要发的数量以及对应的流量的要放大的一个比例然后第三部分其实就是关联到这个我们对应的一个流量调度的一个相应的实现的系统CruiseRoute本身并不实现相应的流量分发的系统我们去调用的是其他的一些流量分发系统比如说一些网关或者是mash之类的所以说这里一样我们其实是采用一个引用的方式引用一个现有的一个这个流量分发的一个定义比如说这里引用的其实是一个Ingress的一个对象然后这里其实我们支持的其实是有Ingress的对象然后还有Gateway的API然后其实我们还支持用RuleR脚本来定来自定义一些流量一些CR来实现相关的一些流量的流量道路包括East2或者是API6这种它其实都有K8对应API都可以用这种方式来介入然后CR整体的架构这个框架来说其实就是一方面的话我们会如果提交通过一些PASS或者是AMHELM或者是ARGO CD或者是一些PASS的话它提交一个应用的相关的一些Manifest它在API6里面我们API6我们会做一个webhook就会Route会把对应的定义的这些workload给它进行一个托管就是通过webhook我们就会把workload给暂停住也就是我刚刚一开始介绍的比如说Department它有一个Pause自断然后如果是Stiff Wall Set我们会把它Partition设成一个100%就让它当它自己就不要发布然后让CR来接管对应的一个版本的一个方大的一个工作然后同时我们会再去调整对应的workload的配置就是比如说你可以去调整Partition把它从100%来调成比如说90%那就会有10%的是新的一个实力如果是Department的话我们会把它底下的一个replacet给它做一个扩容新的一个replacet进行扩容这样就对它去控制它一个新版本的数量然后另外一边比如说4.1这一波我们就会去操作相应的Ingress或者Gateway相关的一些对象然后来实现相应的一些金斯确的一些Service或者是一些网关去操作它的流量整体的话我们会反复的做操作workload和操作网关和流量的对象来实现建讯发布的一个逐渐的往后面去迭代最后实现对应用的整体的一个发布然后Cruise Route有一些核心的一些跟现有的一些方案的一些差别吧首先最大差别其实就是非侵入式的一个设计我们整个设计其实都是一采用一种旁路接入的方式所以说它可以直接引用各位原有的一些workload最多的可能是原生的deployment吧那你不需要像argo那样你需要放弃deployment然后去使用argo自己的CR当然你也不需要去改像flagger一样你必须把你的对应的deployment名字也改掉但我们的都不需要你只要引用你们原有的一个deployment就可以了然后你其实也不需要你改任何的用户自己的一些资源吧对点心的是一个HPA因为比如说你如果用flagger的话你知道它在实现它建讯发布的时候它会把deployment在反复的创建跟新建所以它的deployment名字会变来变去所以说你在配flagger的时候你配HPA的时候你只能只能用它提供的一套HPA的机制那我们在在cruise route你其实并没有就限制了所以说你还是可以用原来的HPA来做所以说也就是第三点就是说现有的工作负载可以通过提交一个cruise routeCR就可以直接把它接管到cruise建讯发布里面去然后你也不需要对它做比如说新建什么的都不需要做然后这个如果大家觉得不需要不需要用cruise route也可以把这个route对象直接删掉这样也可以然后第二点就是灵活性吧就是cruise route其实是现在大家能拿到的一个唯一支持多种工作负载的一个建讯发布框架就是它支持刚刚说的像无状态应用有状态应用包括第一门我们今天等下也会讲怎么去支持一些大家自定义的一些工作负责然后在这个流量介入方面我们现在应该也是比较丰富了通过英格兰斯和Gateway API再加上一些自定义的裸挖脚本来去对这些自定义的一些网络的网络流量调度的一些方案吧最后是可用性就是这块就是学习成本上我觉得还是比较简单的然后我们其实也跟像argo cdr什么vela之类的pass有一些集成然后这里有一个demo我可能会先跳过去等一下我们看这个整个时间然后再决定等一下是不是要给它放一个就是简单一个用argo cdr再加上一个简单一个cruise route就可以实现一个这个定性发布的一个过程然后这里是也跟大家介绍一个可能大家可能不清楚就是我们拿这个铺本的我们可以实现一个就是不做这个流量调度我们只是做拿这个铺本做分批发布这么一个能力现在我们能看到的拿那个department的唯一的一个能去做实现分批发布的一个这么一个方案而且不需要额外的一些资源就是因为大家可能知道原生的department它现在其实只支持max3200revolvo和max220它其实缺少像stevol set这样可以在事先就暂停住的一个机制就是它没有stevol set这样partisan这么一些语异吧那现有的一些可能也可以实现这种分批发布的这些相关的方案它都会采用把department的做一个拷贝然后在这个实现在多个department之间反复切换的这么一些这些方案比如flag其实就这样的有一种方案但这样的话其实就是对大家的对相关department关联的一些资源可能都得相应的做一些设计包括相应GPA什么的然后这个其实也有的带来一个额外的问题就是你在使用这种department的比如说拷贝这种方式来实现分批发布的时候毕竟就带来说会带来额外的一个资源成本就是你必须新拷贝分department那意味着你新拷贝的department的相应资源都得准备好最大的缺点像你可能为了做一个分批发布你可能资源就得多准备一倍的资源这个其实是很大的一个浪费然后另外一事就是department的名字也会换掉那这个其实对于getoff来说是非常非常非常一个不友好的一个应用方式那我们cruise route的话其实实现方式其实就是就可以支持这个department名字的不变就是具体实现简单来说就是我们会通过webhook把这个把department的在apply到这个在keybox上我们就把它给给它暂停住然后让department控制器本身不会去再做对reference set本身的一些增减然后由我们的cruise route来去做做它新老版本的一个数量的一个调整那通过这种方式我们就可以呃实现这个其实我们就是所谓的原地的一个department的一个分批发布的一个方式呃然后这个的话我们实现后来其实也可以保证说使用过程中也不需要额外的创建多余的资源去去创建一个新的department然后保证过程发布过程中这个department名字也可以保持不变呃然后现在说了就是呃原生的我们现在cruise其实已经支持这些这些workload就比如说呃原生department的原生的stable set然后cruise的那个advanced stable set还有这边叫做stablelike workload这个其实就是说呃我们现在其实发现到我们很多的用户呃可能它都是一些比如说特别是有状态应用吧他们会把stable set甚至cruise的哪都考一份然后指数是在它原有的CR上面增加些自断的很典型的一些数据库这些很有可能用这种方式来搞数据库中间这些那种都是可能这种方式那所以说在cruise route如果我们识别到你的workload名字叫做stable set不管它是哪一个API group的然后如果说它又提供了像partition这样的自断我们就会用这种用stable set的一样的机制去对它做这个建议发布这个是目前已经支持的然后demon set就是目前也支持就是cruise的demon set因为cruisedemon set现在支持那个跟stable set一样支持那个partition自断所以说它现在也是支持对它做建议发布其实可能demon的话更多的主要是做分批发布吧那分批发布的话这样大家维护一些节点组建的时候就能够更好的去做相应的绘度绘点证然后现在是其实我们有一个工作正在做正在想要通过定义一种自定义的就是让用户把自己使用的那个work load给提出就是这个我可能不太清楚就是有一个叫做work load definition那它可以就是说如果它只要有类似于replicase template以及partition这样的自断我们就可以通过这份定义来去做对它进行操作当然这个其实有一定限制就是相当于我们要求说它一定是可能是跟step for set一样去这样去work的当然现在我们可能也发现社区上其实可能有很多人无状态用可能它其实比如说大家自己写的可能是比如说是照着department来设计的那这个可能得我们得再重新设计一下然后这里其实大家我可能也想问一下大家这边有没有自己在生产环境用过自己写的work load的特别是我不知道有没有什么这样的work load的我不知道有没有我觉得行 那这个等一下现在大家也可以交流一下因为我这个也想好好去设计一下特别是类似department的这种可能还得你看一下怎么去设计这个方案行下面其实是跟这个协调流量调度相关的我这时候会让这个赵明山来说大家好我叫赵明山然后也是来自阿里原然后的话是张震的同事然后的话我重点就是给大家就是介绍一下就是刚才张震的话可能就是大部分的工作可能是之前cruz route现有的一些能力跟一些情况然后的话最近这半年的话我们就主要在那个流量方面的话有一些就是探索然后主要是想给大家分享一下好 首先就是第一个问题就是其实cruz route的话就是是有一些金色血发波ab test 这种但是其实放在社区的话其实有各种各样的需求可能有的公司的话用e-soul有的是空有的是n-dx还有一些是tri-fx这种各种各样的但是所以说如果我们要是都能一一要是满足的话就是其实对我们来说是有一些接入的成本就是如何去对接这些应用的话对我们来说是一个比较重要的一个事情然后的话社区的话其实是也有一些方案就是比方说像flaggercruz route的话他们就是直接定义在代码里面去执行包括他们的API定义的话针对于每一种资源的话其实也是有自己的这种API的一些定义但是这样的话就是我们也想考虑这种方式但是我们也感觉到有一些问题就是首先API的话会复杂一些就因为你每一种资源的话都有一个单独的API定义会对大家的学习成本就是有一个统一的一种API第二个的话就是这种如果是这种one by one的这种集成方式的话就是工作量的话也会比较大对然后第三个的话就是说如果是这种代码去集成的话如果因为我了解到有很多公司就是它是有一些自言的这种流量调度的一些方案的它可能基于社区的方案然后自己去实现了一些自己的一些方案然后这种的话可能要去内部大码要去集成然后并且的话它要去重新打镜像用自己的仓库这样去维护对它就可能不只能直接用社区的进行方式它肯定要重新去编译构建对然后这两种的话基于这几个条件的话我们其实刚才也提到了就是我们想到了一种可扣可染的一种方式就是想到了用路牙脚本对然后这是一个简单的例子这就是我们的一个流量调度的一个规则然后这个规则的话是一份统一的就是所有的都是一样的然后Traffic Routing的话是代表了流量的部分然后其中Service的话就是代表Service的名字这个的话我们定义在这因为它不管是什么字定义的它其实肯定是有Service的对另外的话我们定义了一个叫做Custom Refer然后这个地方它是一个数组你可以定义多个然后也可以定义一个然后Apple Worship的话这是一个例子然后你可以定义自己的Apple Worship然后看的还有Name然后这就可以了只要这份配置然后的话它只把这份配置然后Apply到KBS里面之后其实我们的这个里面的这个Traffic这个Controller这个控制器的话我们其实在执行的时候我们其实因为KBS是有一个Instructor这一种机制的其实是我们通过刚才这三个因素其实是我们哪怕不知道这个资源其实我们也可以从KBS里面盖它到然后盖它到之后的话我们会把这个摔给Lua脚本因为Lua脚本的话它是针对于不同的资源有不同的定义大家可以看一下这边明明有这个例子后面会有这个例子就是我们针对于每一种资源的话都会有一个Lua的脚本然后Lua脚本的话它就会去处理这些资源然后并且的话根据这些规则然后我们把这些给它刷到做一些处理然后的话再把这个最后的结果的话Apply回KBS集群右边这就是一个例子这个例子的话里面你像下面这部分的话上面中间那部分Connected in这部分就是我们可能增加的比方说我们会给它新增加一个Service然后的话我们会变更一下配置然后这个说话是包括Regent然后杭州这部分的话其实都是我们Apply进去的它原来的配置可能没有这部分就达到一个流量绘度的一个效果这样的好的方式的话其实是有一些就是首先的话就是它的可扩展性比较好就是我们其实对任意资源的话都可以因为每一份资源的话都可以有一个Lua的脚本去处理然后第二个的话就是非常方便去集成就大家的话其实大家都可以去提交然后针对每一种资源的话就是大家提交的话然后就可以去使用第三个的话就是是不用去重新再打经向了因为它是解释性远就是其实不需要重新打经向然后它就可以去直接去使用另外的话就是也是debug比较简单吧对然后因为Lua脚本的话它本身你去再写这份Lua脚本的时候它的debug的话其实也是非常的方便的第三点的话就是学习成本的话比较低就是我们是统一了这份Apply的配置然后其实不管对于任何的资源的话都是这份Apply就是大家看的会比较清晰一些然后方便一些另外的话就是一些Lua的脚本也比较简单我们下面看一个Lua脚本的例子就是上面那个我没有给例子所以大家可以看一下右面这个Lua脚本这个是一个NDX的一个Lua脚本然后这个Lua脚本的话它就是因为我们会把这个Route当时你想做这个分批比方说我第一批的话想去杭州然后或者百分比的这些然后包括这些一些英格瑞斯或者伊斯沃的这些配置然后给这个Lua脚本这个Lua脚本的话它会去根据这些流量恢度的一些规则然后它去增加一些Route或者增加一些Spike然后这样的话我们就可以刷回来然后这个的话所以说其实这种这种方式的话大家其实也可以非常方便的去提交你自己的这种网关的一些方式然后针对这个的话我们其实也是增加了一些社区的一些文档然后还有一些例子然后的话可以方便大家非常方便地去集成大家可能只要按照这个例子然后去非常简单地做一些调整跟修改就可以另外的话就是这些例子的话可能是主要是针对两种吧第一种的话是可能针对于社区这种比较通用的这种比较说像API FIX因为我们现在默认的话是只给了EASL的这个方式其他的话就是希望社区的同学的话根据使用情况的话比如像API FIX这种大家可以去提交然后另外的话这种的话大家可以合作代码然后我们打说打到镜像里面去这样其实社区的人其实都能够去共享而针对于这种真正自定义的可能只有某些公司可以使用的话我们其实是你可以把这个落下脚本配到config web里面去就是cruiser的话有一个特定的一个config web你只要配到config web里面去它就可以成效另外的话这种方式的话它的优先级会高于那种镜像就是比如比方说你也是n-dxn-dx我默认提供了但是你也想基于n-dx有一些扩展你想使用你的然后你只要把你的config web里面提到这个config web里面去它也是优先生效的就是非常方便大家的一个使用跟继承然后前面的话就是介绍了就是大家如何去继承下面的话就是我们在不断推进过程当中也碰到一些新的一些问题然后主要是微服务的场景微服务的场景的话可能跟之前的话可能还是不太一样所以说这个我们就扩展了一种就是端到端的这种渐进是发布的这种方案就是微服务的话它跟之前那不太一样的话我们其实也可以叫端到端其实我们内部有的时候也经常叫全联录规定其实我们刚刚是在做这件事情的时候也碰到过一些用户之前是哪家公司我就不提名字了他们也是就是他们是微服务然后他们可能这次的话我只发布了两个应用比方说我只发布了B只发布了C然后我A没有发但是我肯定是希望我然后我流量进来以后的话我A的话虽然没有发布但是我希望它挥度的流量的话能跑到B跟C或者说了的话它只发布了A跟C它希望我挥度的流量A的话能访问访问B的Base版本然后去访问这个C的挥度的版本这是一个非常正常因为它是整条连路的话都要求一个挥度但是它不是每次都会发布这个微服务上下游的所有的应用就是我如果每次的话都是所有的应用都要发布我构建一道新的可能就OK但是可能它每次的话只是发布其中的一到两个应用这样的话其实不管是前面一种方案或者像是说社区的AgoRoad或者Flag其实包括社区的方案其实目前的话是没有解决这种场景的这种全连路的方式其实都是需要各个公司自己去解决然后针对这个的话我们其实也是实现了一种就是全连路的一种方式就写的是端导端但是我们就喜欢叫全连路挥度然后我们是新增加了一个资源这个资源的话大家可以看下面下面这个资源的话叫做traffic routing就是我们针对于这种模型的话我们换了以前不管是像前面讲的或者就是像AgoRoad或者像Flag它每一个其实挥度的话我都是针对于一个deployment或者针对于某一个独立的资源我每一个的话可能都要单独的配置它其实没有一个串但是这个的话其实全连路的话它有一个很大的特点就是你的挥度的话其实是一份单独的然后我多个application的话其实多个应用的话其实是共享这份挥度的这种配置跟流量所以说我们在这份配置里面的话我们把这个流量挥度的部分叫做traffic routing我们也叫做流量涌道我们把这一部分的话是单独抽出来比方说这个例子的话就是说我可能想安卓的用户然后我就希望去做一些挥度然后我其他的话就是我的还是我的正常的一些Base的环境然后Route的话它主要是为了圈应用就是这个的话还是一对一的就是我traffic routing的话是一份配置然后我Route的配置的话可能就是几个应用就是几份配置但是Route它这边的话不用再额外的去定义一些流量的规则它可能只是为了圈应用对然后这样的话这份配置的话我们就可以把这个涌道跟这些应用的话全部就圈在一起然后你比方说右边这个例子它是发的A跟C它只要发布A跟C然后的话我们就可以接听到这件事情给它构造出一个一个挥度的环境然后达到一个效果就是说它挥度流量会访问A因为B的话没有挥度所以说流量的话还会挥到BB的话就是其实是Base的环境然后后面的发的话如果这个流量是挥度的然后还会达到C因为我们对这个所有的这个后面的这个流量的话它都会增加一些标比方说这是MSE的一些标就是阿里Cloud然后ServiceTagGray增加这些标的话它自然会打过去这些流量这样的话其实我们就达到了一种全连络挥度的一种效果这个的话是我们跟MSE就是去合作然后达到的一种就是这种断的端的这种真正的断的端的这种全连络挥度刚才其实前面讲的也就是说我的应用可能相互之间的访问我其实是这种可以做到这种挥度环境还有极限环境的但是其实我可能还有一些其他的一些资源比方说我可能我进来以后我的有一些HTMIROCK CSSGS其实也是有挥度版本的其他MSE的Gateway的话也是支持这个能力的就是你如果有挥度标的它其实就可以使用你Gray的这种版本挥度的版本如果没有挥度标的话可能就极限版本另外的话可能服务之间的话它可能有一些MQMQ的话其实也可以把它给打通我MQ的不同消息的话我也可以推到不同的环境对当然这个的话就是这个是跟MSE的当中我们跟E-SOUL的话也可以去实现刚才的那种效果只不过的话它可能有一些限制我们现在还正在想办法解决但是的话刚才那个限制对于阿里云的这边的ASM就是也是Sweat Smash的一个服务其实是可以达到刚才这张图一模一样的效果对大家其实也不需要做任何的改造把你的应用可能只要左边这张图就可以如果大家使用E-SOUL的话然后还想达到这个C的效果的话可能就是大家的应用里面做一些小的一些改造比方说我可能对一些特定的一些High的你做一些显示的一些透传然后可能它其实也能达到一样的效果这样的话后面的话我们会把这个例子到时候就两种方式第一种的话可能是使用阿里这边提供的ASM的话它可能就是不需要完全不需要做任何感知另外一种方案的话可能就是因为社区的E-SOUL的话它有一些不太能满足的地方我们可以大家应用里面显示的去传一些High的感知的去显示传性High的其实也是使用一社区的E-SOUL其实也能达到类似的效果就是Rot的这个分享的话大概就其实到这里了然后我大概现在介绍一下就是OpenCourse的社区其实我们OpenCourse的话其实也我先介绍一下我们整体的一个到底是什么就是有很多人大部分都在问我们到底是什么我们跟K8S的关系是什么然后其实我们把自己其实定义为就是K8S的一个在应用管理方面的一个扩展就是大家其实看这个架构图我们是把这个OpenCourse的话画到K8S里面了其实大家这样理解是可以的然后就是我们是对于K8S很多能力的一些增强并且的话其实我们对于原生的K8S没有做任何的侵入并且的话我们跟它也不是冲突的就是我们是跟它一个集成的一个关系就是大家可以用我们的能力更好的去在K8S上面做一些应用的部署跟发布做一些落地可以降低大家就是K8S原生化的这种门槛然后的话OpenCourse的话主要是分为两个组件然后一个是Manager然后的话另外一个的话是一个是DemonDemon的话我们会部署到每个Node上面然后部署方式的话其实也很简单就是大家拉起一个K8S机群然后只要使用HarmInstall的方式其实就能够把OpenCourse的话安装进去并且的话我们也可以支持任意的这种社区的这种标准的K8S的这种都可以或者大家有一些改动的话其实也可以对只要是社区的标准这种方案其实我们都支持的话主要是通过一些CRD还有一些打一些Label或者一些Annotation比方说你可能在content上面打了一些启动顺序的一些环境面量我们就可以实现一些启动顺序的一些然后下面的话就是架构的话给大家介绍了一下下面看一下我们到底有哪些能力对 这张图的话大家可以看一下其实OpenCourse的话就是我们刚才介绍的话其实是下面这个建计是发布但是其实OpenCourse的话其实在满多领域的话就有一些扩展就是首先的话我们是有扩展一些应用的一些工作负载的就是因为刚才张政其实也介绍到了就是原生的Department的话还有原生的CyberSight它其实都有一些局限性的在发布方面首先的话其实我们就有一个类似于Department的叫做Colonsight然后它能够支持这种分批然后支持指定删除并且的话其实还支持有一些针对于这种无损这种上下线的一些领域的一些扩展另外的话其实我们还有一些原地升级的一些能力就是大家可能边境向的话不用再重建Pout然后直接达到一个原地升级的一个效果对然后另外的话针对于还有一些针对于CyberCard的一些管理CyberCard的话是这样的我相信就是使用CyberS的很多公司应该都用到CyberCard但是CyberS里面对CyberCard的一个处理的话其实是没有单独的资源它其实是需要大家配置到Department里面的我们的话定义一个叫做CyberCardCyberCard的一个资源大家把这个资源的话定义好然后你需要的这些Pout上面可能打一些特出的Label然后它就可以把这些CyberCard给你触进去就能够做到一个无感注入独立配置另外的话还能做到一个独立升级就比方说你如果CyberCard的话你只编更了一些镜像然后的话你只要把CyberCardCyberCard里面的版本给变了我们就可以去独立升级CyberCard并且在过程当中如果是成功的话其实是可以做到Pout的不同件并且业务不会毁无感然后Pout的其实也不会变成NOW Ready对然后有这样一些效果另外的话其实还有一些在一些增强的一些运萎能力比方说容器重启然后镜像预热等等还有一些安全方面的一些考虑就是我们可以做到一些Name Space然后CRD这些一些房积廉山厨的一些整理就是防止大家一些无操作或者代码出现一些bug之后然后出现一些血绷的一些情况另外的话我们其实在这种弹性分区管理方面的话也有一些探索就是可以比方说你可以把你有一批ECS的机器你希望的话优先调度Pout优先调度的ECS然后ECS如果资源不足的话再调到ECI然后我们这种的话其实这只社区的话它可能是做不到的然后倒是如果缩容的时候可以优先缩容ECI的这种机器的Pout然后再去缩容ECS的这种Pout然后为大家做到一个降本的一个情况这是上面的这些另外的话其实我们还有一个项目叫做Open Crew Game而这次的话其实也有一题我不知道有同学有没有这两天好像听到过这个名字对然后这个的话主要是在游戏场景的话做的一些探索它其实也是使用了我们的扩展的工作负载叫做Advanced Staff SightAdvanced Staff Sight的话对比原生的话它可能就是是有一些你可以指向删除然后指向缩容然后原地升级一些能力然后的话Open Crew Game的话它是针对于这种游戏game server自定力一些能力然后它的底层的话其实也是Advanced Staff SightOpen Crew Game的话主要是可能有一些比方说我有一些定向缩辅因为有一些可能大区之类的然后大家可能需要定向的去做一些服务或者定向的去做一些某些特定炮的上面的Node还有一些就是炮的需要对外直连因为游戏的话它是有状态的就是它不能够经过SLB再附在均衡一层它需要扣断的话直接连接因为游戏的话那些数据的话其实都是在那一村里面的对 等等这样一些能力对 就是大家如果是当然这种的话也不只是仅仅局限于这种游戏的我相对于对那些真正的可能有状态的一些服务可能跟游戏Games Lower有一些类似特质的其实都可以去参考这个项目对最后的话就是介绍一下我们社区然后我们这个项目的话大概是2019年就是其实是捐赢到SinsF了然后现在已经进入到了这种幅画的这种阶段然后的话大概的话我们是3到5个月的话会出一个版本的话我们在上个月的话刚刚推出了就是1.5的一个版本另外的话其实今年我们跟有一个蛮大的不同就是今年我们社区的话参与的人其实是越来越广了就是有很多同学的话其实也记忆参与到我们社区的建设当中然后给提了很多非常好的一些皮牙就是也欢迎大家进来多多参与一些我们的社区这些建设另外的话我们大概会每两周的话会开一次社区会议然后的话就是感兴趣的同学可以进来参加右边的话这是微信以及丁丁的一些圈然后大家可以加一下然后到时候有问题右边这个这是我的微信然后左边这个是丁丁群然后大家可以加一下然后到时候如果感兴趣的话可以有些交流然后不管可能是QBS或者OpenCourse或者之类的大家都可以现在还有时间吗还有时间吗好吧我们其实前面有一个简单的demo然后其实讲了这么多然后给大家简单的看一下不对然后放下这个demo吧这个demo其实我觉得其实挺好的对然后大家其实了解一下我们CourseROD到底是咋工作的其实前面讲了这么多到底是不是真的是吧然后这个的话就是一个Ico Server的一个服务然后它有一个Department然后是一个Ico Server的一个一个社区的一个镜像还有一个就是Service然后还有一个Increase这是其实你一个服务对外部服务或者之类的服务你想要去对应用最基本的几个资源是吧然后就定义在这然后的话除了之外的话你只需要额外的去定义一个Crossout的一个资源然后所以就是刚才那几个资源其实你都不用去动也刚才提到了我们一个费入亲入性是吧然后这样的话你去定义一些P次这个我是定义了三批第一批的话灰度10%的Pout然后的话5%的流量第二批的话20%第三批的话就100%然后现在的话这个是是用的Gate Office跟Argo CD然后我们做的一个演示这个的话代表我现在有三个分支第一个是Stable然后这个分支这个的话代表我们现在Route的一个状态是Healthy就是一个正常下面的话我们将用Argo CD然后做一个版本的一个升级我把它这个分支切到了V2V2的话我大概是右边这个的话是一个访问的就是代表的是V2大家也可以看到现在Department已经开始发布了然后我们看一下可以看一下Route的一个状态现在的话是在调流量它第一步的话会变负本变负本如果我们会判断它检查是不是成功如果成功之后的话才会进行第二步大家也可以看到可能大概已经有5%的流量会切到了新版本然后其他的话95%的流量还是老版本这样的话你人工检查确认OK之后我们提供了一个命令行的一个工具然后这个命令行的工具可以进行在下一批因为我们第一批的话大概是人工确认后面那个批次的话我是为了节约时间我是sleep了5秒钟你也可以表示sleep一个小时或者之类的都可以对然后它现在正在发布第二批第二批的话在挥度一个实力的一个过程然后现在挥度实力完了之后它在调流量所以说我们Cosroute的话它其实就会去调节这些一些流量还有一些实力的一些配置然后我达到这样一个效果然后这个地方的话我是等待10秒钟的话会进行一个下一批现在可以看到就是自动已经进入到第三批了第三批的话我们就会把100%的这个流量全部都切过去对然后大家可以这会的话应该是在发布实力大家可以其实通过右边这个图应该能感觉到可能现在已经发布完了对其实大家通过刚才的过程应该能感觉到可能使用Cosroute的话当然是没有太多的进入另外的话其实它的使用非常简单我这个粒子的话虽然是一个Gate-off但是其实你是对于Harm或者你自建的一些Pass其实都是一样的或者哪怕你Cosroute Apply其实也可以因为我们其实是监听的KBSApply的这种事件所以说就是你任何的这种都可以去对接这是一个正常发布的下面我会有一个简单的粒子刚才我其实已经执行了刚才有个简单的粒子应该是我去Sync发布了一个错误的一个版本的一个分支大家可以看右面是一个Farrow的然后我这第一批是5%的流量我现在可能人工检查就已经我发现失败了所以说我回滚的话很简单我只需要把刚才那个Ware的版本的分支我在Sync就可以解决了对就是你只需要把原来的版本搬下来就可以完成一个回滚对就是非常的简单不用大家没有改变你任何的这种以前的这种习观也还是正常的发布正常的回滚正常Apply你的资源然后我们这个的话都是一个旁路式的然后它可以去旁路式的去监听这些事件然后达到这种去做一些相应的这种行为对就这样大家有什么问题吗因为是这样的就是这种发布模式的话其实它是分两种发布模式我没有一种的话是我会前面那个骑士你会Department的骑士不动的对所以说其实你用这种方式的话其实它虽然看到的是这种过程但是其实就是你想要的那个方式可以的可以可以的对直接Apply就可以可以做到的就是在这种过程当中你可以改任何的配置就包括你的piece的个数然后你的配置然后包括你的流量的配置或者replicate的配置都可以对不用其实它那个你说的M1应该就说的是1次对不对OK对所以说我们因为它的资源的类型不一样所以说它的时间不一样所以说我们那个ROA脚本的话其实是你可以认为是一对一的你知道我们默认也提供了一个Esu的Esu的ROA脚本其实可以直接使用但是如果比方说你要去对接的话其实它大概ROA脚本的话就是你这个ROA脚本去操作Water Service然后我们也会把此次这一批挥度的这种流量的数量还有replicate的一批数量然后这些告诉你你其实按照这个东西目标的一个效果然后我们会把这个自动给帮你搬到KBS集群里面去所以说就是你可以认为你想观众哪种资源你的ROA脚本就只是那一种资源然后的话你对它进行操作竞争数编写就可以了对其实它不是那种就是NWI就是本身或者NDX的那种ROA脚本其实我们这个ROA脚本的话主要是改Water Service的一些配置对可能跟想的不太一样你现在是碰到什么问题了吗比如说我们现在有了对现在新版本是有的应该1.4或者1.5就有了原体升级也是可以做的但是你这个Q是怎么出发的呢那可能不行但是就是其实可入子是有一个重启动作的但是如果你要用可入子的重启动作对就是因为我们是你们是想怎么重启就是你们是Q炮的还是底立的炮的其实好像也可以就是是不是我们KongSight里面有一个预设然后你可以去指定删除其实就是你想要的方式但是你如果从其他第三方的我们能够借出什么感觉这个我们好像但是这个我不知道是不是要咱下来咱们交流一下因为如果是外部的这些感觉我们要是所有的都拦截这种底立的或者是之类的我不知道会不会影响一些比方说他可能不想用这种能力的人因为我们是用外部肯定是可以拦截的但是就是你会不会扩大范围会不会扩大范围所以说其实如果是通过Kroos的这种路径去操作的话其实我们肯定是可以做到的但是如果可能不是的话可能可以下来再交流今天就Kroos就分享到这里了