0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

马哥Linux运维 来源:piotrminkowski.com 作者:piotrminkowski.com 2022-11-17 09:50 次阅读

在本文中,您将学习如何在多集群环境中使用 Devtron 在 K8S 上进行应用开发。

Devtron 附带用于构建、部署和管理微服务的工具。它通过提供直观的 UI 和 Helm 图表支持来简化 K8S 上的部署。今天,我们将使用自定义 Helm 图表运行一个示例 Spring Boot 应用程序。将它部署在跨多个 K8S 集群的不同命名空间中。示例应用程序连接到数据库,该数据库在 K8S 上运行并已使用 Devtron Helm 图表部署。

在 K8S 上安装 Devtron

第一步,在 K8S 上安装 Devtron。有两种安装选项:带 CI/CD 模块或不带它。本文不会构建 CI/CD 流程,但是这个模块中包含了一些重要功能。首先,添加 Devtron Helm 存储库:

$helmrepoadddevtronhttps://helm.devtron.ai

然后,执行以下 Helm 命令:

$helminstalldevtrondevtron/devtron-operator
--create-namespace--namespacedevtroncd
--setinstaller.modules={cicd}

有关详细的安装说明,请参阅 Devtron 文档。

https://docs.devtron.ai/getting-started/install/install-devtron-with-cicd

使用 Kind 创建第二个 K8S 集群

为了在本地机器上准备多集群环境,我们将使用 Kind, 通过执行以下命令来创建第二个 K8S 集群 c1 :

https://kind.sigs.k8s.io/

$kindcreatecluster--namec1

第二个集群的上下文是:kind-c1。创建 Kind 集群后,它将成为默认上下文。

bd85cfea-65b7-11ed-8abf-dac502259ad0.png

现在,我们的目标是将新创建的 Kind 集群添加为 Devtron 的托管集群。一个 Devtron 实例可以管理多个 K8S 集群。当然,默认情况下,它只管理一个本地集群。在我们将 Kind 集群添加到 Devtron 仪表板之前,应该首先在该集群上配置权限。以下脚本将生成一个bearer token用于身份验证,以便 Devtron 能够与目标集群通信

$curl-Ohttps://raw.githubusercontent.com/devtron-labs/utilities/main/kubeconfig-exporter/kubernetes_export_sa.sh&&bashkubernetes_export_sa.shcd-userdevtroncdhttps://raw.githubusercontent.com/devtron-labs/utilities/main/kubeconfig-exporter/clusterrole.yaml

bearer token打印在该命令的输出中,复制它。

bdb186f8-65b7-11ed-8abf-dac502259ad0.png

我们还必须提供目标集群的 master API 的 URL。由于在 Kind 上运行 K8S,我需要获取包含 Kind 的 Docker 容器的内部地址。为了获得它,我们需要运行以下命令:

$dockerinspect-f'{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'c1-control-plane

这是我的 Kind 集群的 IP 地址:

bdd41f7e-65b7-11ed-8abf-dac502259ad0.png

现在,我们拥有了在 Devtron 仪表板中添加新托管集群所需的所有数据。为此,导航到Global Configuration部分。然后选择Clusters and Environments项并单击Add cluster按钮。需要填写 Kind 集群 URL 和之前生成的bearer token。

be008ef6-65b7-11ed-8abf-dac502259ad0.png

如果一切正常,您应该会在托管集群列表中看到第二个集群。现在,您还需要根据下面显示的消息在 Kind 上安装 Devtron 代理:

be38c1fe-65b7-11ed-8abf-dac502259ad0.png

创建环境

我们将定义三个环境。在 Devtron 环境中分配给集群。我们将在本地集群(local)上创建一个环境,和另外两个 Kind 集群 ( remote-dev, remote-devqa) 。每个环境都有一个目标命名空间。为了简化,命名空间的名称与环境名称相同。当然,您可以设置任何想要的名称。

be57dff8-65b7-11ed-8abf-dac502259ad0.png

现在,切换到Clusters视图。

be817444-65b7-11ed-8abf-dac502259ad0.png

如您所见,现在有两个集群连接到 Devtron:

beafd3ac-65b7-11ed-8abf-dac502259ad0.png

我们可以看一下每个集群的详细信息。在这里,您可以看到kind-c1集群的详细视图:

bed9470a-65b7-11ed-8abf-dac502259ad0.png

添加自定义 Helm 存储库

Devtron 最重要的功能之一是对 Helm 图表的支持。默认情况下,Devtron 中有几个可用的 Helm 存储库,包括bitnami或elastic,也可以添加自定义存储库。这里使用我自己的 Helm 存储库,其中包含用于部署 Spring Boot 应用程序的图表。我已经将它放在 GitHub 上:

https://piomin.github.io/helm-charts/

我们的图表名称是spring-boot-api-app,最新版本是0.3.2。

