代码之家  ›  专栏  ›  技术社区  ›  Suresh Vishnoi

选秀和掌舵vs Ksonnet?[已关闭]

  •  17
  • Suresh Vishnoi  · 技术社区  · 7 年前

    据我所知,所有这些工具 Draft , Helm Ksonnet 具有重叠功能,例如创建图表以及部署kubernetes配置。

    我知道这些工具的目的是描述和配置应用程序以及k8s环境。

    通过使用草稿,我们可以创建Dockerfile、Chart。然而,我们可以对赫尔姆和科索内做同样的事情。

    我的问题是,如果这些组件在CI/CD中创建管道,那么顺序是什么?

    例如

    草稿->ksonnet>掌舵人

    草稿->舵->ksonnet公司

    1 回复  |  直到 7 年前
        1
  •  42
  •   Wayne Warren    7 年前

    简言之 草稿 掌舵人 或多或少是免费的 ksonnet公司 是正交的,特别是提供了 掌舵人 .

    在详细阐述时,我将把我的答案分为三个主要部分,第一部分描述如何 草稿 掌舵人 互动,第二个描述如何 ksonnet公司 与其他内容是正交的,最后一节解释了我如何理解CI/CD中的这些内容。

    舵手和;草稿

    Helm和Draft是互补的,因为Helm可以被视为Kubernetes的包管理系统,它提供了Draft提供的部分功能,Draft本身本质上是Kubernetes应用程序开发工具。

    Draft和Helm之间的关系可以总结为,为了实现简化Kubernetes应用程序开发的目标,Draft使用从当前应用程序类型推断出的元数据(更多信息,请参见下文)生成掌舵图,前提是当前应用程序类型尚不存在或使用现有应用程序,以便部署/更新应用程序的开发版本,而无需知道它是如何做到这一点的。

    Kubernetes软件包管理负责人

    如前所述,Helm是基于Kubernetes的应用程序的包管理系统。它提供以下功能:

    • 定义Kubernetes清单的模板方法(称为“图表”)
    • 包管理,包括一个基本的包存储库服务,用于托管发布的包。
    • 应用程序生命周期管理,包括部署、更新和清除Helm应用程序
    • 包依赖项

    Helm采用模板化的YAML方法来参数化Kubernetes清单,并允许在依赖包之间共享和重写值。即,假定的包A取决于包B;包A可以重用在包B上设置的配置值,并且可以使用自己的值重写这些参数。还可以使用Helm命令行工具覆盖给定部署中所有包的值。

    还值得一提的是,Helm依赖于其名为“Tiller”的集群端组件的可用性来实际完成具体化模板和将生成的Kubernetes清单部署到集群的工作。

    Kubernetes应用程序开发草案

    草案的目的是 dramatically simplify development of Kubernetes applications 通过快速构建和部署运行项目所需的Helm图表/包和相应的docker映像,前提是存在以下情况:

    • Kubernetes群
    • 安装在Kubernetes集群中的舵杆吊舱
    • Docker注册表

    这个 draft installation guide 提供有关如何设置这些部件以便自己尝试的详细信息。

    Draft还以Helm为基础,提供了一种高级“打包”格式,其中包括应用程序Helm图表和Dockerfile,后者使其能够构建docker图像。

    最后,它内置了对特定编程语言的支持,并将在一定程度上尝试推断您在最初创建新的草案项目时使用的编程语言和框架 draft create .

    Ksonet for Kubernetes包管理

    如前所述,Ksonnet在许多方面都是正交的,在包管理方面提供了本质上相同的特性,这些特性用不同的术语包装——请参见 core concepts documentation . 值得注意的是,它与草案不兼容,也没有解决与草案相同的问题。

    我说Ksonnet和Helm是正交的,因为它们采用互不兼容的方法来生成和部署Kubernetes清单。Helm使用模板化的YAML,而Ksonet使用 "data templating" language called Jsonnet . 此外,与Helm一样,Ksonet没有设想“依赖”包,而是将依赖服务表示为可组合的“原型”,从而模糊了它们之间的界限。最后,与依赖于具体化和部署清单模板的集群端应用程序不同,Ksonnet有一个 apply 子命令类似于 kubectl apply .

    CI/CD

    那么,这些内容在CI/CD工作流中的位置如何?既然基本上有两个互不兼容的工具集,那么让我们逐个考虑它们:

    吃水+掌舵

    根据 the Draft design Q&A section ,它只是作为一种开发人员工具,旨在从主要对在开发集群中运行应用程序感兴趣的开发人员那里抽象出处理kubernetes、helm和docker的复杂性。

    考虑到这一点,任何涉及这套工具的CD方法都必须执行以下操作:

    • 使用 docker CLI(如有必要)
    • 使用 helm CLI
    • 使用将Helm包部署到Helm存储库 掌舵人 CLI
    • 使用在相应的临时/生产Kubernetes群集上安装/更新Helm软件包 掌舵人 CLI

    Ksonnet公司

    掌舵人 上述工作流:

    • 使用 码头工人 CLI(如有必要)
    • 使用 ks CLI

    然而,如果您的Ksonnet清单包含 re-usable prototypes 这可能对另一个基于Ksonnet的应用程序有用,您希望确保它在git repo中可用,如 Ksonnet registry documentation.

    这意味着在CI/CD中如何处理Ksonnet定义在很大程度上取决于您决定将其存储在哪个git repo中以及它们的结构。