一、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。
