简介
时至今日,Kubernetes 正在变得越来越重要,不仅仅是运维需要 Kubernetes,在开发的世界里 Kubernetes 也不可或缺。因此能够熟练掌握 Kubernetes 知识会备受追捧。然而问题是,开发人员是否需要直接上手操作 Kubernetes,他们是否必须完全了解 Kubernetes。
规避这一问题的常见方法是通过提供一个平台或 CI/CD 流水线,将 Kubernetes 的复杂性从开发人员身上抽象出来,使开发人员更容易在 Kubernetes 内测试应用程序,而无需直接访问 Kubernetes。
然而,允许开发人员直接访问 Kubernetes,让他们直接在 Kubernetes 内部开发一些应用程序往往是有意义的,因为这样可以在一个非常接近生产的环境中工作。
这就出现了一个问题,即如何让开发人员使用 Kubernetes 工作,同时又不因其复杂性而使他们不堪重负。这个问题的答案可能是需要使用为 Kubernetes 而准备的开发者工具,例如 DevSpace。在这篇文章中,我们将探讨开发人员如何使用 DevSpace 和 Rancher 来简化 Kubernetes 开发。
DevSpace: 使用 Rancher 轻松开发
DevSpace 是一款面向 Kubernetes 的客户端、开源的开发者工具。它可以:
直接在 Kubernetes 内部构建、测试和调试应用程序
通过更新正在运行的容器而不需要重建镜像或重启容器来进行热重载开发
在团队内部以及在开发、暂存和生产中统一部署工作流程
自动完成镜像构建和部署的重复性任务
DevSpace 作为开发者的客户端工具,是对 Rancher 的补充。开发者在 Rancher 内获得分配的项目,然后直接在 Kubernetes 内开发或测试应用。这使开发环境更接近生产环境,让开发人员在发布新功能时更有把握,相信一切都能够在生产环境中运行良好。
设置 DevSpace
首先需要下载 DevSpace 二进制文件(https://devspace.sh/cli/docs/getting-started/installation),接下来,在一个已经容器化的项目中通过运行 devspace init 创建一个新的项目。如果你现在手边没有一个可以用来进行试验的项目,你可以使用我们的示例项目:
https://devspace.sh/cli/docs/getting-started/initialize-project#choose-a-project
在你回答了几个关于应该被初始化的项目的问题之后,DevSpace 将为你创建一个devspace.yaml
。这个文件包含了如何使用 DevSpace 部署和开发项目,看起来如下所示:
现在,你可以跨团队分享这个配置。它指定了如何在 Kubernetes 内部独立于本地设置开发应用程序。
要开始开发应用程序,你需要访问一个 Kubernetes 集群或 Rancher 项目。最佳实践是为每个开发人员创建一个 Rancher 项目或者为一个共享集群内的开发者团队创建一个单一项目。
为了在不同项目和命名空间之间确保简单的隔离,使用常见的 Kubernetes 资源,如 Resource Quotas、网络策略、Pod 安全策略和 Limit Ranges 等。
使用 DevSpace 开发应用程序
运行命令devspace.dev
来开启开发流程。这将起到以下作用:
构建和部署你的应用程序
流式传输在部署过程中部署的所有容器日志
转发在 devspace.yaml 中的 dev.ports 指定的所有端口
根据 dev.sync 中的同步配置来同步所有的文件更改,这样你就可以在运行的容器中重启应用程序,而无需重建镜像或重新部署任何东西
本地修改文件后,文件会同步到容器中。容器重启后无需通过 Docker 完全重建,大大加快了开发进程。
然后 DevSpace 会启动一个本地 UI,你可以访问和检查创建的 pod。这简化了与 Kubernetes 的交互,特别是对于不熟悉 kubectl 的用户。
除了devspace dev
,devspace deploy
命令可以用于打包和部署应用程序,而不需要热重载、端口转发或日志流。DevSpace 提供了许多自定义功能,以根据你的用例和设置调整其行为,包括:
依赖项 ,可以让你开发和部署依赖于其他项目的项目
Profiles ,可以在一个
devspace.yaml
中进行多种配置允许指定动态配置值的 变量
允许为项目配置自定义命令的 命令
可以在特定的 DevSpace 事件上执行某些功能的 Hooks
自动为 devspace 命令添加标志(flag)的 环境变量
扩展 DevSpace 和其命令的 插件
DevSpace 标准化和简化了开发人员与 Kubernetes 的交互方式的同时,Rancher 在服务器端管理着开发者如何在 Kubernetes 内部工作。Rancher 可以让你启动开发集群并将它们分到不同的项目中,在这些项目中开发团队可以一起工作和测试。
Resource Quotas 项目除了常见的 Kubernetes 隔离资源外,还可以在资源方面约束团队,让团队在共享 Kubernetes 集群中得到公平的使用。共享 Kubernetes 集群可以减少基础设施的开销并且可以直接在 Kubernetes 内部进行有效开发。
再为快速开发添砖加瓦:loft
loft 是另一个很有用的工具,它可以在开发过程中添加一些比较方便的功能,包括:
虚拟集群,比“真实的”集群成本更低,并且可以在数秒内创建并再次清理,而且功能比简单的命名空间更强大
在共享集群中为开发人员提供命名空间的自助服务(self-service)
睡眠模式,在一定时间不活动后,将命名空间置于睡眠状态,以节省计算成本
你可以通过安装 loft helm chart(https://loft.sh/docs/getting-started/setup)轻松地将 loft 添加到 Rancher。loft CLI 也可以作为 DevSpace 的插件。
总结
对于开发人员而言,熟练上手使用 Kubernetes 并不简单,目前许多企业仍然在努力寻找一种方法来抽象 Kubernetes 的复杂性。这往往导致定制化的平台缺乏许多功能,限制了 Kubernetes 的潜力,并且是另一个维护负担。
将 DevSpace、Rancher 和 loft 结合起来,让开发者可以直接访问 Kubernetes,并且只需要一个命令:devspace dev
。
Rancher 十分擅长创建和管理多个集群,DevSpace 擅长为开发者提供工具。将 Rancher 和 DevSpace 相结合是十分简单的,并且可以显著提升开发人员的生产力。
此外,loft 为开发团队提供了更多有用的功能,让开发者可以随时获得 Kubernetes 的工作环境,同时保持低成本。将 Rancher、DevSpace 和 loft 这三个工具结合起来,对于使用 Kubernetes 的开发团队来说,是一个十分理想的设置。
本文转载自公众号 RancherLabs(ID:RancherLabs)。
原文链接:
评论