Draft and Helm vs Ksonnet?
Draft and Helm vs Ksonnet?
据我所知,所有这些工具 Draft,Helm and Ksonnet 都具有重叠的功能,例如创建图表以及部署 kubernetes 配置。
我知道这些工具的目的是描述和配置应用程序以及 k8s 环境。
By using Draft we can create Dockerfile, Chart. Nevertheless we can do same thing with Helm and Ksonnet.
我的问题是,如果这些组件在 CI/CD 中创建管道,那么顺序是什么?
例如,
草案 -> ksonnet > 掌舵
或
草案 -> 掌舵 -> ksonnet
简而言之,draft和helm或多或少是互补的,ksonnet是正交的,专门提供 helm.
的替代方案
在阐述过程中,我会将我的回答分为三个主要部分,第一部分描述了 draft 和 helm 是如何相互作用的,第二个描述 ksonnet 如何与其他正交,最后一个部分解释我如何理解这些关于 CI/CD.
掌舵和吃水
Helm 和 Draft 是互补的,因为 Helm 可以被认为是 Kubernetes 的包管理系统,它提供了 Draft 提供的一部分功能,而 Draft 本身本质上是一个 Kubernetes 应用程序开发工具。
Draft 和 Helm 之间的关系可以通过以下几点来概括:为了追求简化 Kubernetes 应用程序开发的目标,Draft 使用从您当前的应用程序类型推断出的元数据生成 Helm 图表(更多内容见下文)如果一个尚不存在或使用现有版本,以便 deploy/update 您的应用程序的开发版本,而您无需了解它是如何做到的。
用于 Kubernetes 包管理的 Helm
如前所述,Helm 是 Kubernetes-based 应用程序的包管理系统。它提供以下功能:
- 一种用于定义 Kubernetes 清单的模板方法(称为 "charts")
- 包管理,包括用于托管已发布包的基本包存储库服务。
- 应用程序生命周期管理,包括 Helm 应用程序的部署、更新和清除
- 包依赖项
Helm 采用模板化的 YAML 方法来参数化 Kubernetes 清单,并允许在依赖包之间共享和覆盖值。即,假定包 A 依赖于包 B;包 A 可以 re-use 在包 B 上设置配置值,并且它可以用自己的值覆盖这些参数。也可以使用 Helm 命令行工具覆盖给定部署中所有包的值。
另外值得一提的是,Helm 依赖其名为 "Tiller" 的 cluster-side 组件的可用性来实际完成具体化模板和将生成的 Kubernetes 清单部署到集群的工作。
Kubernetes 应用程序开发草案
Draft 的目的是 dramatically simplify development of Kubernetes applications 通过快速构建和部署 Helm charts/packages 和 运行 项目所需的相应 docker 映像 -- 前提是以下存在:
- 一个 Kubernetes 集群
- 安装在 Kubernetes 集群中的 Helm 的 Tiller pod
- 一个 Docker 注册表
draft installation guide 提供了设置这些部分的详细信息以供您自己尝试。
Draft 还通过提供 high-level "packaging" 格式建立在 Helm 之上,该格式包括应用程序 helm 图表和 Docker 文件,后者使其能够构建 docker 图片。
最后,它 built-in 支持特定的编程语言,并且会在有限的范围内尝试推断您在最初使用 [=10 创建新的 Draft 项目时使用的编程语言和框架=].
用于 Kubernetes 包管理的 Ksonnet
如前所述,Ksonnet 在许多方面与 Helm 正交,提供基本相同的包管理功能,但用不同的术语包装——请参阅它的 core concepts documentation。值得注意的是,它与草案不兼容,也没有解决与草案相同的问题。
我说 Ksonnet 和 Helm 是正交的,因为它们采用相互不兼容的方法来生成和部署 Kubernetes 清单。 Helm 使用模板化的 YAML,而 Ksonnet 使用 "data templating" language called Jsonnet 生成 Kubernetes 清单。此外,Ksonnet 不像 Helm 那样构想 "dependent" 包,而是通过将依赖服务表示为可组合 "prototypes" 来模糊依赖服务之间的界限。最后,Ksonnet 没有依赖于具体化和部署清单模板的 cluster-side 应用程序,而是有一个类似于 kubectl apply
.
的 apply
子命令
CI/CD
那么这些部分在什么地方适合 CI/CD 工作流程?好吧,因为本质上有两个互不兼容的工具集,让我们在 case-by-case 的基础上考虑它们:
草图 + 头盔
根据 the Draft design Q&A section,它仅作为一种开发人员工具,旨在从主要对查看其应用程序感兴趣的开发人员那里抽象出处理 kubernetes、helm 和 docker 的大部分复杂性 运行 在开发集群中。
考虑到这一点,任何涉及这套工具的 CD 方法都必须执行以下操作:
- 构建 docker 个图像使用
docker
必要时使用 CLI
- 使用
helm
CLI 构建 Helm 包
- 使用
helm
CLI 将 Helm 包部署到 Helm 存储库
- Install/update Helm 包在适当的 staging/prod Kubernetes 集群上使用
helm
CLI
Ksonnet
与上述 helm
工作流程相比,Ksonnet CD 工作流程有所简化:
- 如有必要,使用
docker
CLI 构建 docker 个图像
- 使用
ks
CLI 应用 Ksonnet 清单
而使用 Helm,如果您的 Ksonnet 清单包含 re-usable prototypes that might be of use to another Ksonnet-based application you would want to ensure it is available in a git repo as described in the Ksonnet registry documentation.
,您可以将应用程序的包部署到 re-use 的 Helm 注册表
这意味着 CI/CD 中如何处理 Ksonnet 定义在很大程度上取决于您决定将它们存储在哪个 git 存储库中以及它们的结构。
据我所知,所有这些工具 Draft,Helm and Ksonnet 都具有重叠的功能,例如创建图表以及部署 kubernetes 配置。
我知道这些工具的目的是描述和配置应用程序以及 k8s 环境。
By using Draft we can create Dockerfile, Chart. Nevertheless we can do same thing with Helm and Ksonnet.
我的问题是,如果这些组件在 CI/CD 中创建管道,那么顺序是什么?
例如,
草案 -> ksonnet > 掌舵 或
草案 -> 掌舵 -> ksonnet
简而言之,draft和helm或多或少是互补的,ksonnet是正交的,专门提供 helm.
的替代方案在阐述过程中,我会将我的回答分为三个主要部分,第一部分描述了 draft 和 helm 是如何相互作用的,第二个描述 ksonnet 如何与其他正交,最后一个部分解释我如何理解这些关于 CI/CD.
掌舵和吃水
Helm 和 Draft 是互补的,因为 Helm 可以被认为是 Kubernetes 的包管理系统,它提供了 Draft 提供的一部分功能,而 Draft 本身本质上是一个 Kubernetes 应用程序开发工具。
Draft 和 Helm 之间的关系可以通过以下几点来概括:为了追求简化 Kubernetes 应用程序开发的目标,Draft 使用从您当前的应用程序类型推断出的元数据生成 Helm 图表(更多内容见下文)如果一个尚不存在或使用现有版本,以便 deploy/update 您的应用程序的开发版本,而您无需了解它是如何做到的。
用于 Kubernetes 包管理的 Helm
如前所述,Helm 是 Kubernetes-based 应用程序的包管理系统。它提供以下功能:
- 一种用于定义 Kubernetes 清单的模板方法(称为 "charts")
- 包管理,包括用于托管已发布包的基本包存储库服务。
- 应用程序生命周期管理,包括 Helm 应用程序的部署、更新和清除
- 包依赖项
Helm 采用模板化的 YAML 方法来参数化 Kubernetes 清单,并允许在依赖包之间共享和覆盖值。即,假定包 A 依赖于包 B;包 A 可以 re-use 在包 B 上设置配置值,并且它可以用自己的值覆盖这些参数。也可以使用 Helm 命令行工具覆盖给定部署中所有包的值。
另外值得一提的是,Helm 依赖其名为 "Tiller" 的 cluster-side 组件的可用性来实际完成具体化模板和将生成的 Kubernetes 清单部署到集群的工作。
Kubernetes 应用程序开发草案
Draft 的目的是 dramatically simplify development of Kubernetes applications 通过快速构建和部署 Helm charts/packages 和 运行 项目所需的相应 docker 映像 -- 前提是以下存在:
- 一个 Kubernetes 集群
- 安装在 Kubernetes 集群中的 Helm 的 Tiller pod
- 一个 Docker 注册表
draft installation guide 提供了设置这些部分的详细信息以供您自己尝试。
Draft 还通过提供 high-level "packaging" 格式建立在 Helm 之上,该格式包括应用程序 helm 图表和 Docker 文件,后者使其能够构建 docker 图片。
最后,它 built-in 支持特定的编程语言,并且会在有限的范围内尝试推断您在最初使用 [=10 创建新的 Draft 项目时使用的编程语言和框架=].
用于 Kubernetes 包管理的 Ksonnet
如前所述,Ksonnet 在许多方面与 Helm 正交,提供基本相同的包管理功能,但用不同的术语包装——请参阅它的 core concepts documentation。值得注意的是,它与草案不兼容,也没有解决与草案相同的问题。
我说 Ksonnet 和 Helm 是正交的,因为它们采用相互不兼容的方法来生成和部署 Kubernetes 清单。 Helm 使用模板化的 YAML,而 Ksonnet 使用 "data templating" language called Jsonnet 生成 Kubernetes 清单。此外,Ksonnet 不像 Helm 那样构想 "dependent" 包,而是通过将依赖服务表示为可组合 "prototypes" 来模糊依赖服务之间的界限。最后,Ksonnet 没有依赖于具体化和部署清单模板的 cluster-side 应用程序,而是有一个类似于 kubectl apply
.
apply
子命令
CI/CD
那么这些部分在什么地方适合 CI/CD 工作流程?好吧,因为本质上有两个互不兼容的工具集,让我们在 case-by-case 的基础上考虑它们:
草图 + 头盔
根据 the Draft design Q&A section,它仅作为一种开发人员工具,旨在从主要对查看其应用程序感兴趣的开发人员那里抽象出处理 kubernetes、helm 和 docker 的大部分复杂性 运行 在开发集群中。
考虑到这一点,任何涉及这套工具的 CD 方法都必须执行以下操作:
- 构建 docker 个图像使用
docker
必要时使用 CLI - 使用
helm
CLI 构建 Helm 包
- 使用
helm
CLI 将 Helm 包部署到 Helm 存储库
- Install/update Helm 包在适当的 staging/prod Kubernetes 集群上使用
helm
CLI
Ksonnet
与上述 helm
工作流程相比,Ksonnet CD 工作流程有所简化:
- 如有必要,使用
docker
CLI 构建 docker 个图像 - 使用
ks
CLI 应用 Ksonnet 清单
而使用 Helm,如果您的 Ksonnet 清单包含 re-usable prototypes that might be of use to another Ksonnet-based application you would want to ensure it is available in a git repo as described in the Ksonnet registry documentation.
,您可以将应用程序的包部署到 re-use 的 Helm 注册表这意味着 CI/CD 中如何处理 Ksonnet 定义在很大程度上取决于您决定将它们存储在哪个 git 存储库中以及它们的结构。