一、Helm介绍:
Helm是一款强大而灵活的 Kubernetes 软件包管理和运维工具,类似于apt、yum等包管理工具。运用Helm可以极大的简化Kubernetes应用部署。我使用的是Helm3,相比于Helm2其最大的变化是去掉了Tiller,使用起来更加方便。
Helm是基于kubernetes 的包管理器。它之于 kubernetes 就如 yum 之于 centos,pip 之于 python,npm 之于 javascript
Helm: Kubernetes的应用打包工具,也是命令行工具的名称。
Helm CLI:是 Helm 客户端,可以在本地执行
Tiller: Helm的服务端,部署在Kubernetes集群中,用于处理Helm的相关命令。
Helm具有如下功能:
- 创建新的chart
- chart打包成tgz格式(chart是Helm的应用打包格式)
- 上传chart到chart仓库或从仓库中下载chart
- 在Kubernetes集群中安装或卸载chart
- 管理用Helm安装的chart的发布周期
二、Chart介绍
Helm采用了Go语言的模板来编写chart。chart是Helm的应用打包格式,是一系列用于描述k8s资源相关文件的集合,由一组文件和目录构成,通常整个chart被打成tar包,而且标注上版本信息,便于Helm部署。
其中最重要的是模板,模板中定义了 Kubernetes 各类资源的配置信息,Helm 在部署时通过 values.yaml 实例化模板。
单个的 chart 可以非常简单,只用于部署一个服务,比如 Memcached;chart 也可以很复杂,部署整个应用,比如包含 HTTP Servers、 Database、消息中间件、cache 等。
三、Chart包的目录结构
values.yaml (此chart的默认配置值,可以被templates内的yaml文件使用)
chart.yaml (描述 chart 概要信息的YAML 文件,是 chart 所必需的)
apiVersion: # 图表API版本,始终为“v1”(必需)
name: # 图表的名称(必需)
version: # Chart的版本号,版本号必须符合 SemVer 2:http://semver.org/(语义化版本规范)(必需)
kubeVersion: # 一系列兼容的Kubernetes版本(可选)
description: # Chart的简要描述,本项目的一句话描述(可选)
keywords:
- # 有关此项目的关键字列表,便于检索(可选)
home: # 此项目主页的URL(可选)
sources:
- # 指向此项目源代码的URL列表(可选)
maintainers: # 维护人员信息(可选)
- name: # 维护者名称(每个维护者必须填写)
email: # 维护者的电子邮件(每个维护者可选)
url: # 维护者的URL(每个维护者可选)
engine: gotpl # 模板引擎的名称(可选,默认为gotpl)
icon: # 要用作图标的SVG或PNG图像的URL(可选)
appVersion: # 包含的应用程序版本(可选)。这不必是SemVer
deprecated: # 此“chart”是否已弃用(可选,布尔值)
tillerVersion: 此“chart”所需的“Tiller”版本。这应该表示为SemVer范围:“>2.0.0”(可选)
apiVersion,name 和 version 是必填项,其他都是可选。
templates:chart包内各种资源对象的模板。其中最重要的是“deployment.yaml”和“service.yaml”,分别是部署和服务文件. "helpers.tpl"用来定义变量,"ingress.yaml"是对外接口
templates目录 各类Kubernetes资源的配置模板都放置在这里。Helm会将values.yaml中的参数值注入到模板中生成标准的YAML配置文件
一个 chart 被 Helm 运行后将会生成对应的一个 release;
chart 和 release 的关系可以用代码和进程的关系来类比。chart 是打包了 k8s 资源的集合(比如 deployment、service 等),而 release 则是在 Helm 中运行的集合实体(比如 values )
Helm 由客户端和 Tiller 服务器组成。客户端负责管理 chart,服务器负责管理 release。