bf18e590-65b7-11ed-8abf-dac502259ad0.png

为了在 Devtron 中添加自定义存储库,我们需要再次进入Global Configurations部分。然后转到Chart repositories菜单项,然后单击Add repository按钮。如下所示,我添加了一个新存储库piomin。

bf3d916a-65b7-11ed-8abf-dac502259ad0.png

创建存储库后,您可以转到Chart Store部分以验证新图表是否可用。

bf57d8c2-65b7-11ed-8abf-dac502259ad0.png

使用 Devtron 部署 Spring Boot 应用程序

现在,我们可以进行实践中最重要的部分:应用程序部署。我们的示例 Spring Boot 应用程序位于 GitHub 上的以下存储库中:

https://github.com/piomin/sample-spring-kotlin-microservice.git

这是一个用 Kotlin 编写的简单 REST 应用程序。它公开了一些用于添加和返回人员的 HTTP 端点,并使用内存存储。这是 Spring @RestController:

@RestController
@RequestMapping("/persons")
classPersonController(valrepository:PersonRepository){

vallog:Logger=LoggerFactory.getLogger(PersonController::class.java)

@GetMapping("/{id}")
funfindById(@PathVariableid:Int):Person?{
log.info("findById({})",id)
returnrepository.findById(id)
}

@GetMapping("/age/{age}")
funfindByAge(@PathVariableage:Int):List{
log.info("findByAge({})",age)
returnrepository.findByAge(age)
}

@GetMapping
funfindAll():List=repository.findAll()

@PostMapping
funadd(@RequestBodyperson:Person):Person=repository.save(person)

@PutMapping
funupdate(@RequestBodyperson:Person):Person=repository.update(person)

@DeleteMapping("/{id}")
funremove(@PathVariableid: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



让我们使用以下命令构建镜像并将其推送到容器注册表:

$mvncleancompilejib:build-Pjib,tomcat

除了 YAML 模板,Helm 存储库还包含一个用于values.yaml 验证的 JSON schema 。多亏了该 schema ,我们将能够利用 Devtron GUI 从图表创建应用程序。让我们看看它是如何工作的。

单击自定义图表后,将被重定向到包含详细信息的页面。最新版本的图表是0.3.2. 只需单击部署按钮。

在下一页上,需要提供应用程序的配置。目标环境是存在于主集群上的local。多亏 Devtron 对 Helm values.schema.json 的支持,使得我们使用 GUI 表单定义所有值。例如,可以增加更改镜像的值到最新的:1.1。

bf7a4ff6-65b7-11ed-8abf-dac502259ad0.png

部署应用程序后,我们可以验证其状态:

bfbba99c-65b7-11ed-8abf-dac502259ad0.png

让我们进行一些测试调用。示例 Spring Boot 公开了 Swagger UI,因此我们可以轻松发送 HTTP 请求。要与运行在 K8S 上的应用程序交互,应该为服务启用端口转发kubectl port-forward svc/sample-spring-boot-api 8080:8080。执行该命令后,您可以通过 http://localhost:8080/swagger-ui.html 访问地址 Swagger UI:

c019b7da-65b7-11ed-8abf-dac502259ad0.png

Devtron 允许我们查看 pod 日志。还可以用 grep。下面展示了与测试调用相关的日志。

c0309414-65b7-11ed-8abf-dac502259ad0.png

将应用部署到远程集群

现在,我们将示例 Spring Boot 应用程序部署到远程集群。为了做到这一点,请转到与以前相同的页面,但不要选择本地环境,而是选择remote-dev,它与kind-c1集群相关联。

c098464a-65b7-11ed-8abf-dac502259ad0.png

现在,有两个相同的应用程序在两个不同的集群上运行。我们可以对在 Kind 集群上运行的应用程序和本地集群执行相同的操作,例如验证其状态或检查日志。

c0d23bfc-65b7-11ed-8abf-dac502259ad0.png

部署应用组

假设我们要部署连接到数据库的应用程序。我们可以使用名为Chart Group的 Devtron 功能一步完成。使用该功能,我们可以将 Spring Boot 的 Helm 图表和 Postgres 的图表放在同一个逻辑组中。然后,我们可以将整个组部署到目标环境中。要创建图表组,请转到 Chart Store 菜单,然后单击Create Group按钮。您应该设置组的名称并选择将包含的图表。对我来说,就是bitnami/postgresql图表和我的自定义 Helm 图表。

c1096c44-65b7-11ed-8abf-dac502259ad0.png

创建组后,您将在Chart Store主页面上看到它。现在,只需单击它即可部署应用程序。

c1327986-65b7-11ed-8abf-dac502259ad0.png

单击带有图表组的磁贴后,您将被预测到部署页面。

c151de52-65b7-11ed-8abf-dac502259ad0.png

单击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 。

c1834b7c-65b7-11ed-8abf-dac502259ad0.png

这是本次实践中已部署应用程序的最终列表:

c1bf1f30-65b7-11ed-8abf-dac502259ad0.png

总结

借助 Devtron,可以使用 Helm 图表轻松地支持跨多个 K8S 集群部署应用程序。

Devtron 简化了 K8S 的开发,可以通过图表组功能部署所有需要的应用程序。

可以使用 GUI 仪表板管理和监控应用程序。

可以在仪表板中执行所有操作,而无需自己传递任何 YAML 清单或执行kubectl命令。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 集群
    +关注

    关注

    0

    文章

    79

    浏览量

    17102
  • kubernetes
    +关注

    关注

    0

    文章

    219

    浏览量

    8568

原文标题:使用 Devtron 在 Kubernetes 多集群上进行开发

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    阿里云上Kubernetes集群联邦

    规模的上限等等。Federation集群联邦可以一定程度上解决这些问题。Federation是可以将分布多个Region或者多个云厂商的Kubernetes集群整合成一个大的
    发表于 03-12 17:10

    Kubernetes Ingress 高可靠部署最佳实践

    摘要: Kubernetes集群中,Ingress作为集群流量接入层,Ingress的高可靠性显得尤为重要,今天我们主要探讨如何部署一套高性能高可靠的Ingress接入层。简介
    发表于 04-17 14:35

    阿里云容器Kubernetes监控(一) - 资源监控

    的概念和物理概念无法监控数据、生命周期上面实现统一。阿里云容器服务Kubernetes与云监控进行了深度集成,用应用分组来抽象逻辑概念,今天我们来看下如何进行Kuberbetes的资
    发表于 04-23 14:35

    kubernetes集群配置

    基于v1104版本手动搭建高可用kubernetes 集群
    发表于 08-19 08:07

    Kubernetes 从懵圈到熟练:集群服务的三个要点和一种实现

    通信员。熟悉服务网格的同学肯定对这个很熟悉了。但是可能比较少人注意到,其实 Kubernetes 集群原始服务的实现,也是基于 Sidecar 模式的。 Kubernetes
    发表于 09-24 15:35

    kubernetes v112二进制方式集群部署

    kubernetes v112 二进制方式集群部署
    发表于 05-05 16:30

    请问鸿蒙系统上可以部署kubernetes集群吗?

    鸿蒙系统上可以部署kubernetes集群
    发表于 06-08 11:16

    如何部署基于Mesos的Kubernetes集群

    Kubernetes官方提供的部署基于Mesos的Kubernetes集群的文档相对简单,对于不熟悉Mesos的Kubernetes开发者或
    发表于 10-09 18:04 0次下载
    如何部署基于Mesos的<b class='flag-5'>Kubernetes</b><b class='flag-5'>集群</b>

    浅谈Kubernetes集群的高可用方案

    Kubernetes作为容器应用的管理中心,通过对Pod的数量进行监控,并且根据主机或容器失效的状态将新的Pod调度到其他Node上,实现了应用层的高可用性。针对Kubernetes集群
    发表于 10-11 10:04 1次下载
    浅谈<b class='flag-5'>Kubernetes</b><b class='flag-5'>集群</b>的高可用方案

    Kubernetes集群发生网络异常时如何排查

    本文将引入一个思路:“在 Kubernetes 集群发生网络异常时如何排查”。文章将引入 Kubernetes 集群中网络排查的思路,包含网络异常模型,常用工具,并且提出一些案例以供学
    的头像 发表于 09-02 09:45 3126次阅读

    Kubernetes 集群的功能

    Telepresence 是一个开源工具,可让您在本地运行单个服务,同时将该服务连接到远程 Kubernetes 集群
    的头像 发表于 09-05 10:58 805次阅读

    Kubernetes集群的关闭与重启

    在日常对 Kubernetes 集群运行维护的过程中,您可能需要临时的关闭或者是重启 Kubernetes 集群集群
    的头像 发表于 11-07 09:50 8745次阅读

    在树莓派上搭建Kubernetes智能边缘集群

    电子发烧友网站提供《在树莓派上搭建Kubernetes智能边缘集群.zip》资料免费下载
    发表于 12-09 09:20 2次下载
    在树莓派上搭建<b class='flag-5'>Kubernetes</b>智能边缘<b class='flag-5'>集群</b>

    Kubernetes集群部署

    Kubeadm是一种Kubernetes集群部署工具,通过kubeadm init命令创建master节点,通过 kubeadm join命令把node节点加入到集群
    的头像 发表于 02-15 10:35 984次阅读

    Kubernetes集群中如何选择工作节点

    简要概述: 本文讨论了在Kubernetes集群中选择较少数量的较大节点和选择较多数量的较小节点之间的利弊。
    的头像 发表于 08-28 15:46 349次阅读
    <b class='flag-5'>Kubernetes</b><b class='flag-5'>集群</b>中如何选择工作节点