- Helm 簡介
- 我們可以將helm看作Kubernetes下的yum(centos 下負責安裝包管理的工具)。helm是一個用於Kubernetes包管理器,每一個包稱為chart,一個chart是一個目錄(一般會打包為name-version.tgz包,便於傳輸管理)。
- helm提供應用部署、刪除、升級、回滾等功能。
- Helm 組件及相關術語
- Helm
- helm是命令行下的客戶端工具。主要用於kubernetes應用程序chart的創建、打包、創建、和管理本地和遠程的chart倉庫。
- Tiller
- tiller是helm的服務器,部署在kubernetes集群中,tiller用於接收helm 的請求。並根據chart生成kunernetes的部署文件(helm稱為release),然后交給kubernetes創建應用。tiller還提供release的升級、刪除、回滾等一系列功能。
- Chart
- chart是helm的軟件包,采用tar格式。 其中包含一組kubernetes資源相關的yaml文件。
- Repoistory
- repoistory是helm的軟件倉庫,repoistory本質上是一個web服務器。該服務器保存了一系列chart軟件包以給用戶下載,並提供了一個該repoistory的chart包的清單以供查詢。helm可以同時管理多個不同的repoistory。
- Release
- 使用helm install 命令在kubernetes集群部署的chart稱為release。
- 注意:helm提到的release和通常概念的版本不同,這里的release可以理解為helm使用chart打包部署的一個應用實例。
- Helm
- Helm 工作原理
- Chart install 過程:
- helm從指定的目錄或者.tgz文件解析出chart結構信息。
- helm將指定的chart結構和values信息通過grpc傳遞給tiller。
- tiller根據chart和values生成一個relesae。
- tiller將release傳遞給kunernetes用於生成release。
- Chart Update過程:
- helm從指定的目錄或者.tgz文件解析出chart結構信息。
- helm將要更新的relsase的名稱、結構信息、values信息傳遞給tiller。
- tiller生成release並更新指定名稱的release的history。
- tiller將release發送給kubernetes用於更新release。
- Chart Rollback過程:
- helm將要回滾的release名稱傳遞給tiller。
- tiller將根據release名稱查找history。
- tiller將從history中獲取一個release。
- tiller將上一個release發送給kubernetes用於替換當前的release。
- Helm 部署
- helm 客戶端安裝
- helm init #安裝helm客戶端(默認是谷歌鏡像)
- helm init --client-only --stable-repo-url https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/ #使用國內鏡像安裝
- helm 服務端安裝tiller
- 給 tiller 授權
- 驗證 tiller是否安裝成功
- kubectl -n kube-system get pods|grep tille
- helm version
- 卸載 helm 服務端 tiller
- helm reset --force
- helm 使用
- 更換倉庫:
- 若遇到Unable to get an update from the “stable” chart repository (https://kubernetes-charts.storage.googleapis.com) 錯誤 手動更換stable 存儲庫為阿里雲的存儲庫
- helm repo remove stable #移除原先的倉庫。
- helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts #添加新的倉庫地址
- helm repo update #更新倉庫
- 若遇到Unable to get an update from the “stable” chart repository (https://kubernetes-charts.storage.googleapis.com) 錯誤 手動更換stable 存儲庫為阿里雲的存儲庫
- 查看存儲庫中可用的所有 helm chart:
- helm search #查看所有chart
- 更新 charts 列表:
- helm repo update #更新charts列表
- 安裝 charts
- Monocular是一個開源軟件,用於管理kubernetes上以helm charts形式創建的服務。可以通過它來安裝
- helm charts
- Nginx ingress controller
- Monocular是一個開源軟件,用於管理kubernetes上以helm charts形式創建的服務。可以通過它來安裝
- 查看 kubernetes 已經安裝的 charts
- helm list #查看charts列表
- 刪除安裝的 chart
- helm delete xxx #刪除指定的chart
- 更換倉庫:
- helm 客戶端安裝
- Helm Chart 結構
- chart 目錄結構
-
myapp/ # Chart 目錄
├── charts # 這個 charts 依賴的其他 charts,始終被安裝
├── Chart.yaml # 描述這個 Chart 的相關信息、包括名字、描述信息、版本等
├── LICENSE # [可選]協議
├── Requirements.yaml # [可選] 用於存放當前Chart依賴的其它Chart的說明文件
├── Readme.md # [可選]當前chart的介紹
├── templates # 模板目錄
│ ├── deployment.yaml # deployment 控制器的 Go 模板文件
│ ├── _helpers.tpl # 以 _ 開頭的文件不會部署到 k8s 上,可用於定制通用信息
│ ├── ingress.yaml # ingress 的模板文件
│ ├── NOTES.txt # Chart 部署到集群后的一些信息,例如:如何使用、列出缺省值
│ ├── service.yaml # service 的 Go 模板文件
│ ├── secrets.yaml # secrets的 Go 模板文件
│ └── tests
│ └── test-connection.yaml
└── values.yaml # 模板的值文件,這些值會在安裝時應用到 GO 模板生成部署文件 - Chart.yaml 文件
- name : [必須] chart的名稱
- apiVersion :[可選] api版本和版本號
- version : [必須] chart的版本號,版本號必須符合SemVer 2 簡書 https://www.jianshu.com/p/e2619a7aa60e
- description : [可選] 文檔描述
- keywords:
- - [可選]關鍵字列表
- home : [可選] 項目地址
- sources :
- - [可選]當前chart的下載地址列表
- Chart 目錄和 Requirements.yaml
- chart支持兩種方式表示依賴關系,可以使用Requirements.yaml或直接將依賴的chart放置到chart目錄中。
- dependencies:
- name: example
version: 1.2.3
repository: http://example.com/charts
- name: Chart名稱
version: Chart版本
repository: 該Chart所在的倉庫地址
- templates 目錄
- templates目錄存放了kubernetes部署文件的模板。
- yaml文件模板遵循 go template語法 官網鏈接 https://golang.org/pkg/text/template/
- 模板語法擴展了 golang/text/template的語法:
-
- chart 目錄結構
# 這種方式定義的模版,會去除test模版尾部所有的空行
{{- define "test"}}
模版內容
{{- end}}
# 去除test模版頭部的第一個空行
{{- template "test" }}
{{- define "test"}}
模版內容
{{- end}}
# 去除test模版頭部的第一個空行
{{- template "test" }}
- 檢查配置和模板是否有效
- helm install --dry-run --debug <chart_dir> #驗證配置的模板變量與渲染的yaml是否一致
- 部署到kubernetes
- 在mychart目錄下執行命令
- helm install . #安裝到默認命名空間
- helm install
--namespace gitlab --name gitlab-runner *.tgz#安裝到指定命名空間
- 查看部署的relaese
- helm list #查看relaese list
- 刪除部署的relaese
- helm delete XXX #執行刪除命令
- 查看部署relaese相信信息
- helm get XXX #查看詳細信息
- 在mychart目錄下執行命令
- 打包分享
- 我們可以修改chart.yaml中的配置信息,然后使用下列命令將chart打包成一個壓縮文 件。
- helm pakaage . #打包文件,得到xxx-version.tgz
- 將應用包發布到 Repository
- 雖然我們打包了 chart 並且發布到了helm本地目錄中,但通過helm search找不到剛剛生成的chart包。
- helm search XXX #查找包
- 這是因為 repository目錄中的 chart包還沒有被helm管理。但是通過helm repo list 命令可以查看目前 helm中配置的repository信息。
- helm repo list #查看repository信息
- 注意:在新版中,使用helm init 命令會默認配置一個名為local的本地倉庫。
- 雖然我們打包了 chart 並且發布到了helm本地目錄中,但通過helm search找不到剛剛生成的chart包。
- 第三方的chart存儲庫
- 隨着helm的普及,可以使用的第三方chart庫也越來越多,使用以下命令添加第三方存儲庫
- helm repo add 存儲庫名 庫存庫url #添加存儲庫
- helm repo update
- 第三方存儲庫資源
- https://github.com/coreos/prometheus-operator/tree/master/helm # Prometheus Operator
- https://github.com/bitnami/charts # Bitnami Library for Kubernetes
- https://github.com/att-comdev/openstack-helm # Openstack-Helm
- https://github.com/sapcc/openstack-helm # Openstack-Helm
- https://github.com/jackzampolin/tick-charts # Tick-Charts
- 隨着helm的普及,可以使用的第三方chart庫也越來越多,使用以下命令添加第三方存儲庫
- helm 升級和回退一個應用
- helm history xxx #查看發布的歷史版本
- helm search XXX -l #查看chart包版本
- 升級一個應用
- 我們可以指定升到某一個版本,如果不指定,默認是最新版。
- helm upgrade XXX local/XXX #升級
- 回退一個應用
- helm rollback XXX #默認回退到上一個版本
- 刪除一個應用
- helm delete XXX #刪除
- helm ls -a XXX #確認是否已經刪除,狀態為delete
- helm ls -deleted #列出刪除的relaese
- helm 如何結合CI/CD?
- 采用helm可以把零散的kubernetes應用配置文件作為一個chart管理。chart源碼和源代碼一起放到Git庫中管理。通過把chart參數化,可以在測試環境和生成環境采用不同的chart參數。
- helm CD/CD流程圖:
- helm 如何在多環境下(Test、Staging、Production)的業務配置?
- chart是支持參數替換的,可以把業務配置的相關參數設置為模板變量,使用helm install 命令部署的時候指定一個值,這樣就可以把業務參數從chart中剝離了。
- 例如:helm install --values=values-production.yaml wordpress
