23 张图细讲使用 Devtron 简化 K8S 中应用开发

2023-05-16

23 张图细讲使用 Devtron 简化 K8S 中应用开发

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

https://devtron.ai/

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 集群后,它将成为默认上下文。

alt

现在,我们的目标是将新创建的 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打印在该命令的输出中,复制它。

alt

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

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

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

alt

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

alt

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

alt

创建环境

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

alt

现在,切换到Clusters视图。

alt

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

alt

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

alt

添加自定义 Helm 存储库

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

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

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

alt

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

alt

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

alt

使用 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<Person> {
      log.info("findByAge({})", age)
      return repository.findByAge(age)
   }

   @GetMapping
   fun findAll(): List<Person> = 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 插件将镜像推送到容器注册表。这是所需的配置:

<plugin>
  <groupId>com.google.cloud.tools</groupId>
  <artifactId>jib-maven-plugin</artifactId>
  <version>3.3.0</version>
  <configuration>
    <to>
      <image>piomin/sample-spring-kotlin-microservice</image>
      <tags>
        <tag>1.1</tag>
      </tags>
    </to>
    <container>
      <user>999</user>
    </container>
  </configuration>
</plugin>

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

$ 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

alt

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

alt

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

alt

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

alt

将应用部署到远程集群

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

alt

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

alt

部署应用组

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

alt

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

alt

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

alt

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

alt

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

alt

总结

  • 借助 Devtron,可以使用 Helm 图表轻松地支持跨多个 K8S 集群部署应用程序。
  • Devtron 简化了 K8S 的开发,可以通过图表组功能部署所有需要的应用程序。
  • 可以使用 GUI 仪表板管理和监控应用程序。
  • 可以在仪表板中执行所有操作,而无需自己传递任何 YAML 清单或执行 kubectl命令。

本文由 mdnice 多平台发布

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

