前言:
Helm是GO語言編寫的,是管理kubernetes集羣中應用程序包的客戶端工具。
Helm是相似於centos上的yum工具或Ubuntu上的apt-get工具。
對於應用發佈者而言,能夠經過Helm打包應用,管理應用依賴關係,管理應用版本併發布應用到軟件倉庫。
對於使用者而言,使用Helm後不用須要瞭解Kubernetes的Yaml語法並編寫應用部署文件,能夠經過Helm下載並在kubernetes上安裝須要的應用。
除此之外,Helm還提供了kubernetes上的軟件部署,刪除,升級,回滾應用的強大功能。
Helm中並不提供鏡像,但資源清單中會指明相關的鏡像倉庫。
1、基本概念
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發送請求
並由tiller來管理對應的Kubernetes資源。Helm客戶端的使用方法參見helm --help命令。
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包。
2、安裝helm(我這裏在集羣中master主機上安裝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,並綁定到集羣中合適的角色(我這裏綁定的是集羣管理員)。
詳情看官方:https://github.com/helm/helm/blob/master/docs/rbac.mdlinux
1 vim tiller-rbac.yaml 2 apiVersion: v1 3 kind: ServiceAccount 4 metadata: 5 name: tiller 6 namespace: kube-system 7 --- 8 apiVersion: rbac.authorization.k8s.io/v1 9 kind: ClusterRoleBinding 10 metadata: 11 name: tiller 12 roleRef: 13 apiGroup: rbac.authorization.k8s.io 14 kind: ClusterRole 15 name: cluster-admin 16 subjects: 17 - kind: ServiceAccount 18 name: tiller 19 namespace: kube-system 20 應用:kubectl apply -f tiller-rbac.yaml
5.初始化helm
因爲tiller的鏡像沒法直接從國內pull下來,因此我這裏使用Azure中國的鏡像。
也能夠本身尋找國內可以使用的鏡像倉庫如:阿里的鏡像倉庫。
注意helm要和tiller的版本保持一致。git
1 helm init --service-account tiller --upgrade -i gcr.azk8s.cn/kubernetes-helm/tiller:v2.13.1 2 3 Creating /root/.helm/repository/repositories.yaml 4 Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com 5 Adding local repo with URL: http://127.0.0.1:8879/charts 6 $HELM_HOME has been configured at /root/.helm. 7 8 Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. 9 10 Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy. 11 To prevent this, run `helm init` with the --tiller-tls-verify flag. 12 For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation 13 Happy Helming! 14
6.查看tiller版本及pod是否正常運行:github
1 [root@K8s-master helm]# helm version 2 Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"} 3 Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"} 4 5 kubectl get pods -n kube-system 6 NAME READY STATUS RESTARTS AGE 7 tiller-deploy-5fcc86f85f-qvr4b 0/1 ContainerCreating 0 31s
3、使用helm
helm官方支持的Chart列表爲:https://hub.kubeapps.com/
1.查看當前repo倉庫:web
1 helm repo list 2 NAME URL 3 stable https://kubernetes-charts.storage.googleapis.com ##此倉庫地址沒法在國內使用,因此咱們更換其餘國內可以使用的倉庫。 4 local http://127.0.0.1:8879/charts
2.刪除repo倉庫:redis
1 helm repo remove 倉庫名 2 例:helm repo remove stable
3.添加repo倉庫:vim
1 helm repo add 倉庫地址 2 例:helm repo add https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts ##阿里雲的chart倉庫
4.更新倉庫:centos
1 helm repo update 2 Hang tight while we grab the latest from your chart repositories... 3 ...Skip local chart repository 4 ...Successfully got an update from the "stable" chart repository 5 Update Complete. ⎈ Happy Helming!⎈
5.搜索chart:api
1 helm search chart名稱 2 例:helm search wordpress 3 NAME CHART VERSION APP VERSION DESCRIPTION 4 stable/wordpress 0.8.8 4.9.4 Web publishing platform for building blogs and websites.
6.查看chart的詳細信息:服務器
1 helm inspect stable/wordpress
7.安裝chart:架構
1 helm install chart名稱
再也不一一舉例,經常使用命令選項總結以下:
對於chart的管理命令:
create、fetch、get、inspect、package、verify...
對於release的管理命令:
install、delete、upgrade/rollback、list、history、status...
更多命令詳情請查看helm --help命令。
4、注意事項
1.每次獲取chart時,程序包都會被下載到.helm/cache/archive/目錄下。
2.將.helm/cache/archive/目錄下的chart包文件解壓後,裏面就是一些資源清單文件和模板文件和values文件等。
使用tree命令查看chart程序包解壓後的文件結構:
例:
1 [root@K8s-master archive]# tree redis 2 redis 3 ├── Chart.yaml ##經常使用來描述當前Chart的屬性、名稱、版本等信息,在升級chart時參考版本等信息。 4 ├── README.md ##自述文件,描述做者等相關信息。 5 ├── templates ##模板目錄,包含了此chart部署時所需的相關資源清單文件。 6 │ ├── deployment.yaml ##templates目錄下的yaml文件和咱們平時本身寫的不太同樣,裏面大量調用了Go模板語法。 7 │ ├── _helpers.tpl 8 │ ├── networkpolicy.yaml 9 │ ├── NOTES.txt 10 │ ├── pvc.yaml 11 │ ├── secrets.yaml 12 │ └── svc.yaml 13 └── values.yaml
3.能夠修改values.yaml文件,用來自定義一些參數,向模板中的各屬性賦值,從而實現自定義chart,生成release。