三分鐘入門(mén)Helm工具
相關(guān)組件
helm 是一個(gè)命令行工具,用于本地開(kāi)發(fā)及管理chart,chart倉(cāng)庫(kù)管理等。
helm 本質(zhì)就是一個(gè)K8s包管理器。
優(yōu)點(diǎn)
- 簡(jiǎn)化部署 :Helm允許使用單個(gè)命令輕松部署和管理應(yīng)用程序,從而簡(jiǎn)化了整個(gè)部署過(guò)程;
- 高度可配置:Helm Charts提供了高度可配置的選項(xiàng),可以輕松自定義和修改應(yīng)用程序的部署配置;
- 版本控制 :Helm允許管理應(yīng)用程序的多個(gè)版本,從而輕松實(shí)現(xiàn)版本控制和回滾;
- 模板化:Helm Charts使用YAML模板來(lái)定義Kubernetes對(duì)象的配置,從而簡(jiǎn)化了配置過(guò)程,并提高了可重復(fù)性和可擴(kuò)展性;
- 應(yīng)用程序庫(kù):Helm具有應(yīng)用程序庫(kù)的概念,可以輕松地共享和重用Helm Charts,從而簡(jiǎn)化了多個(gè)應(yīng)用程序的部署和管理;
- 插件系統(tǒng):Helm擁有一個(gè)強(qiáng)大的插件系統(tǒng),允許您擴(kuò)展和定制Helm的功能,以滿足特定的需求和要求。
工作流程(v3)
圖片
開(kāi)發(fā)者首先創(chuàng)建并編輯chart的配置;
接著打包并發(fā)布至Helm的倉(cāng)庫(kù)(Repository);
當(dāng)管理員使用helm命令安裝時(shí),相關(guān)的依賴會(huì)從倉(cāng)庫(kù)下載;
接著helm會(huì)根據(jù)下載的配置部署資源至k8s;
Tiller (helm3 已經(jīng)移除 helm直接和k8s交互)
Helm 的服務(wù)端。Tiller 負(fù)責(zé)接收 Helm 的請(qǐng)求,與 k8s 的 apiserver 交互,根據(jù)chart 來(lái)生成一個(gè) release 并管理 release 部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的請(qǐng)求,并根據(jù) Chart 生成 Kubernetes 的部署文件( Helm 稱為 Release ),然后提交給 Kubernetes 創(chuàng)建應(yīng)用。Tiller 還提供了 Release 的升級(jí)、刪除、回滾等一系列功能。
chart
Helm 的軟件包,采用 TAR 格式。類(lèi)似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一組定義 Kubernetes 資源相關(guān)的 YAML 文件。
release
使用 helm install 命令在 Kubernetes 集群中部署的 Chart 稱為 Release。
Repoistory
Helm chart 的倉(cāng)庫(kù),Helm 客戶端通過(guò) HTTP 協(xié)議來(lái)訪問(wèn)存儲(chǔ)庫(kù)中 chart 的索引文件和壓縮包 Repository 本質(zhì)上是一個(gè) Web 服務(wù)器,該服務(wù)器保存了一系列的 Chart 軟件包以供用戶下載,并且提供了一個(gè)該 Repository 的 Chart 包的清單文件以供查詢。Helm 可以同時(shí)管理多個(gè)不同的 Repository。
流程相關(guān)
Chart Install 過(guò)程:
1:Helm從指定的目錄或者tgz文件中解析出Chart結(jié)構(gòu)信息
2:Helm將指定的Chart結(jié)構(gòu)和Values信息通過(guò)gRPC傳遞給Tiller
3:Tiller根據(jù)Chart和Values生成一個(gè)Release
4:Tiller將Release發(fā)送給Kubernetes用于生成Release
Chart Update過(guò)程:
1:Helm從指定的目錄或者tgz文件中解析出Chart結(jié)構(gòu)信息
2:Helm將要更新的Release的名稱和Chart結(jié)構(gòu),Values信息傳遞給Tiller
3:Tiller生成Release并更新指定名稱的Release的History
4:Tiller將Release發(fā)送給Kubernetes用于更新Release
Chart Rollback過(guò)程:
1:Helm將要回滾的Release的名稱傳遞給Tiller
2:Tiller根據(jù)Release的名稱查找History
3:Tiller從History中獲取上一個(gè)Release
4:Tiller將上一個(gè)Release發(fā)送給Kubernetes用于替換當(dāng)前Release
安裝
github 地址:
https://github.com/helm/helm/releases
Helm 客戶端
k8s所有節(jié)點(diǎn)
yum install -y socat
主節(jié)點(diǎn)
wget https://get.helm.sh/helm-v3.4.0-linux-amd64.tar.gz
tar xf helm-v3.4.1-linux-amd64
ln -s /usr/local/linux-amd64/helm /usr/local/bin/helm
倉(cāng)庫(kù)配置
# 添加公用的倉(cāng)庫(kù)
[bigdata@k8s-master module]$ helm repo add bitnami https://charts.bitnami.com/bitnami
# 配置helm阿里源地址
[bigdata@k8s-master module]$ helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update helm repo llist
使用
安裝一個(gè)nginx:
helm create nginx
tree nginx
圖片
nginx/
├── charts #依賴其他包的charts文件
├── Chart.yaml # 該chart的描述文件,包括ico地址,版本信息等
├── templates #存放k8s模板文件目錄
│ ├── deployment.yaml #創(chuàng)建k8s資源的yaml 模板
│ ├── _helpers.tpl #下劃線開(kāi)頭的文件,可以被其他模板引用.
│ ├── hpa.yaml # 配置服務(wù)資源CPU 內(nèi)存
│ ├── ingress.yaml # ingress 配合service域名訪問(wèn)的配置
│ ├── NOTES.txt #說(shuō)明文件,helm install之后展示給用戶看的內(nèi)容
│ ├── service.yaml #kubernetes Serivce yaml 模板
└── values.yaml #給模板文件使用的變量
values.yaml #給模板文件使用的變量。
修改values.yam 里的service的type為 NodePort。
安裝chart任務(wù) (注意后面有個(gè)點(diǎn))
helm install -f values.yaml nginx1 .
查詢r(jià)elease
helm ls helm list
刪除release
helm delete nginx1