在没使用helm之前,向kubernetes部署应用,我们要依次部署deployment、svc等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理.
Helm本质就是让K8s的应用管理(Deployment,Service等)可配置,能动态生成。通过动态生成K8s资源清单文件(deployment.yaml,service.yaml)。然后调用Kubectl自动执行K8s资源部署。
Helm和charts的主要作用
组成 helm客户端
helm服务端 tiller
下载期望的版本
# wget -c https://storage.googleapis.com/kubernetes-helm/helm-v2.12.3-linux-amd64.tar.gz
解压
# tar -zxvf helm-v2.12.3-linux-amd64.tar.gz
在解压后的文件夹中找到Helm命令所在位置, 将它移动到期望位置
# mv linux-amd64/helm /usr/local/bin/helm
执行命令
# helm init --upgrade --tiller-image registry.cn-beijing.aliyuncs.com/minminmsn/tiller:v2.12.3 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
确认服务端tiller
# kubectl get pods -n kube-system |grep tiller
tiller-deploy-99dcdbf5f-ddwbg 1/1 Running 0 4m28s
确认客户端和服务端连接成功。如果只显示了客户端版本,说明没有连上服务端。它会自动去K8s上kube-system命名空间下查找是否有Tiller的Pod在运行。
# helm version
Client: &version.Version{SemVer:"v2.12.3", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.12.3", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
查找helm仓库中可用chart,如查找mysql
# helm search mysql
默认安装的 tiller 权限很小,我们执行下面的脚本给它加最大权限,这样方便我们可以用 helm 部署应用到任意 namespace 下:
# kubectl create serviceaccount --namespace=kube-system tiller
# kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
# kubectl patch deploy --namespace=kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
我们创建一个名为mychart的chart,看一看chart的文件结构。
$ helm create mongodb
$ tree mongodb
mongodb
├── Chart.yaml #Chart本身的版本和配置信息
├── charts #依赖的chart
├── templates #配置模板目录
│ ├── NOTES.txt #helm提示信息
│ ├── _helpers.tpl #用于修改kubernetes objcet配置的模板
| |—— ingress.yaml #用于服务暴露或访问
│ ├── deployment.yaml #kubernetes Deployment object
│ └── service.yaml #kubernetes Serivce
└── values.yaml #kubernetes object configuration
如此,我们可以按需编辑自动生成的yaml文件。templates目录下的yaml文件中的变量是从values.yaml文件中获取的。
使用命令验证chart配置。该输出中包含了模板的变量配置与最终渲染的yaml文件。
# helm install --dry-run --debug mongodb
在mongodb目录下执行下面的命令将nginx部署到kubernetes集群上。
# helm install .
查看部署的release
# helm list
NAME REVISION UPDATED STATUS CHART NAMESPACE
garish-gopher 1 Wed Feb 27 11:24:36 2019 DEPLOYED mongodb-0.1.0 default
我们可以修改Chart.yaml中的helm chart配置信息,然后使用下列命令将chart打包成一个压缩文件。
# helm package .
打包出mongodb-0.1.0.tgz文件。
依赖 我们可以在requirements.yaml中定义应用所依赖的chart,例如定义对mariadb的依赖:
dependencies:
- name: mariadb
version: 0.6.0
repository: https://kubernetes-charts.storage.googleapis.com
使用helm lint .命令可以检查依赖和模板配置是否正确。
添加fabric8库
# helm repo add fabric8 https://fabric8.io/helm
搜索fabric8提供的工具(主要就是fabric8-platform工具包,包含了CI、CD的全套工具)
# helm search fabric8
我们在前面打包的chart可以通过HTTP server的方式提供。
# helm serve --address 172.16.0.180:8879
Regenerating index. This may take a moment.
Now serving you on 172.16.0.180:8879
访问http://172.16.0.180:8879 可以看到刚刚安装的chart。
解决本地chart依赖 打开另外一个终端,在本地当前chart配置的目录下,将该repo加入到repo list中。
# helm repo add local http://172.16.0.180:8879
在浏览器中访问http://172.16.0.180:8879,可以看到所有本地的chart。
然后下载依赖到本地。
# helm dependency update
这样所有的chart都会下载到本地的charts目录下。
设置helm命令自动补全 为了方便helm命令的使用,helm提供了自动补全功能,如果使用bash请执行:
# source <(helm completion bash)
Example: 安装Mysql 执行命令
# helm repo update
# helm install stable/mysql
Released smiling-penguin
每次安装都有一个Release被创建, 所以一个Chart可以在同一个集群中被安装多次,每一个都是独立管理和升级的。其中 stable/mysql是Chart名, smiling-penguid 是Release名,后面管理Release时都是用的这个名字。
在使用一个Chart前,查看它的默认配置,然后使用配置文件覆盖它的默认设置
# helm inspect values stable/mariadb
使用一个YAML文件,内含要覆盖Chart的配置值。
# echo '{mariadbUser: user0, mariadbDatabase: user0db}' > config.yaml
# helm install -f config.yaml stable/mariadb
values.yaml中的值可以被部署release时用到的参数–values YAML_FILE_PATH 或 –set key1=value1, key2=value2覆盖掉, 比如
# helm install --set image.tag='latest' .
优先级:–set设置的值会覆盖–value设置的值, –value设置的值会覆盖 values.yaml中定义的值
Charts: helm search 查找可用的Charts helm inspect 查看指定Chart的基本信息 helm install 根据指定的Chart 部署一个Release到K8s helm create 创建自己的Chart helm package 打包Chart,一般是一个压缩包文件
release: helm list 列出已经部署的Release helm delete [RELEASE] 删除一个Release. 并没有物理删除, 出于审计需要,历史可查。 helm status [RELEASE] 查看指定的Release信息,即使使用helm delete命令删除的Release. helm upgrade 升级某个Release helm rollback [RELEASE] [REVISION] 回滚Release到指定发布版本 helm get values [RELEASE] 查看Release的配置文件值 helm ls –deleted 列出已经删除的Release
repo: helm repo list helm repo add [RepoName] [RepoUrl] helm repo update
本文分享自 kubernetes中文社区 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!