开发者学堂课程【云原生应用插件开源贡献课程 :如何在 velaux 页面部署 wordpress helm 应用(二)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1211/detail/18195
如何在 velaux 页面部署 wordpress helm 应用
三、官方 addon 的自定义拓扑图完善
在我们自己写 application 的时候,这里面可能会有多个,但是对于我们一般来说,对于我们的一些基础的应用,如果在你没有配置任何步骤的时候,它会默认部署到一个你配置的环境里,因为这里我们可以在这个环境我们刚刚配置的 default 环境里面看到它底下的一些资源。比如这是一个 helm 类型的应用,我们其实可以在这里看到它底下的一些应用资源有哪些可以看到它这里会有两个类型的资源,首先是一个 Helmrelease ,然后是一个 helmrepository。实际上在我们定义 helm 类型插件的时候,它底层如果是选择了 helm 类型的一个组件,他首先会去把你 helm report 给获取,再通过 helm release 这样资源类型去把里面的 chart 实际的拉取。同时我们其实在这里可以看到应用的一个资源拓扑,其实这里就是比较清晰的状态。首先我们这里第一层级就是我们的 application,可以看到它这里的名字就是 wordpress。我们刚刚选定的第二层级是一个集群的层级,我们目前是部署到 local 的一个集群。再后面就是当前这个组件,它底下所对应的一级资源。在这里也是我们刚已经聊过的 helmrelease 以及 helmrepository,在后面它实际会对应哪些资源?可以看到它这里资源非常多,比如 deployments, stable set, common map 等。包括 deployment 后面对应的一级就是 rapid card set 后面就是二级的 pod。
实际上这样一些组件的关联关系,大部分在通用的情况下,我们是内置好的,我们有一个内置的维持这些资源的表格。所以当我们部署一个 helm 应用的时候,我们可以直接通过这样一个自定内置的规则去看到它比较详尽的资源拓扑图。但是如果这样一个 helm release 里面它去部署了一个 CRD, CRD 底层的资源我们这里就没有办法显示。但是我们也可以通过一个自定义资源拓扑的方式去直接看到 CRD 底层的一个资源。通过这种扩展方式,我们就可以在我们进行 addon 定义的时候,去把里面的资源拓扑定义的更加清晰。我们等会演示自定义拓扑的效果。
我们首先看到当前应用已经部署成功,我们可以在这里直接通过访问地址去访问应用。可以看到这就是一个标准的 wordpress 的一个页面,我们当前应用已经部署成功。当然同时我们也可以在这里通过日志来直接查看到应用的一些日志。这些比如刚像刚刚演示的v elaux,包括 flux CD 都是官方目前比较成熟的一些插件,这些成熟的插件我们就会放在官方的库中。当然如果同学们通过训练营想去我们的官方提取插件的时候,我们会先将插件添加到适用仓库。所以我们目前适用仓库里面的插件目前暂时来说没有那么完善,我们可以来添加一个适用仓库。我们可以看到目前加了experimental 的这样一个仓库,它的地址也是在 expert experimental 的一个目录之下。
我们在这里去启动一个 kcruise 的插件。在这里我们可以看到 kcruise 的插件的依赖是 flux CD,刚刚也说 flux CD 是 Vela 里面使用 helm 部署的一个基础。然后在有了这样一个基础后,我们想做插件的安装的时候,比如像 cruise 或者其他比较常用的一些 operator,它基本上都会提供一个 helm chart,我们就可以直接通过 chart 的一个方式去将这些应用给这些资源给拉取。所以在如果你的插件里面的一些资源,它会需要依赖 tom 的能力,你也需要在依赖项里面加上 flux CD。我们稍等一会,等待 addon 运行完成。目前它还在执行的状态。
他现在已经运行完成。我们这时候再来新增应用查看。我们可以来建 cloneset 的应用。 cloneset 就是 clues 里的成分,我们可以在这里将这个组件类型选为 cloneset。
我们现在已经将 kubevela 的应用进行了部署,这时候我们也来查看资源拓扑,可以看到应用非常的简单。首先它第一层级还是我们的 cloneset application,之后是集群,后面是 cloneset 的这样一个 CR,但是实际上我们 cloneset它底下会再关联一个 pod,但是因为它是一个 custom result,所以我们在这里默认情况下并没有去展示。这个时候我们就可以通过自定义资源拓扑的这样一种方式来给这样一个我们 addon 里的资源去给他进行资源拓扑的连接。
目前就是我们 addon 的一个官方仓库。可以看到首先 kcruise 的搭档它是放在 experimental and addon 目录之下。我们也可以看到这里其实是分为多级。首先我们每一个 addon 它都会有一个 nata data 的这样一个 yaml。
对于 kcruise 插件来说,这里面有几个常用的一些参数,比如首先是它的 name,然后是插件的一个版本,插件的一个描述,以及它实际上对应的一些 URL。我们还可以在这里加一些 icon,这些字段在我们的文档里面都有完全的介绍,可以看到这是我们插件的一个基本描述信息,也是刚刚提到 Meta data.yaml 。这里面会有刚刚提到过的一些参数,包括 deploy two。如果我们只希望插件里面的资源去部署到我们的管控集群,这里 runtime cluster 就可以设为false。
同时这里写一些依赖项,比如我们刚刚的 kcruise 的这样一个插件,它这里的依赖项就会是一个 flux CD 的 addon。同时这里会有一些系统的参数,比如如果你对插件的一些版本要求,比如你这个插件它的 Kubernetes 版本必须大于一点 1. 19 等。
除了源数据之外,这里还会有一个 read me,这也是比较常见的。这也是我们刚刚在 velaux 页面上可以看到。我们会把 read me 的介绍直接渲染出来,就是一个 template.yaml。因为实际上我们的 addon 最终都会渲染成一个application部署到集群中。我们目前其实是支持两种方式去编写你的addon。第一种是 yaml 的形式,就是 kcruise 里面的一种形式。对于 yaml 的这样一个形式,就等于是去把最终渲染出来的 addon的一个 application 给编写出,这样在 addon 启动的时候会直接将 application 部署到集群中。但是如果你希望你的插件启动的时候需要更多的一些参数抽象,比如像我们刚刚启动 velaux 的时候,我们直接通过 service type 等于 nodeport 去修改里面的一些默认参数。如果你希望以这样一种方式去更加高度可定制化你的插件,你可以使用 q 的一种方式去定义你的插件。当然用 q 的方式会稍微比 yaml 这样一种形式稍微复杂。 q 的方式我明天会详细讲解。
今天我们主要来了解一下。以 yaml 的方式去部署我们的一个 addon,可以看到一个 application 里面,它后面这一段是新添加的,所以它最开始的这样一个版本,它其实是十分简单的,它只有一个 component,直接去部署你的kcruise,这样一个 helm chart 。同时我们还会有一个 definition 文件夹,这个文件夹里面定义的其实在你开启 addon 的时候,你内置了哪一些 definition?在你开启 addon之后,这些 definition 就会直接被部署到集群当中。比如这里我们定义了一个 cloneset,它实际上会去部署一个 kcruise 的 cloneset,这也是所以我们刚才可以在页面上直接使用 cloneset 的这样一个 component definition。
在构建完这些 definition 后,如果这些 definition 里面实际上会去部署一个CRD,最好还是将可以将我们的资源拓扑的关系直接写入到你的 addon 里,这样才可以使你的 addon 更加正规,并且更加有保障。
我们可以在这里看到我这里直接加了一个 resource relation 的这样一个组件,这是我新修改的一个部分。我可以在下面加这样一个组件,它的类型去选用 K8S objects。这样组件就会直接将我在这里需要的资源会直接部署到集群当中。在这里我声明了一个 config map。对于我们的 CRD 来说,它的资源拓扑关系我们的目前的一些规范是我们会去从集群里面去读取带有 rules. Oam.dev/resource = true 的这样一个 config map。我们会在里面去定义的一些资源的关系去集成到我们的资源拓扑中。所以可以看到我在这里直接将这样一个 config map 去进行了添加到我们组件中。它这里面的rules,它首先第一层级是 parent resource rule type。在这里我们指定的是 kcruise 的一个 cloneset。在我们针对每一个父类型的资源都可以为它添加多种子类型的一个资源的关系。比如在这里它使用的直接是 children resource,这里指向的是 pod。当我们把这样一个 country map apply 到集群当中的时候,我们应该就可以在页面上刷新,直接看到它,我们已经自定义完成过后的一个资源拓扑。在这里因为我目前是使用一个本地开发,所以我需要先将我刚刚的进行导出。这个可以直接看我们的文档,我们文档写的都是非常详细的。比如你是在远端服务器上面去部署的这样一个 vela,你也可以直接将这样 kubeconfig 去进行导出,从而在本地进行使用,可以直接写入,我们这样就可以直接在本地访问到集群。
在这里因为刚刚也说我们可以 addon enable可以从两个来源,首先第一个是远端的 OSS 仓库,第二个就是本地的一个文件系统,在这里我们使用使用本地的这样一个文件。我在这里 upgrade 我们这样 kcruise 的 addon,我刚修改完成的。我们现在本地的一个 addon 已经完成升级。
这个时候我们可以看页面上的一个效果。我们来刷新资源拓扑。可以看到我们现在这cloneset的资源后面已经标注pod。这就是我们刚刚所创建的自定义的资源 top 的关系所带来的一个结果。
在我们的目前所有的一些 addon 里面,我们还是有相当一部分是缺少这样一个自定义的资源拓扑。比如有一个 model training 的 addon,这个 addon 它实际上底层会使用 cool flow 的一些 CRD,比如 TF job。因为 addon 是用来做模型训练的,如果你模型所使用的这样一个类型是Tensorflow,它会去启动一个 TF job。这个 TF job 底层也是会去关联一个 pod。但是由于它是一个自定义的资源,一个CRD,所以我们目前在这个集群上面可能是看不到它的一个效果的。这是用 model training,在部署的过程中,我们也可以直接看到这样一个资源拓扑,可以看到它第一层application,第二层是集群,后面直接对应一个 TF job,但 TF job 本身后面应该对应一个 pod,但是目前我们在这上面是看不到的。
我们当前今天直播它的任务其实就是向社区去学会使用 velaux 上传资源拓扑图。观众可以从直接使用这样一个 model train 的例子去给我们的 model training 去加上一个资源拓扑,来看到它的实际的一个过程,也可以在插件列表里面去选取其他的一些插件,去给他加上资源拓扑的一些能力。因为这次训练营也是希望大家能够对开源的进行一个更深层次的了解,也能够直接去向开源社区去提 PR。所以我也会简单的介绍我们的一个 kubevela 的仓库的一些贡献指南。可以看到我们这里会有一些贡献的指南。这里会是一些 code contribution 的一些 guide。大家比较关心的可能是我们这里会有一些 formatting 的 guidelines。当你在提交完你的代码时,你需要对你的 commit message 需要进行一定的规范。比如这里去这是一个 feature 或是一个 fix,又或者是一个 Docs 等。大家都可以直接在这里面进行查看。
以我当前这样新增的例子解释,目前我修改的是 template。在这里我可以直接去进行提交。首先在提交的时候,我们需要用-s, sign off 去验证 verify 这次的 commit,在这里看到目前的一个 commit 信息符合社区规范的。完成之后,我们就可以直接去推送到自己的仓库里。接着我们就可以直接向我们的 kubevela catalog 这样一个仓库去提交你的 PR。在这里我们可以看到有一些 TPR 的规范,比如在这里需要填写一下你当前修改的一些描述以及你这些代码是如何被测试的等。在我们的插件的一个领域里,这里是有一个比较详细的如应该如何贡献 addon 的一个指导的。比如我们目前最基本的规范,比如最新的一个插件应该默认提交到试验的一个仓库,只有当它完成一些大量的测试验证之后,我们才能够将它晋升为一个正式阶段的插件。
我今天的这样一个介绍大概就是这样。我们目前当今天的这样任务其实也比较简单,你只需要准备一台机器,或者直接在你的本地环境里面,首先去进行 kubevela的安装,安装完成之后去启动 velaux,最后再在插件列表里面去选择一款你喜欢的插件,或者是直接使用刚刚这样 model training, 为 training 的这样一个插件。它的里面它的代码里进行一些自定义拓扑的新增。完成之后可以将你实现的结果,比如如果是 model training 这样一个 application,在这样一个资源拓扑里面,当你添加完你的自定义规则之后,这里后面应该会出现一个 pod,这个页面好像未显示。
在这里之后应该会出现一个 pod。我们的这样一个 model training 的例子,它实际上也是在 addon目录之下,可以看到它这里也是直接使用 helm 去进行一个安装。如果想要完成这样一个步骤,我们也可以在后面去用我刚刚的方式去添加一个 K8S object,直接将我们的资源拓扑的一个规则的 config map 去进行一个部署。
今天的内容大概这些,如果大家没有问题,就先结束今天的直播,后续在完成任务的过程当中,有任何问题也可以直接在群里面提问,我会进行解答。