1.概述
helm是k8s的另外一個項目,相當於linux的yum,在yum倉庫中,yum不光要解決包之間的依賴關系,還要提供具體的程序包,helm倉庫里面只有配置清單文件,而沒有鏡像,鏡像還是由鏡像倉庫來提供,比如hub.docker.com、私有倉庫.
helm提供了一個應用所需要的所有清單文件.比如對於一個nginx,我們需要一個deployment的清單文件、一個service的清單文件、一個hpa的清單文件,把這三個文件打包到一起,就是一個應用程序的程序包,稱之為Chart.
Chart是一個helm程序包,其實質只是一個模板,我們可以對這個模板進行賦值(value),形成我們自定義的清單文件,也就實現我們生產個性化的需求,這樣的倉庫叫Chart倉庫,一個https/http服務器.
Helm把Kubernetes資源打包到一個chart中,而chart被保存到chart倉庫,通過chart倉庫可用來存儲和分享chart.helm工作在k8s集群之外,helm不直接操作apiserver,而是和Tiller交互,Tlller再和apiserver交互,最后由Apiserver把chart使用config賦值,最后部署成為release.helm是tiller的客戶端,管理本地的chart倉庫,作用:發送chart、實例安裝、查詢、卸載等.
helm先去檢查chart是否存在,如果存在就把chart下載到helm本機當前用戶的家目錄下,然后helm把Chart和Config交給tiller,tiller和api server交互,api server把chart部署在k8s集群上,就不再叫chart了,而叫release;一個chart賦值不同,完全可以部署出多個release出來,所以可以把chart看做是一個安裝包的模板,如果發現chart更新了,helm會自動滾動更新,還支持一鍵回滾的操作.

訪問:https://github.com/helm/helm/releases下載安裝包
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.12.2-linux-amd64.tar.gz
tar xf helm-v2.12.2-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
rbac配置文件樣例:https://github.com/helm/helm/blob/master/docs/rbac.md
cat 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
cat /usr/lib/systemd/system/docker.service
Environment="NO_PROXY=127.0.0.1/8,127.0.0.1/16"
kubectl get pods --all-namespaces=true
# 下面這兩步沒用,還得下國內的鏡像,直接執行第三步
export NO_PROXY="127.0.0.1/8,127.0.0.1/16"
helm init --service-account tiller
helm init --upgrade --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.12.2 \
--stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster
Happy Helming!
helm version
Client: &version.Version{SemVer:"v2.12.2",...)
Server: &version.Version{SemVer:"v2.12.2",...)
2.使用helm
官方charts列表 https://hub.kubeapps.com/
helm默認使用的charts源地址是https://kubernetes-charts.storage.googleapis.com,需要替換為阿里的helm源:
helm repo list NAME URL stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts local http://127.0.0.1:8879/charts # helm源已經變成國內的了,下面這兩步是移除默認源的,不需要執行 helm repo remove stable helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts helm repo update # 添加incubator源,這個源是開發版的安裝包,用起來可能不穩定 helm repo add incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/ #列出charts倉庫中所有可用的應用 helm search helm search mysql helm inspect stable/mysql # 用helm安裝軟件包,-name:指定release名字 helm install --name mysql1 stable/mysql helm list # 查看安裝的軟件包 helm delete mysql1
helm常用命令
release管理:
install
delete
upgrade/rollback
list
history:查看release歷史版本
status:獲取release狀態信息
chart管理:
create:創建一個chart,生成基礎chart示例性文件,供我們修改用
fetch:下載倉庫中的一個char到本地
get
inspect
package
verify
# helm把安裝包下載到當前用戶的家目錄下
ll /root/.helm/cache/archive/
# 修改chart里面的values.yaml實現定制,values.yaml文件中##是注釋,#是可開啟的參數
helm install --name mysql1 -f /root/values.yaml stable/mysql
metrics想要能被prometheus收集數據需要在metadata中將prometheus.io/scrape:設置為true
metadata:
annotations:
prometheus.io/scrape: 'true'
# 部署完應用包后,查看release提示信息
helm status mysql1
helm fetch stable/redis
查看chart官方手冊,了解每個參數的含義https://docs.helm.sh/developing_charts/#charts
# 用helm生成基礎chart示例性文件,myapp是chart的名字
helm create myapp
# 做語法檢查
helm lint myapp
==> Linting myapp
[INFO] Chart.yaml: icon is recommended
1 chart(s) linted, no failures
# 打包
helm package myapp/
Successfully packaged chart and saved it to: /root/myapp-0.1.0.tgz
# 啟動8879倉庫的服務
helm serve
# 查看local倉庫里面是否有我們創建的chart包
helm search myapp
# 部署我們自定義的chart
helm install --name myapp1 local/myapp
# 刪除我們部署的chart
helm delete --purge myapp1
參考博客:http://blog.itpub.net/28916011/viewspace-2216650/
