第一章:Helm 簡介
1.1 為什么需要 Helm ?
- Kubernetes 上的應用對象,都是由特定的資源描述組成,包括 Deployment、Service 等,都保存在各自的文件中或者集中寫在一個配置文件,然后通過
kubectl apply -f部署。
- 如果應用只由一個或幾個這樣的服務組成,上面的部署方式就足夠了。
- 但是對于一個復雜的應用,會有很多類似上面的資源描述文件,如:微服務架構應用,組成應用的服務可能多達幾十、上百個,如果有更新或回滾應用的需求,可能要修改和維護所涉及到大量的資源文件,而這種組織和管理應用的方式就顯得力不從心了。并且由于缺少對發布過的應用進行版本管理和控制,使得 Kubernetes 上的應用維護和更新面臨諸多的挑戰,主要面臨以下的問題:
- ① 如何將這些服務作為一個整體管理?
- ② 這些資源文件如何高效復用?
- ③ 應用級別的版本如何管理?
1.2 Helm 介紹
- 是 Kubernetes 的包管理工具,就像 Linux 下的包管理器,如:yum、apt 等,可以很方便的將之前打包好的 yaml 文件部署到 Kubernetes 上。
1.3 Helm 的三大概念
Chart代表著 Helm 包。它包含在 Kubernetes 集群內部運行應用程序,工具或服務所需的所有資源定義。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等價物。
Repository(倉庫)是用來存放和共享 charts 的地方。它就像 Perl 的 或是 Fedora 的 ,只不過它是供 Kubernetes 包所使用的。
Release是運行在 Kubernetes 集群中的 chart 的實例。一個 chart 通常可以在同一個集群中安裝多次。每一次安裝都會創建一個新的 release 。以 MySQL chart為例,如果你想在你的集群中運行兩個數據庫,你可以安裝該 chart 兩次。每一個數據庫都會擁有它自己的 release 和 release name 。
- Helm 安裝 charts 到 Kubernetes 集群中,每次安裝都會創建一個新的 release。你可以在 Helm 的 chart repositories 中尋找新的 chart。
- 可以類比 Docker 來理解,Chart 就類似于 Docker 中的鏡像(Docker 中的鏡像就是一系列文件的集合,Chart 也是一系列文件的集合),Repository(倉庫)就類似于 Docker Hub,Release 就類似于 Docker 中的容器(可以根據鏡像 run 多個容器)。
第二章:Helm 安裝
2.1 Helm 安裝的提前準備
- 想成功和正確地使用 Helm ,需要以下前置條件:
- ① 一個 Kubernetes 集群。
- ② 確定你安裝版本的安全配置。
- ③ 安裝和配置 Helm 。
- 安裝或者使用現有的 Kubernetes 集群:
- 使用 Helm ,需要一個 Kubernetes 集群。對于 Helm 的最新版本,我們建議使用 Kubernetes 的最新穩定版, 在大多數情況下,它是
倒數第二個次版本。
- 應該有一個本地的
kubectl
2.2 Helm 安裝
- 下載 helm :
wget //get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz
- 解壓 Helm :
tar -zxvf helm-v3.6.3-linux-amd64.tar.gz
- 移動到指定目錄:
mv linux-amd64/helm /usr/local/bin/helm
- helm 命令補全:
helm completion bash | sudo tee /etc/bash_completion.d/helm > /dev/null
source /usr/share/bash-completion/bash_completion
2.3 Helm 常用命令

2.4 Helm 的 chart 倉庫
- 微軟倉庫://mirror.azure.cn/kubernetes/charts,推薦。
- 阿里云倉庫://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts。
2.4.1 添加 chart 倉庫
helm repo add 倉庫名 倉庫URL地址
第三章:Helm 的基本使用
3.1 使用 chart 部署一個應用
3.1.1 查找 chart
# 在Artifact Hub //artifacthub.io/ 或自己的hub實例中搜索chart
helm search hub xxx
# 在本地 helm 客戶端中的倉庫中搜索chart
helm search repo xxx
helm search repo mysql
3.1.2 查看 chart 信息
# 檢查chart(目錄、文件或URL)并顯示所有的內容(values.yaml, Chart.yaml, README)
helm show all [CHART]
# 檢查chart(目錄、文件或URL)并顯示Chart.yaml文件的內容
helm show chart [CHART]
# 檢查chart(目錄、文件或URL)并顯示values.yaml文件的內容
helm show values [CHART]
# 檢查chart(目錄、文件或URL)并顯示README文件內容
helm show readme [CHART] [flags]
3.1.3 安裝 chart ,形成 release
helm install [NAME] [CHART]
注意:
● 每執行一次 install 命令,就會形成一個 release 。
● mysql 是有狀態的應用,如果要想執行成功,必須設置持久化存儲,并設置默認的動態供應。
3.1.4 查看 release 列表
helm list
狀態可能是 unknown, deployed, uninstalled, superseded, failed, uninstalling, pending-install, pending-upgrade 或 pending-rollback 。
3.1.5 查看 release 狀態
helm status RELEASE_NAME
狀態包括:
● 最后部署時間
● 發布版本所在的k8s命名空間
● 發布狀態(可以是: unknown, deployed, uninstalled, superseded, failed, uninstalling, pending-install, pending-upgrade 或 pending-rollback)
● 發布版本修訂
● 發布版本描述(可以是完成信息或錯誤信息,需要用--show-desc啟用)
● 列舉版本包含的資源,按類型排序
● 最后一次測試套件運行的詳細信息(如果使用)
● chart提供的額外的注釋
3.2 安裝前自定義chart配置選項
3.2.1 概述
- 自定義選項是因為并不是所有的 chart 都能按照默認配置運行成功,可能會需要一些環境依賴,例如 PV 。
- 所以我們需要自定義 chart 配置選項,安裝過程中有兩種方法可以傳遞配置數據:
- ①
--values(或-f):指定帶有覆蓋的 YAML 文件。這里可以多次指定,最右邊的文件優先。
- ②
--set:在命令行上指定替代。如果兩種都用,那么--set的優先級高。
3.3 構建一個 Chart
3.3.1 Chart 的文件結構
- chart 是一個組織在文件目錄中的集合。目錄名稱就是 chart 名稱(沒有版本信息),因此描述 wordpress 的 chart 可以存儲在
wordpress/目錄中。
wordpress/
├── charts # 包含chart依賴的其他chart
├── Chart.yaml # 用于描述這個 Chart 的基本信息,包括名字、描述信息以及版本等。
├── templates # 模板目錄, 當和 values 結合時,可生成有效的Kubernetes manifest文件
│ ├── deployment.yaml
│ ├── _helpers.tpl # 放置可以通過 chart 復用的模板輔助對象
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt # 用于介紹 Chart 幫助信息, helm install 部署后展示給用戶。例如:如何使用這個 Chart、列出缺省的設置等。
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml # chart 默認的配置值
3.3.2 安裝自定義 chart
helm install [NAME] [CHART]
3.3.3 對自定義 chart 進行打包
helm package [CHART_PATH]
3.3.4 升級
helm upgrade --set xxx=xxx [RELEASE] [CHART]
3.3.5 回滾
helm rollback <RELEASE> [REVISION]
3.3.5 卸載
helm uninstall RELEASE_NAME