最新helm3 https://helm.sh/docs/
1、Helm 介紹
Helm是一個Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的將之前打包好的yaml文件部署到kubernetes上。
Helm有兩個重要概念:
helm:一個命令行客戶端工具,主要用於Kubernetes應用chart的創建、打包、發佈和管理。
Chart:應用描述,一系列用於描述 k8s 資源相關文件的集合。
Release:基於Chart的部署實體,一個 chart 被 Helm 運行後將會生成對應的一個 release;將在k8s中創建出真實運行的資源對象。
2、部署Helm客戶端
Helm客戶端下載地址:https://github.com/helm/helm/releases
解壓移動到/usr/bin/目錄即可。
wget https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz
tar zxvf helm-v3.0.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
3、Helm常用命令
create 創建一個chart並指定名字
dependency 管理chart依賴
get 下載一個release。可用子命令:all、hooks、manifest、notes、values
history 獲取release歷史
install 安裝一個chart
list 列出release
package 將chart目錄打包到chart存檔文件中
pull 從遠程倉庫中下載chart並解壓到本地 # helm pull stable/mysql --untar
repo 添加,列出,移除,更新和索引chart倉庫。可用子命令:add、index、list、remove、update
rollback 從之前版本回滾
search 根據關鍵字搜索chart。可用子命令:hub、repo
show 查看chart詳細信息。可用子命令:all、chart、readme、values
status 顯示已命名版本的狀態
template 本地呈現模板
uninstall 卸載一個release
upgrade 更新一個release
version 查看helm客戶端版本
4、配置國內Chart倉庫
- 微軟倉庫(http://mirror.azure.cn/kubernetes/charts/)這個倉庫強烈推薦,基本上官網有的chart這裏都有。
- 阿里雲倉庫(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts )
- 官方倉庫(https://hub.kubeapps.com/charts/incubator)官方chart倉庫,國內有點不好使。
添加存儲庫:
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update
查看配置的存儲庫:
helm repo list
helm search repo stable
刪除存儲庫:
helm repo remove aliyun
5、Helm基本使用
主要介紹三個命令:
- chart install
- chart update
- chart rollback
1、使用chart部署一個應用
查找chart:
helm search repo
helm search repo mysql
爲什麼mariadb也在列表中?因爲他和mysql有關。
查看chart信息:
helm show chart stable/mysql
安裝包:
helm install db stable/mysql
查看發佈狀態:
helm status db
2、安裝前自定義chart配置選項
上面部署的mysql並沒有成功,這是因爲並不是所有的chart都能按照默認配置運行成功,可能會需要一些環境依賴,例如PV。
所以我們需要自定義chart配置選項,安裝過程中有兩種方法可以傳遞配置數據:
- –values(或-f):指定帶有覆蓋的YAML文件。這可以多次指定,最右邊的文件優先
- –set:在命令行上指定替代。如果兩者都用,–set優先級高
–values使用,先將修改的變量寫到一個文件中
我們找到pvc相關的信息
helm show values stable/mysql
## Persist data to a persistent volume
persistence:
enabled: true
## database data Persistent Volume Storage Class
## If defined, storageClassName: <storageClass>
## If set to "-", storageClassName: "", which disables dynamic provisioning
## If undefined (the default) or set to null, no storageClassName spec is
## set, choosing the default provisioner. (gp2 on AWS, standard on
## GKE, AWS & OpenStack)
##
# storageClass: "-"
accessMode: ReadWriteOnce
size: 8Gi
annotations: {}
找到我們的nfs-storage
[root@master ~]# kubectl get sc
NAME PROVISIONER AGE
k8s-cephfs ceph.com/cephfs 34d
managed-nfs-storage fuseim.pri/ifs 13m
先卸載:
helm uninstall db
命令行替代變量安裝mysql:
helm install db --set persistence.storageClass="managed-nfs-storage" stable/mysql
安裝完畢後mysql就正常運行了。
我們還可以使用yaml文件來定義變量安裝:
我們先導出模板然後修改:
helm show values stable/mysql > config.yaml
[root@master demo]# cat config.yaml
mysqlRootPassword: testing
mysqlUser: liaochao
mysqlPassword: k8s
mysqlDatabase: k8s
persistence:
enabled: true
storageClass: "managed-nfs-storage"
accessMode: ReadWriteOnce
size: 8Gi
以上將創建具有名稱的默認MySQL用戶liaochao,並授予此用戶訪問新創建的k8s數據庫的權限,但將接受該圖表的所有其餘默認值。
指定yaml文件安裝mysql:
helm install db2 -f config.yaml stable/mysql
該helm install命令可以從多個來源安裝:
chart存儲庫
- 本地chart存檔(helm install foo-0.1.1.tgz)
- chart目錄(helm install path/to/foo)
- 完整的URL(helm install https://example.com/charts/foo-1.2.3.tgz)
我們安裝mysql的時候可以把chart包下載下來查看詳情:
helm pull stable/mysql --untar