更快地开发云原生软件 🚀 - 本月 DevOps 工具 (1) GenAI LIVE! | 2025 年 6 月 4 日

2025-06-10

更快地开发云原生软件🚀 - 本月 DevOps 工具 (1)

GenAI LIVE! | 2025年6月4日

本月 DevOps 工具 - 这是一个新系列,每个月我都会介绍一个新的有用的 DevOps 工具。🛠 🙌🏼

第一个是:DevSpace🎉 ——Kubernetes 的开发者工具,它使软件工程师能够更快地开发云原生软件。


DevSpace 解决了什么问题?👀

开发微服务应用
想象一下,你在一个开发团队中,正在开发一个复杂的微服务应用中的一项特定服务。该应用的目标环境是 Kubernetes。⎈

因此,您为其中一个微服务创建了一个错误修复分支,并开始进行更改。在进行更改的同时,您需要实时测试该分支,并结合其他服务进行测试,因为这些服务都是相互依赖的

在真实的 K8s 环境上测试
但是,您不想使用 docker-compose 或 Minikube 在本地进行测试,而是希望在运行所有这些服务的真实 K8s 环境中测试您的更改。
原因如下:

  • 不要有任何意外,因为这是两个不同的环境
  • 对于较大的应用程序,通常不可能在本地计算机上运行它们,因为它们需要大量的计算资源

常见但低效的做法是:
所以这种用例中常见的低效工作流程是:

  • 使用 docker-compose 或 Minikube 在本地进行测试,以确保更改有效
  • 完成所有更改后,创建一个拉取请求
  • 你的分支已合并到 master
  • 触发 CI/CD 管道,测试更改、构建新映像并将其部署到开发环境中的 k8s 集群中 - 现在您可以在真实的 DEV 环境中对其进行测试,以确保它在那里正常工作,就像在本地工作一样
  • 如果某件事不起作用,每次调整都需要经历相同的循环

这是一个漫长的过程,需要在实际的 k8s 开发环境中测试你的更改。🙉

我们希望以高效的方式做到这一点🚀
那么,如果您在本地所做的每个更改都会立即部署到 K8s 集群中,以便您可以测试您的更改,

  • 无需经历上述漫长的过程,无需等待 CI/CD 管道运行等。
  • 无需了解 Kubernetes 和 kubectl 或需要 DevOps 团队的帮助。

可以让你做到这一点的工具就是DevSpace
开发空间


DevSpace 如何运作?🤔

在您的应用程序代码中使用一个简单的devspace.yaml配置文件,DevSpace 将使用您的 Dockerfile 自动将您的应用程序构建到 Docker 映像🐳中,并将其作为 Helm 图表部署到 K8s 集群中。

最重要的是,每次你进行更改时,DevSpace 都会通过自动重新创建并重启 Pod 中的容器来实现热重载🔄。这可以让你开发过程更快、更高效。

这将是一种开发模式,您可以在其中立即在 K8s 集群中测试每个代码更改
devspace 开发模式

其他用例
DevSpace 还有其他用例:
例如,如果您只想部署应用程序而不进行同步,并将镜像推送到您的私有 Docker 仓库。
或者我特别喜欢的是,它提供了快捷命令来获取容器终端或日志,而无需检查 Pod ID、命名空间等:
devspace 命令


开始使用 DevSpace 👩🏻‍💻

只需 4 个简单步骤即可设置带有热重载的 DEV 模式😎

演示的 Git 仓库:Gitlab 链接

  1. 安装 devspace
  2. 创建 Dockerfile
  3. 使用 devspace 启动我们的项目
  4. 启动 DEV 模式

1. 安装 devspace - 开源 CLI 工具

安装 devpsace CLI

2. Dockerfile🐳

第二步是为您的项目创建 devspace 将使用的 Dockerfile。

下面是一个 Java 应用程序的示例:
Dockerfile

DevSpace 的工作原理是,它会同步你的本地代码和容器镜像中的代码,并检查是否有任何代码更改,以便执行热重载。
因此,DevSpace 会构建包含我们所有代码的镜像并进行同步。这一切都是开箱即用的,无需我们进行任何配置。👍

提示:用于.dockerignore忽略不应在容器内复制的文件,例如 IntelliJ IDE 的 .idea 等代码编辑器文件。

3. 使用 devspace 初始化你的项目

现在我们可以用 来初始化项目devspace init

在初始化过程中,你需要告知 DevSpace 如何部署你的应用程序。你可以选择以下选项:

  • 本地 Helm 图表
  • 远程 Helm 图表
  • K8s 配置文件(例如 Deployment.yaml)
  • 组件图表(DevSpace 为您创建 Helm 图表,因此您不需要为项目创建任何 k8s 配置文件)

在此初始化过程中,DevSpace 会devspace.yaml根据您的 Dockerfile 自动为您生成配置文件。这为您提供了一个良好的起点,但是,您通常需要进行一些调整才能完全反映您所需的工作流程。您也可以由团队中具备 Kubernetes 专业知识的人员来完成此首次配置。

4. 启动开发模式🚀

启动开发模式前的先决条件:

  1. 正在运行的 Kubernetes 集群,
  2. 您构建的应用程序工件,例如 Jar 文件。
  3. 配置命名空间以通知 devspace 将你的应用部署到哪个命名空间devspace use <namespace name>
  4. 您需要一个有效的 kube-context,因为 DevSpace 像 kubectl 或 helm 一样使用 kube-config 文件,这是一件好事,因此您不必单独配置任何东西。

最后,我们可以执行devspace dev来启动开发模式!
执行时devspace dev,DevSpace 会在后台执行以下操作来实现:
devspace 开发经验

  • DevSpace 开始文件同步,为您提供热重载
  • 端口转发已自动配置,允许您使用本地主机访问应用程序
  • 自动开始流式传输K8s Pod 内运行的容器正在记录的日志。因此,如果出现错误,我们会立即在流中看到,而无需使用 kubectl 手动执行此操作。
  • 最后,DevSpace 附带内置 UI,用于实时日志流、状态监控和警报、交互式终端会话等

DevSpace 用户界面


总结和预览

因此,借助 DevSpace,您在 Kubernetes 环境中开发云原生软件时将拥有更高效的开发流程

现在你可能想知道,K8s 集群状态怎么样?如果每个开发人员都一直将自己的更改推送到集群中,会发生什么?开发人员会把集群搞乱吗?🤔 嗯,一个解决方案是使用命名空间。

但是,对于该特定问题还有其他好的解决方案,这将是我们本月 DevOps 工具系列下一篇文章的主题。


喜欢、分享并关注我😍以获取更多内容:

继续阅读 https://dev.to/techworld_with_nana/develop-cloud-native-software-faster-devops-tool-of-the-month-1-279b
PREV
GitHub Actions 教程 | 使用 Docker 的 CI 管道
NEXT
面向初学者的完整 Prometheus 监控教程