23 张图细讲使用 Devtron 简化 K8S 中应用开发 的相关文章

  • 百度2014校园招聘 软件研发工程师 笔试题

    一 简答题 xff08 本题共30 xff09 1 动态链接库和静态链接库分别有什么优缺点 xff1f xff08 10 xff09 2 轮询任务调度与抢占式任务调度的区别 xff1f xff08 10 xff09 3 请列出数据库中常用的
  • Kubernetes 日志查询分析实践

    简介 xff1a 本文将介绍如何基于日志服务实现对 Kubernetes xff08 以下简称 K8s xff09 日志的采集以及查询分析 xff0c 此外 xff0c 还附带了对 Ingress Audit 方案的简要介绍 为了方便大家通
  • C++算法题

    目录 一 排序算法 1 冒泡排序 2 快速排序 3 归并排序 4 堆排序 5 插入排序 6 topK 二 二分查找 1 一维数组二分查找 2 二维数组二分查找 3 寻找旋转排序数组中的最小值 三 有序数组的平方 xff08 双指针法 xff
  • QT通过UDP分包传输大图像(测试可传6M)

    参考博客 UDP传数据每帧数据最大传64k xff0c 而图片文件一般远大于64K xff0c 此时就需要将图像数据分包传输 xff0c 接收端也分包接收 xff0c 直到整个图片数据都收到 xff0c 再进行其他处理 发送端 发送数据 v
  • github代码如何定位到历史版本(历史commit点)

    关于使用git在本地进行版本管理见linux下的版本管理 工作项目中git流程实操见git简明实操模板 想我们在写代码时候 xff0c 数次修改并提交commit xff0c 如果在这个过程中我们后悔了 xff0c 想回到当初的某一个com
  • Intel RealSense学习之图像及图像深度数据获取

    本文将介绍如何获取到彩色图像的深度信息 大家都知道我们可以从realsense 摄像头中获取到RGB数据 xff0c 红外数据 xff0c 以及图像的深度数据 至于图像的深度数据我的理解是realsense摄像投抓到的图像的相关距离信息 x
  • ROS机器人编程实践——读书笔记1

    目的 xff1a 写一个最小基于ROS的机器人控制软件 一 写一个运动命令流 xff0c 每秒10次 xff0c 每三秒启动一次 在移动时 xff0c 发送前进命令 xff0c 速度0 5米每秒 xff0c 停止时发送速度0米每秒 命名为
  • SLAM后端:因子图优化

    xff08 一 xff09 贝叶斯网络 贝叶斯网络是种概率图 xff0c 由随机变量节点和表达随机变量条件独立性的边组成 xff0c 形成一个有向无环图 在 SLAM 中 由于我们有运动方程和观测方程 它们恰好表示了状态变量之间的条件概率
  • Ceres用法及Ceres-Sophus在位姿图优化问题的应用

    xff08 一 xff09 Ceres Solver的一般用法 简述 xff1a Ceres Solver is an open source C 43 43 library for modeling and solving large c
  • 基于深度卷积神经网络的语义地图构建

    xff08 一 xff09 相关研究及特点 语义分割 语义信息 xff1a 物体类别 目标检测 语义分割等 语义分割即对图像中每个像素分配类别标签 目前最主流的是深度学习方法 xff0c 代表性的方法是全卷积神经网络 xff08 fully
  • 语义信息用于闭环检测

    xff08 一 xff09 SLAM闭环检测方法 传统特征点方法 xff1a 利用SIFT 等视觉特征进行对比闭环检测 受环境影响较大 xff0c 往往会产生假阳性检测 xff0c 且计算量大 效率低 在实际应用上存在较大的阻碍 深层特征方
  • 盘点|2021年最受欢迎Linux桌面操作系统前十名

    简介 xff1a 根据各操作系统镜像站后台下载量 xff0c 阿里云镜像站统计了2021年最受欢迎的Linux桌面操作系统 xff0c 仅根据调用量排名 xff0c 供大家参考 排位最高的还是Centos xff0c 受中国Linux用户欢
  • VSLAM框架对比

    xff08 一 xff09 单目VSLAM特点介绍 xff1a 1 ORB SLAM2 工作流程 xff1a 主要模块 xff1a 前端 xff1a ORB特征提取匹配 xff0c 估计相机位姿 xff1b 根据跟踪地图点数的减少选择关键帧
  • ORB-SLAM3的Euroc数据集测试

    xff08 一 xff09 测试运行 不同模式测试过程 xff08 以MH 03为例 xff09 1 pure mono 运行SLAM xff1a cd ORB SLAM3 Example run slam Monocular mono e
  • 阶段性工作总结

    xff08 一 xff09 简介 1 常用VSLAM开源框架对比 xff0c 初步研究方向确定 2 ORB SLAM3的数据集测试 xff0c 各种模式下的运行性能对比 xff0c 及IMU模式下与Vins对比实验 3 adas视频在ORB
  • 第二阶段文献总结

    xff08 一 xff09 CoSLAM 1 系统功能和亮点 功能 xff1a 本文是第一个动态场景下多相机合作的同时定位 静态图构建 动态点轨迹估计的SLAM系统 亮点 xff1a 引入相机间位姿估计和相机间建图解决动态物体问题维护每一个
  • 第三阶段文献总结

    motion分割相关方法 xff08 一 xff09 Semantic segmentation aided visual odometry for urban autonomous driving 1 文章特点 xff1a VO中包含重投
  • 动态场景SLAM相关论文总结

    参考文献 xff1a VDO SLAM xff08 动物判别与跟踪 xff09 DynaSLAM xff08 深度学习 43 多视图几何分割 xff09 CoFusion xff08 语义 43 运动分割 xff09 Meaningful
  • 算法总结——八皇后问题(三种解法)

    问题描述 会下国际象棋的人都很清楚 xff1a 皇后可以在横 竖 斜线上不限步数地吃掉其他棋子 如何将8个皇后放在棋盘上 xff08 有8 8个方格 xff09 xff0c 使它们谁也不能被吃掉 xff01 这就是著名的八皇后问题 对于某个
  • 游戏开发图书推荐--我读过的技术经典图书

    很多同学问我学游戏开发应该看些什么书 xff0c 我在这里抛砖引玉 xff0c 给一份推荐表 xff0c 希望大家共同提高 由于本人英文不太好 xff0c 推荐的大部书籍都是国人编写的 xff0c 有些经典的外文图书可能是翻译不好 xff0

