前言:
Helm是go語言編寫的,是管理kubernetes集群中應用程序包的客戶端工具
Helm是類似於centos上的yum工具或Ubuntu上的apt-get工具
對於應用發布者而言,可以通過Helm打包應用,管理應用依賴關系,管理應用版本並發布應用到軟件倉庫
對於使用者而言,使用Helm后不用需要了解Kubernetes的Yaml語法並編寫應用部署文件,可以通過Helm下載並在Kubernets上安裝需要的應用
除此之外,Helm還提供了Kubernetes上的軟件部署,刪除,升級,回滾應用的強大功能
Helm中並不提供鏡像,但資源清單中會指明相關的鏡像倉庫
一、基本概念
1、Helm的三個基本概念
Chart:Helm應用(package),包括對資源的定義及相關鏡像的引用,還有模板文件、values文件等。類似於YUM RPM或Apt dpkg文件
Repository:Chart倉庫,http/https服務器,Chart的程序包放在這里
Release:chart的部署實例,每個Chart可以部署一個或多個release
2、Helm的程序架構
helm:客戶端,管理本地的Charts、reprepository和release。與Tiller服務器交互,發送Chart,實例安裝、查詢、添加、卸載等操作。
可以運行在集群外的主機上。
基於grpc協議與Tiller通信。(使用kubectl port-forward將tiller的端口映射到本地,然后再通過映射后的端口跟tiller通信)
並由tiller來管理對應的Kubernetes資源,Helm客戶端的使用方法參見helm --hepl命令。
Tiller:服務端,Tiller多數運行在集群內。接收來自Helm客戶端的請求,並把相關資源的操作發送到kube-apiserver,生成release。
為了方便管理,tiller把release的相關信息保存在Kubernetes的ConfigMap中。tiller對外暴露gRPC API,供helm客戶端調用。
3、工作流程
首先helm把需要的應用程序包Chart從repository倉庫下載到本地。若需要定制化操作,則需修改模板文件和values文件,使用模板文件和values文件對配置清單進行賦值。
helm把清單提交給Tiller,Tiller接收到請求后鏈接apiserver,通過認證授權,apiserver負責完成創建。
創建完成后,這個運行在集群中的實例不再成作Chart,而被稱作release。
helm主機中,helm的家目錄下若存在需要的Chart包,則以后再創建時不再從網上拉取Chart包,直接使用本地的Chart包。
二、安裝Helm
1、獲取helm的安裝包:
https://github.com/helm/helm/releases
2、解壓二進制包:
tar xf helm-v2.13.1-linux-amd64.tar.gz 你會得到一個linux-amd64的文件目錄
3、將linux-amd64里面的可執行文件helm復制到 /usr/bin
cp linux-amd64/helm /usr/bin
4、如果集群基於RBAC認證的話,需要創建serviceaccount,並綁定到集群中合適的角色
vim tiller-rbac.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system
應用:kubectl apply -f tiller-rbac.yaml
5、初始化helm
由於tiller的鏡像無法直接從國內pull下來,所以這里使用Azure中國的鏡像
也可以自己尋找國內的可使用的鏡像倉庫如:阿里的鏡像倉庫
注意helm要和tiller版本要保持一致
helm init --service-account tiller --upgrade -i gcr.azk8s.cn/kubernetes-helm/tiller:v2.13.1 Creating /root/.helm/repository/repositories.yaml Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com Adding local repo with URL: http://127.0.0.1:8879/charts $HELM_HOME has been configured at /root/.helm. Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy. To prevent this, run `helm init` with the --tiller-tls-verify flag. For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation Happy Helming!
6、查看tiller版本及pod是否正常運行:
[root@K8s-master helm]# helm version Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"} kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE tiller-deploy-5fcc86f85f-qvr4b 0/1 ContainerCreating 0 31s
三、使用helm
helm官方支持的Chart列表為:https://hub.kubeapps.com/
1、查看當前repo倉庫:
helm repo list NAME URL stable https://kubernetes-charts.storage.googleapis.com ##此倉庫地址無法在國內使用,所以我們更換其他國內可使用的倉庫。 local http://127.0.0.1:8879/charts
2、刪除repo倉庫
helm repo remove 倉庫名 例:helm repo remove stable
3、添加repo倉庫
helm repo add 倉庫地址 例:helm repo add https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts ##阿里雲的chart倉庫
4、更新倉庫
helm repo update Hang tight while we grab the latest from your chart repositories... ...Skip local chart repository ...Successfully got an update from the "stable" chart repository Update Complete. ⎈ Happy Helming!⎈
5、搜索Chart:
helm search chart名稱 例:helm search wordpress NAME CHART VERSION APP VERSION DESCRIPTION stable/wordpress 0.8.8 4.9.4 Web publishing platform for building blogs and websites.
6、查看chart的詳細信息
helm inspect stable/wordpress
7、安裝chart:
helm install chart名稱
對於chart的管理命令:
create、fetch、get、inspect、package、verify...
對於release的管理命令:
install、delete、upgrade/rollback、list、history、status...
更多命令詳情請查看helm --help命令。
四、注意事項
1.每次獲取chart時,程序包都會被下載到.helm/cache/archive/目錄下。
2.將.helm/cache/archive/目錄下的chart包文件解壓后,里面就是一些資源清單文件和模板文件和values文件等。
使用tree命令查看chart程序包解壓后的文件結構:
[root@K8s-master archive]# tree redis redis ├── Chart.yaml ##常用來描述當前Chart的屬性、名稱、版本等信息,在升級chart時參考版本等信息。 ├── README.md ##自述文件,描述作者等相關信息。 ├── templates ##模板目錄,包含了此chart部署時所需的相關資源清單文件。 │ ├── deployment.yaml ##templates目錄下的yaml文件和我們平時自己寫的不太一樣,里面大量調用了Go模板語法。 │ ├── _helpers.tpl │ ├── networkpolicy.yaml │ ├── NOTES.txt │ ├── pvc.yaml │ ├── secrets.yaml │ └── svc.yaml └── values.yaml
3.可以修改values.yaml文件,用來自定義一些參數,向模板中的各屬性賦值,從而實現自定義chart,生成release。