简而言之,draft 和 helm 或多或少是互补的,而 ksonnet 是正交的,特别是提供了 helm。
在详细说明中,我将把我的答案分为三个主要部分,第一部分描述 draft 和 helm 如何相互作用,第二部分描述 ksonnet 与其他部分是正交的,最后是解释我如何理解这些与 CI/CD 相关的部分。
掌舵和草稿
Helm 和 Draft 是互补的,Helm 可以被认为是 Kubernetes 的包管理系统,它提供了 Draft 提供的部分功能,而 Draft 本身本质上是一个 Kubernetes 应用程序开发工具。
Draft 和 Helm 之间的关系可以概括为:为了实现其简化 Kubernetes 应用程序开发的目标,Draft 会使用从当前应用程序类型推断出的元数据生成一个 Helm 图表(下面将详细介绍),如果没有的话已经存在或使用现有的一个,以便部署/更新您的应用程序的开发版本,而您不必知道它是如何做到的。
用于 Kubernetes 包管理的 Helm
如前所述,Helm 是基于 Kubernetes 的应用程序的包管理系统。它提供以下功能:
- 一种用于定义 Kubernetes 清单的模板方法(称为“图表”)
- 包管理,包括用于托管已发布包的基本包存储库服务。
- 应用程序生命周期管理,包括 Helm 应用程序的部署、更新和清除
- 包依赖项
Helm 采用模板化 YAML 方法来参数化 Kubernetes 清单,并允许在依赖包之间共享和覆盖值。即假设包A依赖包B;包 A 可以重用在包 B 上设置的配置值,并且可以用自己的值覆盖这些参数。也可以使用 Helm 命令行工具覆盖给定部署中所有包的值。
另外值得一提的是,Helm 依赖于名为“Tiller”的集群端组件的可用性来实际执行具体化模板并将生成的 Kubernetes 清单部署到集群的工作。
Kubernetes 应用开发草案
Draft 的目的是通过快速构建和部署运行项目所需的 Helm 图表/包和相应的 docker 映像来dramatically simplify development of Kubernetes applications——前提是存在以下内容:
- Kubernetes 集群
- Helm 的 Tiller pod 安装在 Kubernetes 集群中
- Docker 注册表
draft installation guide 提供了设置这些部件以便自己尝试的详细信息。
Draft 还通过提供高级“打包”格式构建在 Helm 之上,其中包括应用程序 helm 图表和 Dockerfile,后者使其能够构建 docker 映像。
最后,它内置了对特定编程语言的支持,并且在最初使用draft create 创建新的草稿项目时,会在有限程度上尝试推断您正在使用的编程语言和框架。
Ksonnet 用于 Kubernetes 包管理
如前所述,Ksonnet 在许多方面都与 Helm 正交,在包管理方面提供了基本相同的功能,但使用不同的术语 - 请参阅其 core concepts documentation。值得注意的是,它与 Draft 不兼容,也没有解决相同的问题。
我说 Ksonnet 和 Helm 是正交的,因为它们采用相互不兼容的方法来生成和部署 Kubernetes 清单。 Helm 使用模板化的 YAML,而 Ksonnet 使用 "data templating" language called Jsonnet 生成 Kubernetes 清单。此外,Ksonnet 并没有像 Helm 那样构思“依赖”包,而是通过将依赖服务表示为可组合的“原型”来模糊依赖服务之间的界限。最后,Ksonnet 有一个类似于kubectl apply 的apply 子命令,而不是依赖于具体化和部署清单模板的集群端应用程序。
CI/CD
那么这些部分在哪里适合 CI/CD 工作流程?好吧,由于本质上存在两个互不兼容的工具集,让我们逐个考虑它们:
草稿+头盔
根据the Draft design Q&A section,它仅作为一种开发人员工具,旨在从主要希望看到他们的应用程序在开发集群中运行的开发人员那里抽象出处理 kubernetes、helm 和 docker 的大部分复杂性。
考虑到这一点,任何涉及这套工具的 CD 方法都必须执行以下操作:
- 如有必要,使用
docker CLI 构建 docker 映像
- 使用
helm CLI 构建 Helm 包
- 使用
helm CLI 将 Helm 包部署到 Helm 存储库
- 使用
helm CLI 在适当的 staging/prod Kubernetes 集群上安装/更新 Helm 包
Ksonnet
与上面的helm 工作流程相比,Ksonnet CD 工作流程有所简化:
- 如有必要,使用
docker CLI 构建 docker 映像
- 使用
ks CLI 应用 Ksonnet 清单
而使用 Helm,您可以将应用程序的包部署到 Helm 注册表以供重复使用,如果您的 Ksonnet 清单包含可能对另一个基于 Ksonnet 的应用程序有用的 re-usable prototypes,您需要确保它在Ksonnet registry documentation.
中描述的 git repo
这意味着在 CI/CD 中如何处理 Ksonnet 定义在很大程度上取决于您决定将它们存储在哪些 git 存储库中以及它们的结构。