Thank you, Donald.OK,好吧,我們現在開始首先感謝大家來參與我們今天的CNC AFTER WOMINUS今天我們的題目是使用孤獨簡化Cubanitis有狀態服務部署和管理先來簡單介紹我這次,我是Donald Liu,我是來自CNC AFTER開發者部道者也是今天WOMINUS的主持人下面我先讓我歡迎今天的講解,今天講解是Harrig是D2iQ解決方案架構思在我們開始之前我先介紹一些注意的一些事情就是在外面的圖中的參與者是無法交談的另外我們在sum的code下面其實有一個Q&A這個框架大家要是有問題可以把題目寫到裡面這樣子在WOMINUS後面的時間的我們會有一個答案的那個環節那個時間的Harrig會把你把問題進來來回答還有講解的另外的就是今天的WOMINUS完成之後的我們會提供視頻還有材料日本的材料會在CNC AFTER WOMINUS的網站另外我們也會在CNC AFTER WOMINUS的微信裡面來提供這裡的CNC AFTER WOMINUS還有資料的好,現在讓我們歡迎今天的講解Harrig來開始今天的那個演講Harrig實現交給你了哦,好的大家能看到這個屏幕嗎首先感謝大家今天來參加我的這個Webinar然後因為今天工作日嘛大家也很忙然後我的話今天的話會介紹一下KUDOKUDO的話它是我們開源的一個針對Operator的幫助大家更好的去開發運位Operator的一個框架然後現在的話也已經是CNC AFTER WOMINUS在幅畫中的一個項目然後Operator的話大家知道的話它應該是幫助用戶去更好的運位管理有狀態應用的一套工具吧然後最早的話是CoreST提出來的它的話會把一些運位管理的工作去大家能看到我的屏幕嗎看到啊我看到哦好的好的然後它哎我看到有一個人好然後它的話它會把一些運位管理的邏輯通過代碼的方式自動化下來然後把這些邏輯寫到Operator裡面然後我們知道的話Operator的話它本身的話開發的話會要求開發者對K8開發者對呃所要運位管理的有狀態應用本身都要有比較深的了解然後它的話如果我們要寫一個Operator的話可能會寫大概上千行至少要上千行的呃go long的代碼然後不同的Operator之間其實現在也有比較多的一個呃重複的重複性比如我們寫一個呃我們寫mysolo或者寫mongol的一個Operator它都會有很多這種像是ListWatchK8的API server然後像是去監聽它的各種eventer的部分然後這個部分的話其實是呃不同的Operator之間都是比較類似的然後如果直接我們寫一個原生的Operator的話也沒有一些呃工具去更好的把它和CNCF的生態結合起來然後開發完之後的話維護的成本的話也是比較高的然後對於Operator的用戶而言的話我們知道在K8裡面管理一個有狀態的應用其實是比較還是比較呃比較一個有挑戰性的一個事情因為的話有狀態應用的話它不光只是不是像無狀態應用一樣它比如說節點掛了就可以去呃節點掛了就可以去自動的在一個新的新的節點上去拉起來然後它的話會有一些捲PVPVC然後在有狀態應用的話它比如某一個比如我們想做一些擴縮的那種想做一些升級都是比較呃都是一個比較複雜的操作和像這HitowerHitower它也說了對於很多人而言的話呃在K8裡面去做一個有狀態的應用的一個管理的話都是都是成本比較高的一個事情然後如果我們在K8集訓裡面部署多套operator它的話也會造成像是呃會會造成APS2和SAD的壓力因為我每個operator都會有自己的control然後這些control的話都會去監聽K8的一些消息都會去監聽它的一些變化從而對APS2和SAD造成壓力所以的話我們就提出了一個骷髏它的話是一個呃專門針對於複雜的有狀態應用的operator管的一個開發管理的一個工具然後它既能增加生產對開發者也能增加生產者的能增加開發者的生產效率然後對於運位管理operator的人而言的也能提高提高運位管理的效率降低一個成本然後為什麼要使用骷髏骷髏我們知道的話呃前面說了本身的話去開發構建一個operator是比較難的一個事情然後維護的話也需要就是呃運位管理的人去不斷的根據根據K8最新社區的一些眼鏡他們要也要去不斷的去跟進比如像是呃我們知道K8它本身的APS類的也會是不斷的更新了像是VER法會升級到比如V2 V2 beta這種然後我們我們骷髏的目標咱們骷髏的目標就是盡量去簡化同時會簡化開發還有運位的一個成本骷髏的話他提供了一個抽象的一個生命週期管理的流程我們叫做一個Plan然後呃他也提供了提供了一些能夠附用的模板然後提供了一個統一管理的一個呃控制器這樣的話用戶就不用針對不同的operator去寫去寫不同的不同的用戶就不用針對不同的有狀態應用去寫不同的operator還是可以附用骷髏的一個control了然後從而的話他用統一的模板的話也能簡化用戶管理不同呃有狀態應用的一個管理成本然後他也提供了像是test driven的test driven design的一些測試的工具然後能幫用戶呃更好地去做一個day to the operation然後我們這裡這裡的話骷髏他本身的安裝的話是可以通過插電話的安裝形式直接在骷髏cdr上通過一個呃骷髏cdr crew install的方式然後用戶就可以通過骷髏cdr骷髏這個簡單的命令去做一些部署調適管理呃operator的工作然後對於呃對於集群裡面不同的operator演化我們提供了相對呃提供了一整套就是可以附用的API然後和工作流然後降低這個降低這個降低這個管理的一個成本然後所有的這些有狀態的work load都是以crd的形式定義然後對於呃現在市面上就已經有很多不同類型的operator了嘛然後這些不同的operator的話也可以通過骷髏管理起來只要呃使用者去只要使用者了解怎麼去部署crd怎麼去部署customer resource definition然後了解那些已經有的operator的一些機制就可以把他集成進來到骷髏裡面然後我們也在考慮就是之後的話會呃推進像是骷髏的一個呃像是會推進operator的一個指標就監控高警還有安全的策略組像是RBC的這些功能然後這裡是一個呃ES也就是elastic search的一個骷髏的YAML我們可以看到他這裡定義了一個planplan的話就是說我我我定義了一個呃operator的一個計劃嘛然後這個plan的話他可以是最基本的就是deploydeploy就是部署就我就希望怎麼去部署一整套的一個有狀態應用然後我可以在strategy裡面定義他是串形的因為我們知道elastic的話elastic search的話他會有呃幾種不同的節點類型啊比如是有mass的節點然後會有data節點data節點就用來存儲數據mass的節點的話用來選舉然後管理一整個ES的機群然後還會有coordinator節點這些的話是給呃client的用的然後我們部署的時候如果定義成series的話他就會去串形的部署接下來的是幾種他就會先部署mass的然後再部署data node然後再部署coordinator node然後具體在每一個部署環節我們又可以重新定義一個strategy比如我們定我們部署 mass es的mass的節點的時候就會可以希望他是並行的部署三個mass的然後包括部署data節點的時候我們也可以這樣子定義然後呃data節點我們可以就默認的話他會是串形的series然後對於每每一個每一個plan而言他又可以細分為face就是他某個階段然後在下面是一個staffstaff就像剛才說的呃deploy mass的deploy data其實就是一個步驟步驟就叫做staff然後具體在往下的話還有更細分的任務叫做tasktask的話呃他的話就會去呃這這理因為屏幕有限他task其實他會定義一下就是比如去部署一個data節點那我們肯定就會需要一些先部署config a matter然後呃pvpvc等等然後再去部署實際的staff set然後以卡福卡為例的話我們也能看我們可以介紹一下就骷髏了一個呃生命週期的一個編排我們知道卡福卡的話他其實的話會呃是由若干個broker組成的然後broker的話又會依據依賴一個呃sukipper然後我們在我們在一個牙膜裡的話可以去定義卡福卡卡福卡的這個集群他是怎麼組成的然後而且而且我們骷髏的話他他因為提供插件化的一個組成形式就我們安裝在安裝的卡福卡的一個operator之後我們能夠哭的他自身的一個命令行李也可以提供一個卡福卡的插件所以的話就可以去實現像是卡福卡托比可的一個增傷查的一個功能像是這裡我們能看到比如我們安裝完等下可以等下可以demo讓大家看一下就是我們安裝完一個卡福卡的插件之後安裝完一個卡福卡的operator之後我們就可以通過命令行去實現一些托比的套作然後像是托比的 add就可以去做一個這個托比的增加增加的工作然後說我們的話不光會把呃operator這一整套通過crd的定義像是呃有狀態應用自身的一些呃topoloch比如像是卡福卡的topic或者像myself的表也可以通過crd的行程定義這樣的話就能簡化就是用戶的一些操作用戶就不太需要說一定要通過像是cuba city有exec進入到容器裡面然後再去做一些像是連接myself或者是呃連接卡福卡然後查詢topic的一些工作骷髏本身的架構其實是比較簡單的就我們前面說的骷髏他自己的話可以通過呃骷髏city而插件的形式直接安裝然後當然我們也可以直接使用骷髏的二鏡子工具然後我們執行骷髏inlite這一種操作之後他就會在k8期訊裡面做一個粗製化的工作去生成骷髏的一個控制器然後也會生成呃骷髏所需要的cd然後他的cd的話大致上的能分為四種嘛我們等一下會介紹一下像是oprater定義了一整個oprater的一個解構然後oprater的話又能有不同的版本因為像是這裡的話能看到有卡福卡0.1卡福卡0.2然後具體的這個instance才是下面實際部署有狀態應用的一個呃實力的一個部版我們的在instance裡面的話會會去可以自己定義一些參數像是呃需要有多少個broker需要多大的cpu memory等等的一些參數然後會根據咱們instance的這個牙膜去生成實際的一個呃有狀態應用的一個stead of set等等然後對於開發者而言的話其實呃我們現在github上也有一個專門放放oprater的一個呃ripple嘛就叫做oprater然後開發者現在已經有了像mysoto卡福卡sulkeepercosandra等等開發者的話可以就參照已經有了這個已經有了這些的模板然後去寫自己的定義自己的一些牙膜像是oprater的牙膜parameterparameters牙膜和模板這個template的下面可能有這種呃configure map是什么样的然后stead of set是什么样的等等然后我們目前的社區的話是通過呃cuban kubernetes enhancement proposal的一個模式去去管理的然后我們會盡量的去呃就是簡化就是開發者去參與這個項目的難度然後目前的話有有大概3github上有300多個星星然後還在增加嘛然後有有7個contributor然後有6名是全職工作的然後大家知道其實呃已經有一些oprater相關的開就是幫助大家更好的開發管理oprater的一些像是包括sdk包括framework等等然后我们会比较一下cudo和这些呃遺有的sdk或者狂价比他有什么样的有缺点呃我们知道就是oprater的话有一个叫做oprater sdk或者他的话帮助可以帮助用户去更好的也能帮助用户更好的去開发一整套oprater然后咱们cudo和他相比的区别就在于的话oprater sdk其实是提供了一套sdk本质上的话还是呃希望用户去用go long写一套oprater而我们cudo的呃目标就是通过尽量减少用户写这个代码的工作量就能yaml解决的就尽量用户就直接去定义yaml就能生成一个oprater而不是说需要用户一定的呃通过写代码的形式去实现实现一个oprater然后还有一个meta control的meta control的话和oprater的话呃比较相似meta control的话他但他的话其实更关注在怎么去实现一个control的方面和我们cudo的话测重点的话呃测重点的话是去帮助用户更好地去开发维护一个oprater然后呃cudo的话我们支持的话像支持这种呃可以把依赖还有oprater的一些依赖的解决方案整体打包在一起而meta control的话会呃强制规定运户必须要把要把那些oprater的那些依赖全都生成在一个table里面然后我们cudo的话可以去定义一个定义有状态应用的一个生命周期像前面说的那个plan plan的话不光是有 deploy 还有这种可以定义back up restore等等的一些plan然后还呃现在k8最就事实上的一个编排标准的话是一个hum然后和hum相比的话呃hum他其实更关注在如何实现deploy 这个步骤但是我们cudo的话呃对于oprater而言 deploy 部署只是一部分我们的话还会对于有状态应用而言不光只是把部署起来的一个操作我们还会有这种像是如何对有状态应用进行升级进行这种扩扩容进行备份和恢复等等然后有状态应用的话他他的这些操作其实不是那么简单的就有的时候比如我们想呃升级一下my settle可能他不是一个简单的升级操作而是需要先把他back up 然后呃上传到比如s3的存储然后再去做一个每个节点的盘本升级这一部分的话这种操作的话hum的话本身就呃实现不了因为他的话只是关注在如何去deploy对于呃社区而言的话现在骷髏自身带已经提供了一些就是呃可以作为母版参考的opera这里面包括sulkeeper 卡布卡my circle elastic然后我们也会有更多就是更多的一些有状态应用组建的一个opera的继承的开发骷髏本身的他他是依赖于呃两个已经开源的一个呃工具版包括骷髏builder还有controller runtime对于用户而言的话可以去通过拓展hum的hum chart 的形式把把这个呃所需要的这些应用集成到骷髏里面然后骷髏的话他不光是解决一个应用应用的一个整体定义的问题我们还会关注他的一个生命周期管理还有他的一个呃day 2 的一个运萎管理骷髏的话呃然后我们接下来的话这这是骷髏的一个roll map现在的话我们接下来会给大家就演示一下就如何使用骷髏去去去生成一个最简单的一个呃去生成一个像是属计划和卡发的一个operator我可能需要切换一下屏幕大家能看到我的这个terminal吗可以然后现在呃一位时间有限我们就不做那个最开始的粗纸化的操作大家能看到就是呃在骷髏System下面就已经有一个骷髏ControllerControllerManage在运行了然后这个的话其实是通过骷髏Unit我们就会做一个粗纸化的操作然后他的话会在集群里面去生成生成包括这个骷髏的控制器还有一些基本需要的CRD等等的一个呃粗粗化的工作大家可以看到这里面我们定义了大概定义了三个三个呃定义了三个CRD他的话就是前面说的operatoroperator version还有instance然后现在现在集群里面是还没有一些有状态应用的我们可以通过呃我们可以通过安装的形式骷髏Install的形式比如我们可以先安装一下sulkeeper然后现在sulkeeper已经部署起来了前面说过的instance的话就是我们呃operator的一个具体的实力这里的话他是一个sulkeeper的instance这里大家能看到他指定了我们生成一个0.2版本的sulkeeper然后呃其实然后没有定义parameter所以用的就是默认的那些参数去生成这个sulkeeper然后我们能看到呃plan plan的话就是他的一个整个operator去生成的时候的一个计划可以看到现在这个deploy的话在impro in progress的过程说明他呃说明他这个还没有完成吗因为他这个几个实力都还没有ready我们再去看一下他现在已经running起来了三个节点已经running起来了所以我们看到呃deploy这部已经是complete的状态然后然后他还sulkeeper启动之后还会有一些像是呃validation这种出售化的操作所以能看到这部face这部他还是在一个运行中的一个状态好了他现在应该sulkeeper的这个部署已经全部完成了然后我们可以再试一下呃部署一个卡不卡现在的话就不光有sulkeeper的instance还有一个卡不卡的instance卡不卡的话他会去启动的时候broker会去尝试呃连接其他broker吧所以现在还只有一个现在还只有一个broker所以他可能要重启一下因为他连接不到别的几个broker呃大家能看到就是他现在部署这一部就还在运行当中improgress啊这个就呃因为刚才在我们这个presentation之前已经部署过一别sulkeeper的卡不卡然后因为我们知道pvpvc他是在他是有有存储的嘛然后呃之前存储过一些数据然后导致这个新的新的这个集群的话他可能又生成了一个新的id就和原来存储的数据不一致然后就大家能看到pvpvc对于呃对于有对于有状态音耳眼的话存储也是很重要的一个部分嘛我们试着把把之前有的这些pv删除一下然后再试一遍如果不行我们可能直接就跳过这个这个demo了然后这可能要点时间然后现在大家有没有一些问题有没有办法包括cool啊包括operator啊都可以哎谢谢呃哈里的那个演讲还有甚至还在进行的那个demo所以现在我们也可以同一时间也会就是进到那个大问环节如果大家有问题可以在那个屏幕里的底部的那个回答框架里面来提交那么这边啊还有他会在时间涌水的情况以下来来来回答的啊有有同学提问就是cool的开发一个新的operator流程是什么样的然后我这里给大家看一下就是呃大家能看到我的屏幕吗可以可以看到就其实cool的开发的话主要还是围绕yamo来进行的然后因为我们的目标就是尽量把这些所有operator的一个呃因为开发的工作都通过yamo去解决然后大家能看到就是我们卡夫哈一卡夫哈为例嘛他的话啊呃又会需要用户去定义几个若干个yamo嘛然后他的一个operator的一个项目的结构大概就是这样子就是有包括呃operator然后里面会定义这个operator要运行哪些task像前面说的然后他有什么样的呃plan就他的那个部署部署预布的这些步骤是怎么样的然后定义好了之后然后他要依赖于哪些资源资源的话就包括呃stable set然后包括呃service account的这些等等然后会定义在这个模板里面其实跟有一点类似于home的那种然后这些yamo里面的话大部分的话是已经写好了一些操作嘛像是呃卡夫哈的话他会有他这里面他包括了一个出主化的一个脚本然后他stable set结构大概是这样子的然后这有一些花枯奥扩起来的内容的话会在之后生成实际的一个opera实力的时候会被替换成所需要的参数就大家能看到然后这个呃也能定义一些比较简单的逻辑像是f啊按的这种就是他就用来在比如我定义了一个这种十九画的圈的时候会用一个volume没有定义的话就会跳过嘛类似于这样所以主要的话开发流程还是伟到一个yamo来进行的感谢winston的一个提问那herry我们qna里面有另外一条就是来自周先生的一个问题啊你可以看看哦好了还是我这边我去把那个问题就是讲出来比较方便啊呃你你你能讲一下我打不开qna对对了解了解 ok啊提到的问题就是能不能就是把cudo跟那个cube builders提供一个比较常识一点的那个比较就是还有另外的就是cudo是怎么样跟就怎么怎么在那个cube builders以向来构建哦这个的话我们可以看一下呃因为其实就cube builder他的话应该是还是我们通过一个代码的形式吧他的话是提供了一套呃提供了一套就是代码的宝马然后我们利用他的package的方式去也能直接实现一个呃operator的形式嘛然后但是对于我们cudo而言的话他就是想尽量减化用户写代码的一个工作就用户可能不需要你说他是go long的expert然后只是会写yamo的话他也能实现一些简单的operator然后如果用户有一些复杂的一些特别复杂的逻辑的话他其实的话我们的话呃也能通过就是结合代码的方式去生成一个operator我不知道有没有回答这位用户的问题啊然后现在就是刚才卡夫哈的那个呃卡夫哈的实力也已经跑起来了然后其实还有一些小事备份啊呃回复啊这些操作到时间有限我们可能就不在这里做了呃史迪文说就是能把cudo看成一个类似于hum形式的operator builder呃其实这个是的确的确是像这样子的因为我们本身cudo的话会大量使用母版和这种压谋包括一些运为的操作像是扩缩了啊备份恢复这些也是通过压谋也是会尽量通过压谋的形式就和hum比较相似了一点然后我们cudo的话有在k8的slack下面的话他也有一个channel然后欢迎大家就加入到这个slack里面然后这是我们github上的地址两个地址一个是cudo本身的项目然后还有一个呃operator一个项目的地址呃的确是这样能能把hum里面的chart转换成一个cudo的operator提供tool是啊转换的工具是吧这个可能我要跟社区区问一下我觉得是一个比较好的一个建议大家要是有问题啊可以在q&a里面来做提问另外的要是有一些比较互动动态一些的那个反馈也可以在chart里面来给那个反馈的所以有问题可以在q&a里面来提出来啊sponsor就是是我们公司d2iq好呃要是没有别的问题那么啊谢谢啊harry另外的啊今天的那个webinar的录像还有材料会在晚一些的时间会上线另外也期待下一次中国市区的那个cncf eminence也希望大家参自今天参加今天的webinar的可以获得大家希望的那个现实还有内容谢谢大家的参与hey kimare we are ready to stop the recordingfans