Helm就是一个包管理工具【类似于npm】
为什么引入 Helm
首先在原来项目中都是基于 yaml 文件来进行部署发布的,而目前项目大部分微服务化或者模块化,会分成很多个组件来部署,每个组件可能对应一个 deployment.yaml,一个 service.yaml,一个 Ingress.yaml 还可能存在各种依赖关系,这样一个项目如果有 5 个组件,很可能就有 15 个不同的 yaml 文件,这些 yaml 分散存放,如果某天进行项目恢复的话,很难知道部署顺序,依赖关系等,而所有这些包括
- 基于 yaml 配置的集中存放
- 基于项目的打包
- 组件间的依赖
但是这种方式部署,会有什么问题呢?
- 如果使用之前部署单一应用,少数服务的应用,比较合适
- 但如果部署微服务项目,可能有几十个服务,每个服务都有一套 yaml 文件,需要维护大量的 yaml 文件,版本管理特别不方便
Helm 的引入,就是为了解决这个问题
- 使用 Helm 可以把这些 YAML 文件作为整体管理
- 实现 YAML 文件高效复用
- 使用 helm 应用级别的版本管理
Helm 介绍
Helm 是一个 Kubernetes 的包管理工具,就像 Linux 下的包管理器,如 yum/apt 等,可以很方便的将之前打包好的 yaml 文件部署到 kubernetes 上。
Helm 有三个重要概念
- helm:一个命令行客户端工具,主要用于 Kubernetes 应用 chart 的创建、打包、发布和管理
- Chart:应用描述,一系列用于描述 k8s 资源相关文件的集合
- Release:基于 Chart 的部署实体,一个 chart 被 Helm 运行后将会生成对应的 release,将在 K8S 中创建出真实的运行资源对象。也就是应用级别的版本管理
- Repository:用于发布和存储 Chart 的仓库
Helm 组件及架构
Helm 采用客户端/服务端架构,有如下组件组成
- Helm CLI 是 Helm 客户端,可以在本地执行
- Tiller 是服务器端组件,在 Kubernetes 集群上运行,并管理 Kubernetes 应用程序
- Repository 是 Chart 仓库,Helm 客户端通过 HTTP 协议来访问仓库中 Chart 索引文件和压缩包
Helm v3 变化
2019 年 11 月 13 日,Helm 团队发布了 Helm v3 的第一个稳定版本
该版本主要变化如下
架构变化
- 最明显的变化是 Tiller 的删除
- V3 版本删除 Tiller
- relesase 可以在不同命名空间重用
V3 之前
V3 版本
helm 配置
首先我们需要去 官网下载
- 第一步,下载 helm安装压缩文件,上传到 linux 系统中
- 第二步,解压 helm 压缩文件,把解压后的 helm 目录复制到 usr/bin 目录中
- 使用命令:helm
我们都知道 yum 需要配置 yum 源,那么 helm 就就要配置 helm 源
helm 仓库
添加仓库
1 | helm repo add 仓库名 仓库地址 |
例如
1 | # 配置微软源 |
然后可以查看我们添加的仓库地址
1 | # 查看全部 |
或者可以删除我们添加的源
1 | helm repo remove stable |
helm 基本命令
- chart install
- chart upgrade
- chart rollback
使用 helm 快速部署应用
使用命令搜索应用
首先我们使用命令,搜索我们需要安装的应用
1 | # 搜索 weave仓库 |
根据搜索内容选择安装
搜索完成后,使用命令进行安装
1 | helm install ui aliyun/weave-scope |
可以通过下面命令,来下载 yaml 文件【如果】
1 | kubectl apply -f weave-scope.yaml |
安装完成后,通过下面命令即可查看
1 | helm list |
同时可以通过下面命令,查看更新具体的信息
1 | helm status ui |
但是我们通过查看 svc 状态,发现没有对象暴露端口
所以我们需要修改 service 的 yaml 文件,添加 NodePort
1 | kubectl edit svc ui-weave-scope |
这样就可以对外暴露端口了
然后我们通过 ip + 32185 即可访问
如果自己创建 Chart
使用命令,自己创建 Chart
1 | helm create mychart |
创建完成后,我们就能看到在当前文件夹下,创建了一个 mychart 目录
目录格式
- templates:编写 yaml 文件存放到这个目录
- values.yaml:存放的是全局的 yaml 文件
- chart.yaml:当前 chart 属性配置信息
在 templates 文件夹创建两个文件
我们创建以下两个
- deployment.yaml
- service.yaml
我们可以通过下面命令创建出 yaml 文件
1 | # 导出deployment.yaml |
安装 mychart
执行命令创建
1 | helm install web1 mychart |
应用升级
当我们修改了 mychart 中的东西后,就可以进行升级操作
1 | helm upgrade web1 mychart |
chart 模板使用
通过传递参数,动态渲染模板,yaml 内容动态从传入参数生成
刚刚我们创建 mychart 的时候,看到有 values.yaml 文件,这个文件就是一些全局的变量,然后在 templates 中能取到变量的值,下面我们可以利用这个,来完成动态模板
- 在 values.yaml 定义变量和值
- 具体 yaml 文件,获取定义变量值
- yaml 文件中大题有几个地方不同
- image
- tag
- label
- port
- replicas
定义变量和值
在 values.yaml 定义变量和值
获取变量和值
我们通过表达式形式 ,使用全局变量
1 | {{.Values.变量名称}} |
例如:
1 | {{.Release.Name}} |
安装应用
在我们修改完上述的信息后,就可以尝试的创建应用了
1 | helm install --dry-run web2 mychart |
发布时间: 2021-01-13
最后更新: 2024-06-24
本文标题: Kubernetes学习之核心技术Helm
本文链接: https://blog-yilia.xiaojingge.com/posts/71c97870.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
