使用Devtron在Kubernetes多集群上进行开发

在本文中,您将学习如何在多集群环境中使用 devtron 在 k8s 上进行应用开发。
devtron 附带用于构建、部署和管理微服务的工具。它通过提供直观的 ui 和 helm 图表支持来简化 k8s 上的部署。今天,我们将使用自定义 helm 图表运行一个示例 spring boot 应用程序。将它部署在跨多个 k8s 集群的不同命名空间中。示例应用程序连接到数据库,该数据库在 k8s 上运行并已使用 devtron helm 图表部署。
在 k8s 上安装 devtron
第一步,在 k8s 上安装 devtron。有两种安装选项:带 ci/cd 模块或不带它。本文不会构建 ci/cd 流程,但是这个模块中包含了一些重要功能。首先,添加 devtron helm 存储库:
$ helm repo add devtron https://helm.devtron.ai  
然后,执行以下 helm 命令:
$ helm install devtron devtron/devtron-operator     --create-namespace --namespace devtroncd     --set installer.modules={cicd}  
有关详细的安装说明,请参阅 devtron 文档。
https://docs.devtron.ai/getting-started/install/install-devtron-with-cicd
使用 kind 创建第二个 k8s 集群
为了在本地机器上准备多集群环境,我们将使用 kind, 通过执行以下命令来创建第二个 k8s 集群 c1 :
https://kind.sigs.k8s.io/
$ kind create cluster --name c1  
第二个集群的上下文是:kind-c1。创建 kind 集群后,它将成为默认上下文。
现在,我们的目标是将新创建的 kind 集群添加为 devtron 的托管集群。一个 devtron 实例可以管理多个 k8s 集群。当然,默认情况下,它只管理一个本地集群。在我们将 kind 集群添加到 devtron 仪表板之前,应该首先在该集群上配置权限。以下脚本将生成一个bearer token用于身份验证,以便 devtron 能够与目标集群通信:
$ curl -o https://raw.githubusercontent.com/devtron-labs/utilities/main/kubeconfig-exporter/kubernetes_export_sa.sh && bash kubernetes_export_sa.sh cd-user devtroncd https://raw.githubusercontent.com/devtron-labs/utilities/main/kubeconfig-exporter/clusterrole.yaml  
bearer token打印在该命令的输出中,复制它。
我们还必须提供目标集群的 master api 的 url。由于在 kind 上运行 k8s,我需要获取包含 kind 的 docker 容器的内部地址。为了获得它,我们需要运行以下命令:
$ docker inspect -f '{{range.networksettings.networks}}{{.ipaddress}}{{end}}' c1-control-plane  
这是我的 kind 集群的 ip 地址:
现在,我们拥有了在 devtron 仪表板中添加新托管集群所需的所有数据。为此,导航到global configuration部分。然后选择clusters and environments项并单击add cluster按钮。需要填写 kind 集群 url 和之前生成的bearer token。
如果一切正常,您应该会在托管集群列表中看到第二个集群。现在,您还需要根据下面显示的消息在 kind 上安装 devtron 代理:
创建环境
我们将定义三个环境。在 devtron 环境中分配给集群。我们将在本地集群(local)上创建一个环境,和另外两个 kind 集群 ( remote-dev, remote-devqa) 。每个环境都有一个目标命名空间。为了简化,命名空间的名称与环境名称相同。当然,您可以设置任何想要的名称。
现在,切换到clusters视图。
如您所见,现在有两个集群连接到 devtron:
我们可以看一下每个集群的详细信息。在这里,您可以看到kind-c1集群的详细视图:
添加自定义 helm 存储库
devtron 最重要的功能之一是对 helm 图表的支持。默认情况下,devtron 中有几个可用的 helm 存储库,包括bitnami或elastic,也可以添加自定义存储库。这里使用我自己的 helm 存储库,其中包含用于部署 spring boot 应用程序的图表。我已经将它放在 github 上:
https://piomin.github.io/helm-charts/
我们的图表名称是spring-boot-api-app,最新版本是0.3.2。
为了在 devtron 中添加自定义存储库,我们需要再次进入global configurations部分。然后转到chart repositories菜单项,然后单击add repository按钮。如下所示,我添加了一个新存储库piomin。
创建存储库后,您可以转到chart store部分以验证新图表是否可用。
使用 devtron 部署 spring boot 应用程序
现在,我们可以进行实践中最重要的部分:应用程序部署。我们的示例 spring boot 应用程序位于 github 上的以下存储库中:
https://github.com/piomin/sample-spring-kotlin-microservice.git
这是一个用 kotlin 编写的简单 rest 应用程序。它公开了一些用于添加和返回人员的 http 端点,并使用内存存储。这是 spring @restcontroller:
@restcontroller@requestmapping(/persons)class personcontroller(val repository: personrepository) {   val log: logger = loggerfactory.getlogger(personcontroller::class.java)   @getmapping(/{id})   fun findbyid(@pathvariable id: int): person? {      log.info(findbyid({}), id)      return repository.findbyid(id)   }   @getmapping(/age/{age})   fun findbyage(@pathvariable age: int): list {      log.info(findbyage({}), age)      return repository.findbyage(age)   }   @getmapping   fun findall(): list = repository.findall()   @postmapping   fun add(@requestbody person: person): person = repository.save(person)   @putmapping   fun update(@requestbody person: person): person = repository.update(person)   @deletemapping(/{id})   fun remove(@pathvariable id: int): boolean = repository.removebyid(id)}  
假设我们正在开发最新版本,想将其部署在 k8s 上以执行一些开发测试。第一步,将在本地构建应用程序并使用 jib maven 插件将镜像推送到容器注册表。这是所需的配置:
com.google.cloud.tools  jib-maven-plugin  3.3.0            piomin/sample-spring-kotlin-microservice              1.1                    999        
让我们使用以下命令构建镜像并将其推送到容器注册表:
$ mvn clean compile jib:build -pjib,tomcat  
除了 yaml 模板,helm 存储库还包含一个用于values.yaml 验证的 json schema 。多亏了该 schema ,我们将能够利用 devtron gui 从图表创建应用程序。让我们看看它是如何工作的。
单击自定义图表后,将被重定向到包含详细信息的页面。最新版本的图表是0.3.2. 只需单击部署按钮。
在下一页上,需要提供应用程序的配置。目标环境是存在于主集群上的local。多亏 devtron 对 helm values.schema.json 的支持,使得我们使用 gui 表单定义所有值。例如,可以增加更改镜像的值到最新的:1.1。
部署应用程序后,我们可以验证其状态:
让我们进行一些测试调用。示例 spring boot 公开了 swagger ui,因此我们可以轻松发送 http 请求。要与运行在 k8s 上的应用程序交互,应该为服务启用端口转发kubectl port-forward svc/sample-spring-boot-api 8080:8080。执行该命令后,您可以通过 http://localhost:8080/swagger-ui.html 访问地址 swagger ui:
devtron 允许我们查看 pod 日志。还可以用 grep。下面展示了与测试调用相关的日志。
将应用部署到远程集群
现在,我们将示例 spring boot 应用程序部署到远程集群。为了做到这一点,请转到与以前相同的页面,但不要选择本地环境,而是选择remote-dev,它与kind-c1集群相关联。
现在,有两个相同的应用程序在两个不同的集群上运行。我们可以对在 kind 集群上运行的应用程序和本地集群执行相同的操作,例如验证其状态或检查日志。
部署应用组
假设我们要部署连接到数据库的应用程序。我们可以使用名为chart group的 devtron 功能一步完成。使用该功能,我们可以将 spring boot 的 helm 图表和 postgres 的图表放在同一个逻辑组中。然后,我们可以将整个组部署到目标环境中。要创建图表组,请转到 chart store 菜单,然后单击create group按钮。您应该设置组的名称并选择将包含的图表。对我来说,就是bitnami/postgresql图表和我的自定义 helm 图表。
创建组后,您将在chart store主页面上看到它。现在,只需单击它即可部署应用程序。
单击带有图表组的磁贴后,您将被预测到部署页面。
单击deploy to…按钮后,devtron 会将您重定向到下一页。您可以为该组的所有成员图表设置目标项目和环境。我们会将它们从集群部署到kind-c1集群的remote-devqa命名空间中。其中的镜像,可以填写我的 docker 帐户中的:piomin/person:1.1。
默认情况下,它会尝试连接到postgres主机上的数据库。唯一需要注入应用容器的是 postgresql secret(由 bitnami helm 图表生成)中postgres用户密码。要注入该secret中的环境变量,请在自定义 spring boot 图表中使用extraenvvarssecret参数。最后,让我们通过单击deploy按钮在remove-devqa命名空间中部署 spring boot 和 postgres 。
这是本次实践中已部署应用程序的最终列表:
总结
借助 devtron,可以使用 helm 图表轻松地支持跨多个 k8s 集群部署应用程序。
devtron 简化了 k8s 的开发,可以通过图表组功能部署所有需要的应用程序。
可以使用 gui 仪表板管理和监控应用程序。
可以在仪表板中执行所有操作,而无需自己传递任何 yaml 清单或执行kubectl命令。


美国5G 频谱拍卖已超过765 亿美元,较分析师预期高出近 300 亿美元
马斯克否认与华米合作,表示智能手表和手机已是过时技术
在DAQ应用中使用非隔离DC/DC电源降压模块的优势
经纬度路灯控制器怎么接线
AMD正式出击!推出最新AI芯片挑战英伟达
使用Devtron在Kubernetes多集群上进行开发
UVM中的uvm_do宏简析
我国汽车零件出口市场迎来机遇,转型升级是行业发展重心
LSI推出无需外部存储器的多核通信处理器APP3100
河北省人民政府正式发布了关于加快推进5G网络建设发展的通知
韩国三大电池公司全年投资翻倍,突破16万亿韩元
电磁波与X光有什么不同?
基于仿真的自动驾驶可靠性估计(二)
智能化时代农机怎么样
NVIDIA出席2018中国移动全球合作伙伴大会,展出了其最新的解决方案
5G切片满足智能电网通信需求的总体技术方案
联想Z6Pro评测 外观设计显得有些保守
加速到来的未来_通过定制化软件提高工作流程
盘点全球智能网联汽车产业链全景图
谷歌宣布You Tube开启VR社交 VR前景到底如何?