过去几年,为了让Kubernetes做到开箱即用,各种各样的开发工具如洪水般涌向市场。这也不难理解,没有谁愿意错过新的技术趋势。但一味追新,有时候也会付出惨重代价。随着Kubernetes生态的不断完善,有的工具可以继续发展,而有一些工具则被时代抛弃,或者被并入新的产品研发规划中。那么,2021年,作为新手开发者,该如何把握趋势,迈向Kubernetes之旅呢?本文将重点介绍关于Kubernetes的主流应用工具,即Helm、Kustomize和Skaffold。

Helm

Helm是Kubernetes的包管理器,是打包、共享和部署k8s应用的事实标准。Helm允许你把多个YAML配置片段以一致的、结构化的方式组合成一个逻辑包,即 "chart"。这样,开发者在部署应用时可以使用自定义参数,来确保应用程序可配置。另外,你还可以将你的应用程序以版本化和可跟踪的方式发布到私有或公有存储库中。换言之,Helm为我们提供了强大的封装机制,可以确保你的应用程序按预期部署。

另外,通过Helm,你可以去访问广泛公开可用的图表库,并为你的组织提供任何的chart;你也可以根据软件包作者提供的设置来定制应用程序。最重要的是,我们不必担心Kubernetes规范语言的复杂性,Helm能支持Atomic操作,能最大限度地降低应用程序和集群风险。也就是说,Helm为我们提供了一个易于理解和随时可使用的应用程序包。

问题是,Helm有哪些新的应用功能?

在2019年底,我们看到Helm v3正式发布,其中删除了集群侧组件(Tiller)和其他一系列功能。在2020年底,Helm v2被废止,大多数chart已经迁移到v3格式。如果你还在使用Helm v2,一定要合理分配时间,在近期规划升级。

在过去的几个版本中,Helm团队一直忙于解决Helm用户经常抱怨的问题,即YAML模板使用问题。Helm新增的另一个完整的功能是后期渲染功能,可以允许我们使用Kustomize等工具时自定义chart。

最后,但并非最不重要的是,2020年,我们还见证了向更分散方向发展的chart管理方式的转变,并推出了公共Helm Charts的中央存储库。

Helm有很多优势,但有有一个最大的弊端,那就是应用程序的定制化能力仅限于预先存在的配置选项。不仅如此,还得用模板化的方式实现这些自定义选项,非常繁琐,而Kustomize可以弥补这一劣势。

Kustomize

kustomize 是一个更方便我们基于模版进行配置和自定义的工具,允许开发者将Kubernetes应用构建分成一系列的层和补丁,并且具有无限广阔的定制化能力。

Kustomize使用基于YAML的Kubernetes感知的补丁格式来添加/删除/更新应用清单的任何部分。Kustomize在1.14版本上已成为了kubectl的一个组成部分,你所要做的就是执行kubectl -k来调用它。

简单理解,Kustomize是一个更强大的应用工具,它能最大化赋予我们修改Kubernetes应用程序的权限。但同样,Kustomize也有不足之处,那就是无形中加大了开发者的学习曲线。另外,无限制的定制意味着错误配置应用程序的可能性增加。

关于Kustomize,有一个使用Helm的新功能,那就是通过post-render功能来修补现有的Helm chart缺陷,并且不需要分拆,能让版本升级变得更加无缝。

目前,Kubernetes生态系统中的许多工具都已经嵌入了Kustomize,如ArgoCD、Flux和Kubestack编排和持续部署工具。如果你搜索类似Kustomize的补丁功能,会看到很多新功能已经存在于你的CD工具中。

尤其作为新手开发者,如果不熟悉Kubernetes构建过程,就可以考虑使用Kustomize作为一个独立的CLI工具。

Skaffold

创建Kubernetes原生应用程序,通常要花很长的时间跨注册中心构建和管理容器映像、手动更新Kubernetes清单文件,以及每次进行哪怕极小的代码更改都要重新部署其应用程序。如何通过创建一个专有工具来自动执行这些任务,而不是重复管理编辑-调试-部署这样一个步骤。于是,Skaffold由此诞生了。

Skaffold遵循DevOps最佳实践,即在SDLC中保持开发环境和工作流的一致性。Skaffold为开发者带来了工作流和持续集成(CI)和持续部署(CD)能力,可以帮助企业快速构建和部署Kubernetes应用。

在构建部分,Skaffold可以利用Dockerfiles、Buildpacks、Bazel,甚至是自定义脚本,实现快速构建目标。而在部署时,基于Skaffold模板引擎,可以调用kubectl、Helm或Kustomize,实现应用的快速落地。

在2020年,Skaffold团队专注于各种工作流程的适配,努力其他工具更具互操作性。包括在CI/CD和GitOps方面的能力赋予,以及对Python和Java提供更好的支持。

此外,Skaffold现在有一个新的测试版--skaffold debug。基于新版本应用,Skaffold会尝试在自动配置应用程序时可进行远程调试。

总结

总之,当你看到关于Kubernetes的各种应用工具无从下手时,请不必纠结。不妨先看看Kubernetes的主流应用工具,没准已经能满足您的业务需求。比如通过使用Helm,我们可以打包、共享和安装定义好的Kubernetes应用。而使用Kustomize使用补丁,可以修改现有的Kubernetes应用。同时,Skaffold也是一个很受欢迎的工具,可以更好地管理Kubernetes环境。