随机推荐

  • (四)加入摄像头的系统

    打开摄像头的方法在第一章里就讲到了 xff0c 而且使用了多线程完成 所以这一章的内容就是将之前第一章的代码做移植 xff0c 进行小幅度的修改 xff0c 应用到当前系统上就可以了 在UI界面上已经放好了用来显示摄像头信息的label 在
  • 安卓不透明度和透明度

    安卓不透明度和透明度 xff1a 不透明度透明度16进制100 0 FF99 1 FC98 2 FA97 3 F796 4 F595 5 F294 6 F093 7 ED92 8 EB91 9 E890 10 E689 11 E388 12
  • Centos7安装PHP

    阿里云官方镜像站 xff1a 阿里巴巴开源镜像站 OPSX镜像站 阿里云开发者社区 我们在系统安装软件时都会遇到各种小问题 xff0c 那么如何才能提高我们在云服务器上的软件安装效率呢 xff1f 接下来就为大家详细介绍下如何在 CentO
  • Canny边缘检测

    Canny边缘检测 1 使用高斯滤波器 xff0c 以平滑图像 xff0c 滤除噪声 2 计算图像中每个像素点的梯度强度和方向 3 应用非极大值 xff08 Non Maximum Suppression xff09 抑制 xff0c 以消
  • MBus协议详解(一)

    看了许多关于MBus协议的资料 xff0c 感觉说的不具体 不完整 也不系统 xff0c 本人准备结合一个具体的产品实现 xff0c 从理论和实现上对MBus协议做一个详细的论述 xff0c 如有不当之处 xff0c 欢迎讨论 1 介绍 M
  • 机器学习期末复习题题库-单项选择题

    1 属于监督学习 的机器学习算法是 xff1a 贝叶斯分类器 2 属于无监督学习 的机器学习算法是 xff1a 层次聚类 3 二项式 分布的共轭分布是 xff1a Beta分布 4 多项式 分布的共轭分布是 xff1a Dirichlet分
  • Linux中查看磁盘大小、文件大小、排序方法小结

    一 xff0c 查看磁盘空间大小的命令 xff1a df df命令用于查看磁盘分区上的磁盘空间 xff0c 包括使用了多少 xff0c 还剩多少 xff0c 默认单位是KB 比如以下命令 xff1a df hl 执行结果如下 xff1a 执
  • 【Mac M1】安装stable diffusion webui教程及问题集锦

    这里写自定义目录标题 我的配置MacBookPro 14 M1安装视频教程可参考如下链接 xff1a 主播讲的挺清楚安装步骤 xff1a 第一步 xff1a 安装homebrew第二步 xff1a 安装pytorch第三步 xff1a 安装
  • cmake找不到trigger_msgsConfig.cmake 解决办法

    在编译FLIR相机驱动时遇到 百度无人记录此问题 xff0c 特此记录解决办法 sudo apt install ros melodic image transport
  • PX4源码开发人员文档(一)——软件架构

    软件架构 PX4 在广播消息网络内 xff0c 按照一组节点 xff08 nodes xff09 的形式进行组织 xff0c 网络之间使用像如 姿态 和 位置 之类的语义通道来传递系统状态 软件的堆栈结构主要分为四层 应用程序接口 提供给
  • PX4(PIXHAWK)源码开发人员文档(二)——Hello Sky

    前提 用UART1连接PX4FMU和计算机 安装PX4Toolchain 注册Github账户 Step 1 准备源码文件 为了方便管理代码 xff0c 可以使用GIT 版本控制系统 xff0c 在 GitHub上 fork和更新源码 不注
  • PX4(PIXHAWK)源码开发人员文档(二)——Hello Sky(续)

    Step 5 订阅传感器数据 为了做有用的事情 xff0c 应用需要订阅subscribe输入并发布publish输出 e g 电机 或伺服指令 PX4平台真正的硬件抽象 xff08 true hardware abstraction xf
  • PX4(PIXHAWK)源码开发人员文档(三)——进程间通讯的开发者指南

    进程 应用之间的通信 xff08 例如将传感器应用的传感器数据发送到姿态滤波应用 xff09 是 PX4 软件架构的关键部分 进程 xff08 通常又被叫做节点 xff08 node xff09 xff09 通过命名为总线 xff08 bu
  • Ubuntu21.10配置Docker CE 镜像

    Docker CE 是免费的 Docker 产品的新名称 xff0c Docker CE 包含了完整的 Docker 平台 xff0c 非常适合开发人员和运维团队构建容器 APP 参考阿里云官方镜像站 xff1a 阿里巴巴开源镜像站 OPS
  • PX4源码开发人员文档(四)——创建后台程序(应用)

    在 Unix 和其他多任务计算机操作系统中 xff0c 后台程序是指 xff0c 作为后台进程运行的计算机 xff0c 而不是由交互用户直接控制 后台程序概念的主要好处是 xff0c 后台程序可以直接启动 xff0c 而不需要将其发送到精确
  • PHP获取今天、本周、今年开始时间戳

    PHP获取今天 本周 今年开始时间戳 注 xff1a 以下代码在php8 0上测试通过 xff0c 其它版本的php理论上也是可行的 span class token delimiter important lt php span span
  • 搬砖过程中常用的英文单词(代码命名规则)

    注册register用户名 用户userName user密码password pwd路径path成绩score服务器host图片img字符串str数字num
  • CAN 邮箱的理解

    对于CAN邮箱的理解 xff1a CAN总线有接收邮箱和发送邮箱 xff1a 发送邮箱 是用于CAN总线数据发送的 xff0c 总共有3个 xff0c 并且存在优先级关系 优先级越高表示其里面的数据会被优先发送 数据在发送前都会被送到优先级
  • 变量名前为什么要加_下划线

    简单来说 xff0c 含有两个下划线和下划线 43 大写字母开头的标识符是给编译器和标准库用的 xff0c 你不能用 xff0c 否则后果自负 一个下划线开头的随便用 xff0c 只要你不嫌麻烦 而我们一般在前面加 表示私有变量 一般来说
  • 23 张图细讲使用 Devtron 简化 K8S 中应用开发

    23 张图细讲使用 Devtron 简化 K8S 中应用开发 在本文中 xff0c 您将学习如何在多集群环境中使用 Devtron 在 K8S 上进行应用开发 https devtron ai Devtron 附带用于构建 部署和管理微服务