Helm

Helm

在 2016 年,随着 K8s 成为编排领域事实上的标准,很多公司的 PaaS 平台都转向以 K8s 为基础容器化平台,但是 Deis(helm 公司)是一个地地道道的 PaaS 服务商,在这片云原生的红海中步履维艰,幸运的是,凭借敏锐的技术嗅觉最终还是拯救了这个的团队。2016 年底,Deis 开始全面转向 K8s 体系,它不像其它公司一样把 K8s 作为 PaaS 基础设施工具,而是围绕 K8s 产生的编排文件做了应用包管理器 helm。

Helm 是 K8s 的包管理器,Helm chart 用于帮助你定义、安装、更新 K8s 应用,可以处理那些最复杂那种部署情况。在 K8s 中,容器即进程,它解决了如何部署和运行应用的问题。对于任何一个部署在 K8s 的应用而言,通常都可以由几个固定的部分组成:Ingress、Service、Deployment 等。直接使用 K8s 原生的 YAML 定义服务,虽然能一定程度上简化应用的部署,但是对于大部分研发人员来说编写和使用 YAML 依然是一件相对痛苦的事情。Helm 应运而生,Helm 作为 K8s 下的包管理工具,对原生服务定义过程进行了增强,通过模板化,参数化的形式大大简化用户部署 K8s 应用的复杂度。

概念

可以将 Helm 理解为 K8s 的包管理工具,可以方便地发现、共享和使用为 K8s 构建的应用,有点类似于 Ubuntu 的 APT 和 CentOS 中的 yum。Helm chart 是用来封装 K8s 原生应用程序的 yaml 文件,可以在你部署应用的时候自定义应用程序的一些 metadata,便与应用程序的分发。它包含几个基本概念:

  • Chart:一个 Helm 包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含 K8s 集群中的服务定义,类似 Homebrew 中的 formula,APT 的 dpkg 或者 Yum 的 rpm 文件,

  • Release: 在 K8s 集群上运行的 Chart 的一个实例。在同一个集群上,一个 Chart 可以安装很多次。每次安装都会创建一个新的 release。例如一个 MySQL Chart,如果想在服务器上运行两个数据库,就可以把这个 Chart 安装两次。每次安装都会生成自己的 Release,会有自己的 Release 名称。

  • Repository:用于发布和存储 Chart 的仓库。