一、Helm 介绍
没有使用Helm之前,在Kubernetes部署应用,我们要依次部署deployment、service等,步骤比较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂。
helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理。
Helm本质就是让k8s的应用管理(Deployment、Service等)可配置,能动态生成。通过动态生成K8S资源清单文件(deployment.yaml、service.yaml)。然后kubectl自动调用K8S资源部署。
Helm是官方提供类似于YUM的包管理,是部署环境的流程封装,Helm有三个重要的概念:chart、release和Repository
- chart是创建一个应用的信息集合,包括各种Kubernetes对象的配置模板、参数定义、依赖关系、文档说明等。可以将chart想象成apt、yum中的软件安装包。
- release是chart的运行实例,代表一个正在运行的应用。当chart被安装到Kubernetes集群,就生成一个release。chart能多次安装到同一个集群,每次安装都是一个release【根据chart赋值不同,完全可以部署出多个release出来】。
- Repository用于发布和存储 Chart 的存储库。
Helm包含两个组件:Helm客户端和Tiller服务端,如下图所示:
Helm 客户端 负责 chart 和 release 的创建和管理以及和 Tiller 的交互。
Tiller 服务端 运行在 Kubernetes 集群中,它会处理Helm客户端的请求,与 Kubernetes API Server 交互(在heml3中已弃用 Tiller)。
KubeAPI 将数据、资源得生成写入到 etcd ,被 kubelet 接受并创建。
二、Helm 部署
Helm由客户端命令helm工具和服务端tiller组成。
部署前可以前往help官网查看 Helm支持的 Kubernetes 版本 (不推荐将Helm用于比编译它所依赖的版本更高的Kubernetes版本,因为Helm并没有做出任何向前兼容的保证)。
2.1 安装 helm
1 | [root@czz ~]# wget https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz |
或使用脚本安装
1 | curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 |
2.2 验证 helm
1 | [root@czz ~]# helm version |
三、使用 helm 部署应用
3.1 使用 helm 源部署
3.1 添加 chart 源
准备好 helm 后,需要添加 helm 源数据仓库。有以下几个常见的源库
https://kubernetes-charts.storage.googleapis.com/ helm官网 chart 库,稳定
https://apphub.aliyuncs.com 阿里云chart 库,速度最快
1 | [root@czz ~]# helm repo add aliyun https://apphub.aliyuncs.com |
3.2 安装一个 Helm 应用
查看想要安装的服务
1 | [root@czz ~]# helm search repo nginx |
使用helm安装服务
1 | [root@czz ~]# helm install nginx aliyun/nginx |
使用 helm status 跟踪发布状态或重新读取配置信息
1 | [root@czz ~]# helm status nginx |
3.3 升级一个 helm 应用
1 | [root@czz ~]# helm upgrade nginx aliyun/nginx |
3.4 回滚一个 Helm 应用
1 | 向上归滚一个版本 |
3.5 卸载一个 Helm 应用
1 | [root@czz ~]# helm uninstall nginx -ndefault |
3.2 使用 helm 构建应用
3.2.1 建立一个 helm charts
1 | [root@czz ~]# helm create hello-world |
- Chart.yaml 用于描述这个Chart的相关信息,包括名字、描述信息以及版本等。
仅仅是一些简单的文本描述 - values.yaml 用于存储 templates 目录中模板文件中用到变量的值。
- NOTES.txt 用于介绍 Chart 部署后的一些信息,例如:如何使用这个 Chart、列出缺省的设置等。
- Templates 目录下是 YAML 文件的模板,该模板文件遵循 Go template 语法。
Templates 目录下 YAML 文件模板的值默认都是在 values.yaml 里定义的,比如在 deployment.yaml 中定义的容器镜像。
1 image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"其中的 .Values.image.repository 的值就是在 values.yaml 里定义的 nginx,.Values.image.tag 的值就是 stable。
以上两个变量值是在 create chart 的时候就自动生成的默认值,你可以根据实际情况进行修改。实际上都是静态文本,只在是执行的时候才被解析.
3.2.2 构建一个 helm 应用
打开 Chart.yaml,可以看到内容如下,配置名称和版本
1 | [root@czz ~]# cat hello-world/Chart.yaml |grep -Ev "^#|^$" |
编辑 values.yaml,它默认会在 Kubernetes 部署一个 Nginx。下面是 mychart 应用的 values.yaml 文件的内容:
1 | [root@czz ~]# cat hello-world/values.yaml |
3.2.3 检查模块配置
1 | [root@czz ~]# helm lint hello-world/ |
3.2.4 部署 helm 本地应用
1 | [root@czz ~]# helm install hello ./hello-world |