谷歌开源 Skaffold:简化 Kubernetes 开发
作者:Nick Kubala 是谷歌云部门的软件工程师,Russell Wolf 是产品经理
早在 2017 年我们就注意到,创建 Kubernetes 原生应用程序的开发人员要花很长的时间跨注册中心构建和管理容器映像、手动更新 Kubernetes 清单文件,以及每次进行哪怕极小的代码更改都要重新部署其应用程序。于是我们着手创建一个工具来自动执行这些任务,帮助他们专注于编写和维护代码,而不是管理编辑-调试-部署这个“内部循环”过程中所需的重复性步骤。Skaffold 由此诞生了。
今天,我们宣布推出 Skaffold 的第一个正式版。Skaffold 简化了你在进行 Kubernetes 开发时执行的常见操作任务,使你可以专注于代码更改并迅速部署到集群上。它是驱动 Cloud Code 的底层引擎,而 Cloud Code 本身就是一款功能强大的工具,可以提高开发人员的工作效率。
Skaffold 的核心命令 skaffold dev 密切关注本地源代码的更改,实时重新构建应用程序,并实时重新部署到集群上。但 Skaffold 已得到了很大的完善,不仅仅是一款构建和部署工具,它还成为提高开发人员速度和工作效率的工具。
Skaffold 用户的反馈证明了这一点。ForgeRock 的工程主管 Warren Strange 说:“我们的客户很喜欢[Kubernetes],但老是向我们反馈称在 Kubernetes 上进行开发很麻烦。Skaffold 正适合解决这个问题。对 Docker 映像或配置进行更改以前要花几分钟,现在只要花几秒钟。 Skaffold 的插件架构使我们能够部署到 Helm 或 Kustomize,并使用 Kaniko 之类的各种 Docker 构建插件。Skaffold 把我们原来一套定制的实用程序和脚本换成了易于使用的简化版工具。”
Kubernetes 开发人员的最好朋友
Skaffold 是一种命令行工具,通过以一种可扩展的方式自动执行开发工作流程中从源代码到部署的大部分环节,因而为开发人员节省了时间。它默认支持最常见的映像构建和应用程序部署策略,因而与一系列广泛的新旧项目兼容。Skaffold 还可以完全在客户端运行,你的集群中不需要任何组件,因而拥有轻量级和高性能的优点。
Skaffold 的内部开发循环
通过处理迭代开发的操作任务,Skaffold 为应用程序开发人员大大减轻了负担,并大大提高了工作效率。
在过去这两年,近 150 位代码贡献者向 Skaffold 项目提交了 5000 多次代码,带来了 40 个版本,我们对 Skaffold 的核心功能很成熟充满信心。下面不妨仔细看看 Skaffold 的一些核心功能。
快速迭代开发
说到开发,skaffold dev 是你的个人操作助手:它了解构成你应用程序的源文件,在你工作时密切关注它们,仅重新构建和重新部署必要的组件。Skaffold 随带面向本地和远程部署的高度优化的工作流程,使你可以灵活地针对 Minikube 或 Kind 等本地 Kubernetes 集群以及任何远程 Kubernetes 集群进行开发。
德国 TNG 科技咨询公司的首席顾问 Martin Höfling 说:“Skaffold 是一款了不起的工具,为我们简化了开发和交付。Skaffold 在这两个方面正合我们的心意:首先是从本地开发、集成测试到交付的整个开发周期。其次,Skaffold 使我们能够独立于平台在 Linux、OSX 和 Windows 上进行开发,不需要针对特定平台的逻辑。”
Skaffold 的开发循环还可以自动执行开发人员的典型任务。它可自动跟踪来自所部署工作负载的日志,并将远程应用程序端口转发到你的计算机上,那样你可以直接针对服务端点进行迭代。使用 Skaffold 的内置实用程序,你可以完全使用一款轻量级客户端工具进行真正的云原生开发。
生产就绪的 CI/CD 管道
Skaffold 可用作生产级 CI/CD 管道的构建模块。 Quora 的软件工程师 Taylor Barrella 说:“Skaffold 很出色,它是我们想要用于开发和部署的工具。它为我们提供了跨应用程序的通用入口点,我们也可以将其重新用于 CI/CD。眼下,我们所有用于 Kubernetes 应用程序的 CI/CD 管道在构建和部署时都使用 Skaffold。”
Skaffold 可用于构建映像并将应用程序安全地部署到生产环境,从而重复使用你用于本地运行应用程序的大多数同样工具。skaffold run 使用一个简单的命令,即可运行从构建到部署的整条管道,还可以分解为 skaffold build 和 skaffold deploy,以便对这个过程实行更精细化的控制。skaffold render 可用于构建应用程序映像,输出模板化的 Kubernetes 清单文件,而不是实际部署到你的集群,因而易于与 GitOps 工作流程整合起来。
配置文件让你可以在多个环境中使用同样的 Skaffold 配置,通过面向每个环境的 Skaffold 配置文件来表达差异,并使用当前的 Kubernetes 上下文激活特定的配置文件。这意味着你可以推送映像,并将应用程序部署到全然不同的环境,根本没必要修改 Skaffold 配置。这使得团队中的所有成员都可以轻松共享同样的 Skaffold 项目配置,同时仍能够针对其自己的个人开发环境进行开发,甚至可以使用同样的配置来部署到试运行环境和生产环境。
集群上的应用程序调试
除了应用程序部署外,Skaffold 在许多方面也大有帮助,尤其是调试。Skaffold 默认情况下就支持直接调试在你集群上运行的 Golang、NodeJS、Java 和 Python 代码!
skaffold debug 命令以持续的构建和部署循环运行你的应用程序,并将所有必需的调试端口转发到本地计算机。这使 Skaffold 可以自动为运行中的应用程序添加调试器。
Skaffold 还可以动态处理任何配置更改,为你提供了一个简单而强大的工具来开发 Kubernetes 原生应用程序。skaffold debug 幕后支持 Cloud Code for IntelliJ 和 Cloud Code for Visual Studio Code 中的调试功能。
Cloud Code:IDE 中的 Kubernetes 开发
Cloud Code 随带的工具可以帮助你快速而轻松地编写、部署和调试云原生应用程序。它提供了 Visual Studio Code 和 IntelliJ 等 IDE 的扩展件,使你可以迅速迭代和调试代码,并迅速将代码部署到 Kubernetes。要是觉得听起来与 Skaffold 相似,那是由于两者本来密切相关DDSkaffold 幕后支持使 Cloud Code 如此出色的诸多核心功能!在 Skaffold 的帮助下,本地调试部署到 Kubernetes 的应用程序和持续部署之类的功能直接做入到 Cloud Code 扩展件中。
为了获得 Skaffold 的最佳 IDE 体验,请尝试使用 Cloud Code for Visual Studio Code 或 IntelliJ IDEA!
下一步是什么?