Helm 是 Kubernetes 的包管理器,可简化应用程序的部署和管理。
Helm 将应用程序所需的全部内容捆绑至名为“Helm chart”的可复用包中,而无需手动创建和维护数十个独立的配置文件。
Helm 可帮助降低使用 Kubernetes 的复杂性 - Kubernetes 是一个开源平台,可跨多个服务器自动部署和运行容器化应用程序。虽然 Kubernetes 很强大,但它通常需要在 YAML 文件中编写大量详细的配置,指定应用程序的运行方式、连接方式以及需要哪些资源。
开发人员、系统管理员和 DevOps 开发运维工程师手动管理这些配置,尤其是在开发、测试和生产等多个环境中,这很快就会变得非常耗时且容易出错。Helm 通过引入标准化、可重用性和版本控制,以及回滚和特定于环境的定制等功能来应对这一挑战。
容器通常基于 Linux,比传统虚拟机更快、更高效。它们也非常适合微服务架构,其中应用程序被分解为更小的、可独立部署的组件,并且可以根据需要进行扩展。在 Kubernetes 中,这些容器化工作负载在集群上运行;集群是一组机器,由管理系统的控制平面和在整个基础设施中执行应用程序的工作节点组成。
Docker 是 2013 年向公众发布的开源平台,是应用最广泛的容器化工具。如今,容器化已成为开源云原生生态系统的核心部分,能够带来更快的开发、更可靠的部署和更大的运营灵活性。
Kubernetes 通过自动化部署、扩展和资源管理来大规模编排容器。但是,直接管理 Kubernetes 配置的操作极为复杂,且容易出错。Helm 通过简化、标准化和精简容器化应用程序的部署与维护,在此发挥关键作用。
Deis(后被 Microsoft 收购)于 2016 年推出 Helm,成为简化 Kubernetes 应用程序管理的首批工具之一。2018 年,该团队将此项目捐赠给 云原生计算基金会 (CNCF),后者于 2020 年将其认证为正式 CNCF 毕业项目。
Helm 的开源开发进程由 GitHub 主动维护,全球贡献者皆可在此协作推动其发展。官方网站 helm.sh 可提供全面的文档 (doc)、下载程序和资源,以帮助用户快速入门并保持更新。
一个关键的里程碑是 2019 年底发布的 Helm 3。此版本从 Helm 2 中删除了 Tiller 组件,通过直接与 Kubernetes 应用程序编程接口 (API) 交互提高了安全性并简化了访问控制。Helm 3 还增强了升级流程、依赖关系管理和对库图表的支持,使其更加安全、灵活且易于在企业中使用。
Helm 已在整个云原生生态系统中得到广泛采用。根据 CNCF 最近的调查,Helm 是首选 Kubernetes 包管理器,在运行 Kubernetes 的组织中采用率为 75%。1
Artifact Hub(已取代最初的 Helm Hub)托管着数千个 chart,而主流软件供应商通常提供 Helm chart 作为其主要 Kubernetes 分发方式。
Helm 通过将 Kubernetes 清单(配置文件)、配置模板和元数据捆绑至名为“Helm chart”的可复用包中,简化 Kubernetes 应用程序管理。此类 chart 包含针对 Kubernetes 资源(例如部署、服务、入口控制器、持久卷、ConfigMap 和密钥)生成相应 YAML 文件所需的所有规范,相关资源则共同构成应用程序。
“YAML”是首字母缩略词,其全称为“YAML Ain't Markup Language”或“Yet Another Markup Language”。它是一种用于编写配置文件的人性化数据格式,可提供清晰的结构化方式以呈现人员和程序均可读取的信息。
安装 chart 后,Helm 会自动将这类资源应用到目标 Kubernetes 聚类,并内置版本控制、回滚和依赖项管理等支持服务。
Helm 主要作为客户端工具运行,直接与 Kubernetes apiserver 交互以管理应用程序部署:
Helm 客户端是一个命令行 (CLI) 工具,可与 Kubernetes 集群交互并管理图表和发布。该工具是开发人员和运营商日常使用的工具。与 Kubernetes 的原生命令工具 kubectl 不同,Helm 管理整个应用程序,而不是单个组件。
Helm 图表是一种打包格式,其中包含在 Kubernetes 上运行应用程序所需的所有资源定义。图表包括模板、默认配置值和元数据。
Helm 版本是基于 Kubernetes 聚类运行的一个 chart 实例。每个版本都有唯一名称,且可以独立管理。
Helm 存储库是可以共享和分发的图表集合,类似于其他生态系统中的应用程序商店或包库。
Helm 图表是描述一组相关 Kubernetes 资源的文件的集合。图表结构包括:
Helm 的内置回滚功能为生产部署提供了关键的安全网。如果升级失败或导致问题,团队可以使用单个命令立即恢复到以前的工作版本。此功能可缩短与部署相关的事件的平均恢复时间 (MTTR),这是高可用性应用程序和实时 AI 推理服务的基本要求。
Helm chart 和架构可以像任何其他软件工件一样进行版本控制和代码审查。此方法可针对部署提供审核跟踪,保障变更经过合规审批流程。许多组织借助 Helm 和 GitOps 工作流来增强治理能力,确保组织满足采用云原生架构的受监管行业的合规要求。
通过消除 Kubernetes 的复杂性,Helm 支持开发人员专注于应用程序逻辑,而非基础设施配置。团队可以利用预先批准的 chart 进行自助部署,减少对平台团队的依赖,并加快富有竞争力的 AI 和数字化转型计划的开发进程。
组织通常使用 Helm 在开发、暂存和生产环境中管理自定义应用程序。单个图表可以针对每个环境配置不同的资源限制、副本和功能标志。
针对需要在独立命名空间以不同配置多次部署同一应用程序的场景,Helm 的表现尤为出色。例如,SaaS 平台通常借助 Helm 来管理其应用程序的客户特定部署。
Helm 是管理人工智能 (AI) 和机器学习 (ML) 工作负载的理想解决方案,这些工作量通常需要复杂的配置,包括 GPU 资源、专用存储空间、模型服务组件和监控系统。组织使用 Helm 图表来标准化 ML 管道的部署,确保开发和生产集群中的训练和推理工作负载的环境一致性。
Kustomize 是另一个广泛采用的 Kubernetes 配置管理解决方案,虽然采用的方法与 Helm 不同。Helm 使用模板来生成清单,而 Kustomize 使用带有补丁和覆盖的声明式方法来修改基本配置。
Kustomize 更简单,学习成本较低,但缺乏 Helm 的包管理能力、版本控制和回滚功能。许多组织同时使用这两种工具,其中 Kustomize 处理配置变体,而 Helm 管理整个应用程序生命周期。
Kubernetes Operator 是特定于应用程序的控制器,它们可扩展 Kubernetes API 来管理复杂的应用程序。Helm 专注于打包和部署,而 Operator 则提供持续的生命周期管理。它们可以处理特定于应用程序的操作任务,例如备份、扩展和升级。
Helm 更适合一般应用程序的部署和更简单的工作量。同时,运维工具擅长管理具有复杂运维需求的有状态应用程序。许多组织利用 Helm 自行部署运维工具。
使用 IBM® Concert 生成式 AI 驱动的技术自动化平台,简化应用程序管理并获取 AI 生成的洞察分析,以便据此采取行动。
将全栈可观测性与自动化应用资源管理相结合,在性能问题影响客户体验之前将其解决。
了解 IBM Consulting 提供的用于管理复杂、混合和多云环境的高度创新服务。
1. CNCF 2023 年度调查,云原生计算基金会,2023 年