您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)docker中如何使用helm,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
在k8s中,我們對(duì)無(wú)狀態(tài)應(yīng)用如nginx、myapp,我們可以使用deployment控制器進(jìn)行伸縮非常容易。
對(duì)于有狀態(tài)應(yīng)用比如tomcat、redis、etcd單一實(shí)例應(yīng)用,我們使用deployment限制它只有一個(gè)實(shí)例,其實(shí)也是沒(méi)有任何問(wèn)題的。
但是,對(duì)于有狀態(tài)應(yīng)用的多實(shí)例,比如redis主從,就不那么容易了。
helm是k8s的另外一個(gè)項(xiàng)目,相當(dāng)于linux的yum。
我們知道,在yum 倉(cāng)庫(kù)中,yum不光要解決包之間的依賴關(guān)系,還要提供具體的程序包。但是helm倉(cāng)庫(kù)里面只有配置清單文件,而沒(méi)有鏡像,鏡像還是由鏡像倉(cāng)庫(kù)來(lái)提供,比如hub.docker.com、私有倉(cāng)庫(kù)等。
也就是說(shuō),helm提供了一個(gè)應(yīng)用所需要的所有清單文件。比如對(duì)于一個(gè)nginx,我們需要一個(gè)deployment的清單文件、一個(gè)service的清單文件、一個(gè)hpa的清單文件。我們把這三個(gè)文件打包到一起,就是一個(gè)應(yīng)用程序的程序包,我們稱之為Chart。
一般來(lái)說(shuō),Chart是一個(gè)helm程序包,其實(shí)質(zhì)只是一個(gè)模板,我們可以對(duì)這個(gè)模板進(jìn)行賦值(value),而形成我們自定義的清單文件,也就實(shí)現(xiàn)我們生產(chǎn)個(gè)性化的需求。這樣的倉(cāng)庫(kù)叫Chart倉(cāng)庫(kù)(其實(shí)就是一個(gè)https/http服務(wù)器)。
Helm把Kubernetes資源(比如deployments、services或 ingress等) 打包到一個(gè)chart中,而chart被保存到chart倉(cāng)庫(kù)。通過(guò)chart倉(cāng)庫(kù)可用來(lái)存儲(chǔ)和分享chart。
helm是工作在k8s集群之外的。helm不直接操作apiserver,而是和Tiller交互。Tlller再和apiserver交互,最后由Apiserver把chart使用config賦值(值文件),最后部署成為release。
在helm工作中,helm先去檢查chart是否存在,存在就把chart下載到helm本機(jī)當(dāng)前用戶的家目錄下。然后helm把chart交給tiller,tiller再和api server交互。api server一旦把chart部署在k8s集群上,就不再叫chart了,而叫release。
所以,一個(gè)chart賦值不同,完全可以部署出多個(gè)release出來(lái)的,所以我們可以把chart看做是一個(gè)安裝包的模板。
如果發(fā)現(xiàn)chart更新了,helm就自動(dòng)滾動(dòng)更新,而且helm還支持一鍵回滾的操作。
helm是安裝在k8s集群之外的服務(wù)器上的。
可以到如下鏈接下載helm的安裝包:
https://github.com/helm/helm/releases
下載下來(lái)后,就是個(gè)helm命令,可以直接用:
[root@master linux-amd64]# mv helm /usr/bin/
[root@master linux-amd64]# helm -h The Kubernetes package manager To begin working with Helm, run the 'helm init' command: $ helm init This will install Tiller to your running Kubernetes cluster. It will also set up any necessary local configuration. Common actions from this point include: - helm search: search for charts - helm fetch: download a chart to your local directory to view - helm install: upload the chart to Kubernetes - helm list: list releases of charts Environment: $HELM_HOME set an alternative location for Helm files. By default, these are stored in ~/.helm $HELM_HOST set an alternative Tiller host. The format is host:port $HELM_NO_PLUGINS disable plugins. Set HELM_NO_PLUGINS=1 to disable plugins. $TILLER_NAMESPACE set an alternative Tiller namespace (default "kube-system") $KUBECONFIG set an alternative Kubernetes configuration file (default "~/.kube/config")
我們看到helm部署好了,就是這么簡(jiǎn)單粗暴。
rbac配置文件樣例: https://github.com/helm/helm/blob/master/docs/rbac.md
[root@master helm]# 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
[root@master helm]# kubectl apply -f tiller-rbac.yaml serviceaccount/tiller created clusterrolebinding.rbac.authorization.k8s.io/tiller created
[root@master helm]# kubectl get sa -n kube-system |grep tiller tiller 1 21m
[root@master helm]# export NO_PROXY='172.16.0.0/16,127.0.0.0/0' #做過(guò)linux代理的可以加這個(gè),不是可以不加這個(gè)環(huán)境變量
[root@master helm]# helm init --service-account tiller Creating /root/.helm Creating /root/.helm/repository Creating /root/.helm/repository/cache Creating /root/.helm/repository/local Creating /root/.helm/plugins Creating /root/.helm/starters Creating /root/.helm/cache/archive 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. For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation Happy Helming!
由于 Helm 默認(rèn)會(huì)去 storage.googleapis.com 拉取鏡像,如果你當(dāng)前執(zhí)行的機(jī)器不能訪問(wèn)該域名的話可以使用以下命令來(lái)安裝:
[root@master helm]# helm init --upgrade --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
看到tiller 的pod已經(jīng)運(yùn)行起來(lái)了:
[root@master helm]# kubectl get pods -n kube-system -o wide |grep tiller tiller-deploy-759cb9df9-t6b2l 1/1 Running 0 18m 10.244.2.89 node2
看到helm可以工作,并能和k8s集群連接起來(lái)了。
[root@master ~]# helm version
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
1、更改helm倉(cāng)庫(kù)源
helm默認(rèn)使用的helm源地址是 https://kubernetes-charts.storage.googleapis.com 但是由于中國(guó)大陸不可描述的原因,需要替換為阿里的helm源。 更改方法如下:
[root@master ~]# helm repo remove stable "stable" has been removed from your repositories
[root@master ~]# helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts "stable" has been added to your repositories
2、查看本地可用helm源
[root@master ~]# helm repo list NAME URL local http://127.0.0.1:8879/charts stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
3、更新helm倉(cāng)庫(kù)
[root@master ~]# 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!?
3.在倉(cāng)庫(kù)中搜索
[root@master ~]# helm search #列出helm倉(cāng)庫(kù)中所有可用的應(yīng)用
[root@master ~]# helm search mysql #過(guò)濾操作 NAME CHART VERSIONAPP VERSIONDESCRIPTION stable/mysql 0.3.5 Fast, reliable, scalable, and easy to use open-... stable/percona 0.3.0 free, fully compatible, enhanced, open source d... stable/percona-xtradb-cluster0.0.2 5.7.19 free, fully compatible, enhanced, open source d... stable/gcloud-sqlproxy 0.2.3 Google Cloud SQL Proxy stable/mariadb 2.1.6 10.1.31 Fast, reliable, scalable, and easy to use open-...
4、查看應(yīng)用詳細(xì)信息
[root@master ~]# helm inspect stable/mysql
注意:上面的stable是倉(cāng)庫(kù)的名字,通過(guò)helm repo list顯示的就是
5、helm源
https://hub.kubeapps.com/
6、用helm安裝軟件包
[root@master ~]# helm install --name mysql1 stable/mysql
--name:指定release名字
7、查看安裝的軟件包
[root@master ~]# helm list NAME REVISIONUPDATED STATUS CHART NAMESPACE mysql11 Wed Oct 17 04:50:58 2018DEPLOYEDmysql-0.3.5default
8、卸載安裝的軟件包
[root@master ~]# helm delete mysql1 release "mysql1" deleted
9、總結(jié)
helm常用命令 release管理: install delete upgrade/rollback list history 查看release歷史版本 status 獲取release狀態(tài)信息 chart管理: create #創(chuàng)建一個(gè)chart,生成基礎(chǔ)chart示例性文件,供我們修改用 fetch 下載倉(cāng)庫(kù)中的一個(gè)char到本地 get inspect package verify
10、helm把安裝包會(huì)默認(rèn)下載到當(dāng)前用戶的家目錄下
在我們install或者fetch時(shí),都會(huì)把安裝包下載到當(dāng)前用戶的家目錄下:
[root@master archive]# ll /root/.helm/cache/archive/ total 8 -rw-r--r-- 1 root root 5536 Oct 17 04:50 mysql-0.3.5.tgz
11、修改chart里面的values.yaml,實(shí)現(xiàn)個(gè)性化安裝
[root@master archive]# cd /root/.helm/cache/archive [root@master archive]# ls mysql-0.3.5.tgz [root@master archive]# tar -xvf mysql-0.3.5.tgz
[root@master archive]# tree mysql mysql ├── Chart.yaml #描述chart的 ├── README.md ├── templates #模板文件 │ ├── configmap.yaml │ ├── deployment.yaml │ ├── _helpers.tpl │ ├── NOTES.txt │ ├── pvc.yaml │ ├── secrets.yaml │ └── svc.yaml └── values.yaml #自己修改這個(gè)文件的相應(yīng)參數(shù),可以自定義安裝包的內(nèi)容
如果我們有個(gè)性化的安裝需求,我們可以改values.yaml文件的內(nèi)容,這個(gè)文件放在哪個(gè)位置都行,改完后:
[root@master mysql]# helm install --name mysql1 -f /root/values.yaml stable/mysql
注:--name指定的是自定義release名字。
12、查看部署后的提示信息
用helm部署完應(yīng)用包后,會(huì)有很多提示信息,這些提示信息非常重要,但是如果你沒(méi)有及時(shí)記錄,有沒(méi)有辦法再查看呢。答案是有的,通過(guò)以下辦法找到他們:
[root@master ~]# helm status mysql1 LAST DEPLOYED: Wed Oct 17 04:50:58 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql1-mysql ClusterIP 10.110.40.169 <none> 3306/TCP 15h ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE mysql1-mysql 1 1 1 0 15h ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE mysql1-mysql-7b7f7ffcd5-vrs9d 0/1 Pending 0 15h ==> v1/Secret NAME TYPE DATA AGE mysql1-mysql Opaque 2 15h ==> v1/PersistentVolumeClaim NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE mysql1-mysql Pending 15h NOTES: MySQL can be accessed via port 3306 on the following DNS name from within your cluster: mysql1-mysql.default.svc.cluster.local To get your root password run: MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default mysql1-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo) To connect to your database: 1. Run an Ubuntu pod that you can use as a client: kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il 2. Install the mysql client: $ apt-get update && apt-get install mysql-client -y 3. Connect using the mysql cli, then provide your password: $ mysql -h mysql1-mysql -p To connect to your database directly from outside the K8s cluster: MYSQL_HOST=127.0.0.1 MYSQL_PORT=3306 # Execute the following commands to route the connection: export POD_NAME=$(kubectl get pods --namespace default -l "app=mysql1-mysql" -o jsonpath="{.items[0].metadata.name}") kubectl port-forward $POD_NAME 3306:3306 mysql -h ${MYSQL_HOST} -P${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD}
1、下載倉(cāng)庫(kù)中的一個(gè)chart到本地
[root@master helm]# helm fetch stable/mysql [root@master helm]# ls mysql-0.3.5.tgz [root@master helm]#
2、查看chart的目錄結(jié)構(gòu)
[root@master helm]# tree mysql mysql ├── Chart.yaml #做個(gè)整個(gè)chart初始化的,用來(lái)對(duì)外表明自己的元數(shù)據(jù)信息,記錄當(dāng)前chart的版本、名稱、維護(hù)者、內(nèi)部的維護(hù)信息等 ├── README.md #這是markdown格式的文本文件,這是個(gè)自述文件,說(shuō)明這個(gè)chart是怎么開(kāi)發(fā)等內(nèi)容的介紹 |-----requirements.yaml:當(dāng)前chart是否依賴其他chart,這個(gè)文件是可選的。 ├── templates #所有的模板文件,這些文件是可以復(fù)用的,要熟悉go語(yǔ)言才好 │ ├── configmap.yaml │ ├── deployment.yaml │ ├── _helpers.tpl │ ├── NOTES.txt #提供給用戶的最終顯示信息 │ ├── pvc.yaml │ ├── secrets.yaml │ └── svc.yaml └── values.yaml #主要為template模板中自定義屬性設(shè)置默認(rèn)值的 |------ charts/ #里面放置的是當(dāng)前chart所要依賴的其他chart,這個(gè)是可選的 1 directory, 10 files
可用查看chart官方手冊(cè),來(lái)了解每項(xiàng)目的含義:
https://docs.helm.sh/developing_charts/#charts
3、用helm生成基礎(chǔ)chart示例性文件
[root@master helm]# helm create myapp Creating myapp
注:myapp是chart的名字
[root@master helm]# tree myapp/ myapp/ ├── charts ├── Chart.yaml ├── templates │ ├── deployment.yaml │ ├── _helpers.tpl │ ├── ingress.yaml │ ├── NOTES.txt │ └── service.yaml └── values.yaml
4、做語(yǔ)法檢查
[root@master helm]# ls myapp [root@master helm]# helm lint myapp ==> Linting myapp [INFO] Chart.yaml: icon is recommended 1 chart(s) linted, no failures
5、打包
[root@master helm]# ls myapp [root@master helm]# helm package myapp/ Successfully packaged chart and saved it to: /root/helm/myapp-0.1.0.tgz
[root@master helm]# ls myapp myapp-0.1.0.tgz
看到把myapp打包成了myapp-0.1.0.tgz
6、啟動(dòng)8879倉(cāng)庫(kù)的服務(wù)
[root@master helm]# helm repo list NAME URL local http://127.0.0.1:8879/charts stablehttps://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
[root@master helm]# helm serve Regenerating index. This may take a moment. Now serving you on 127.0.0.1:8879
7、查看local倉(cāng)庫(kù)里面是否有我們創(chuàng)創(chuàng)建的chart包
[root@master ~]# helm search myapp NAME CHART VERSIONAPP VERSIONDESCRIPTION local/myapp0.1.0 1.0 A Helm chart for Kubernetes
8、部署我們自定義的chart
[root@master ~]# helm install --name myapp1 local/myapp
9、刪除我們部署的chart
[root@master ~]# helm delete --purge myapp1 release "myapp1" deleted
關(guān)于“docker中如何使用helm”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。