Helm 是什么?
Helm 就是 Kubernetes 的“包管理工具”。如果把 Kubernetes 比作一个操作系统,那么 Helm 就像 Linux 里的 apt
或 yum
,或者 macOS 里的 brew
,它可以帮助你轻松地管理和部署 Kubernetes 应用程序。
换句话说:
- Kubernetes 是舞台,Helm 就是剧务人员,它负责把所有道具(应用、服务等)整齐安排到舞台上。
- Helm 是 Kubernetes 的自动化助手,帮你快速部署复杂的应用,不需要手动一个个创建
yaml
文件。
Helm 的作用
-
简化 Kubernetes 应用的安装和管理
- Kubernetes 应用通常包含很多资源,比如 Deployment、Service、ConfigMap、Ingress 等。
- 手动编写和维护这些 YAML 文件非常繁琐,而 Helm 可以通过一个 Chart(模板包)一次性管理所有资源。
-
实现应用的版本控制
- Helm 支持应用版本的管理,你可以轻松地升级、回滚应用到任意版本。
-
参数化配置
- 通过
values.yaml
文件,你可以灵活地调整应用的配置,不同环境(开发、测试、生产)都能快速适配。
- 通过
-
一键部署复杂应用
- Helm 的 Chart 仓库中有许多预定义的应用模板(比如 MySQL、PostgreSQL、Nginx、Redis 等),你只需要简单几行命令,就能快速部署。
Helm 的基本概念
1. Chart
- Helm 中的 Chart 就是一个打包好的 Kubernetes 应用模板。
- 它包含一组 YAML 文件(如
deployment.yaml
,service.yaml
等),用于描述 Kubernetes 中的各种资源。 - 生活化的比喻:
- Chart 就像是菜谱,告诉 Kubernetes 需要做哪些事情来部署应用。
2. Release
- 每次你用 Helm 部署一个 Chart,Helm 就会生成一个 Release。
- Release 是 Chart 的一个具体实例,记录了你部署时的具体版本和配置。
- 生活化的比喻:
- Chart 是菜谱,而 Release 就是你根据菜谱做出来的一盘菜。
3. Repository
- Chart 的存储库,类似于
apt
或brew
的软件仓库。 - Helm Chart 有许多公开的仓库,比如:
- 官方仓库:ArtifactHub
- Bitnami Chart 仓库(提供常用服务的 Chart)。
Helm 的工作原理
-
你告诉 Helm 你想要什么:
- 比如,你想部署一个 MySQL 数据库,指定你需要几个副本、存储大小是多少。
-
Helm 创建和管理资源:
- Helm 根据 Chart 生成对应的 Kubernetes 资源文件(YAML)。
- Helm 使用 Kubernetes API 把这些资源部署到你的集群中。
-
Helm 管理这些资源:
- 如果你需要升级 MySQL 的版本,或者更改配置,Helm 会更新这些资源。
- 如果你需要回滚到之前的版本,Helm 也可以帮你完成。
Helm 和 Kubernetes 的关系
Helm 是 Kubernetes 的辅助工具,它不会替代 Kubernetes,但可以让使用 Kubernetes 更加方便。
- Kubernetes:直接管理资源(Deployment, Service 等)。
- Helm:通过 Chart 模板快速部署和管理这些资源。
Helm 的常见操作
以下是使用 Helm 的一些常见操作:
1. 安装 Helm
如果你还没有安装 Helm,可以通过以下命令安装:
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
2. 添加 Chart 仓库
添加 Bitnami 官方仓库:
helm repo add bitnami https://charts.bitnami.com/bitnami
更新所有仓库:
helm repo update
3. 安装应用
比如,你想安装一个 Redis 数据库:
helm install my-redis bitnami/redis
4. 查看所有 Release
查看当前集群中用 Helm 部署的所有应用:
helm list
5. 升级应用
升级 Redis 的版本或修改配置:
helm upgrade my-redis bitnami/redis --set replicaCount=2
6. 删除应用
卸载 Redis:
helm uninstall my-redis
Helm 使用的场景
-
快速部署复杂应用
- 如果你的应用需要多个 Kubernetes 资源(Deployment、Service、Ingress 等),Helm 可以一次性部署所有资源。
-
管理微服务
- 在微服务架构中,你需要同时管理多个服务,Helm 可以帮你快速部署、升级和回滚这些服务。
-
不同环境的配置管理
- 开发、测试和生产环境通常需要不同的配置(比如副本数、CPU/内存限制),通过 Helm 的
values.yaml
,可以轻松适配不同环境。
- 开发、测试和生产环境通常需要不同的配置(比如副本数、CPU/内存限制),通过 Helm 的
-
团队协作
- 团队成员可以共享同一个 Chart,确保所有人部署的应用是一致的。
总结
Helm 是什么? | Helm 的作用 |
---|---|
Kubernetes 的包管理工具 | 简化应用部署和管理,像 apt 或 brew 一样高效。 |
Chart = 应用模板 | 提供应用部署的完整模板(包括 Deployment、Service 等)。 |
Release = 应用实例 | Chart 的具体部署实例,记录版本和配置,支持升级和回滚。 |
values.yaml = 配置文件 | 提供部署应用的参数化配置,支持为不同环境提供不同的配置值。 |
values.yaml
和 chart.yaml
的作用
在 Kubernetes 的 Helm Chart 项目中,values.yaml
和 chart.yaml
是 Chart 的核心文件。它们分别承担着 配置管理 和 Chart 元数据定义 的职责。
用更生活化的比喻来说:
chart.yaml
就像一本食谱,告诉我们这道“菜”叫什么名字、需要哪些原料、用什么方法做(比如需要依赖其他菜谱)。values.yaml
就像购物清单,具体列出了我们需要买的食材(配置值)和份量(实际参数值)。
chart.yaml
的作用
1. 定义 Helm Chart 的基本信息
chart.yaml
是 Helm Chart 的元数据文件,用于描述当前 Chart 的名称、版本、依赖关系等信息。
作用场景
它主要被用来告诉 Helm 工具:
- 这个 Chart 的名字是什么?
- 当前的版本号是多少?
- 是否需要其他 Chart(依赖 Chart)才能正常运行?
文件结构(示例)
apiVersion: v2 # Chart API 版本
name: my-app # Chart 名称
description: A Helm chart for my Kubernetes app
type: application # Chart 类型(application 表示一个完整应用,library 表示一个库)
version: 1.0.0 # 当前 Chart 的版本号
appVersion: 2.0.0 # 应用程序的版本(和 Chart 的版本不同)
dependencies: # 当前 Chart 所依赖的其他 Chart
- name: postgresql
version: 10.13.0
repository: https://charts.bitnami.com/bitnami
condition: postgresql.enabled # 是否启用这个依赖
功能总结
- 定义元数据:Chart 名称、版本、描述等。
- 声明依赖:如果当前应用需要其他服务(比如数据库、消息队列等),通过
dependencies
声明依赖。 - 管理版本:为 Chart 本身和应用程序管理版本。
values.yaml
的作用
1. 提供默认配置值
values.yaml
是 Helm Chart 的配置文件,主要用来定义部署应用时的 默认配置值。每个 Chart 都可以有一个或多个 values.yaml
,提供灵活的参数设置。
作用场景
它主要被用来:
- 设置应用程序部署的默认参数(如镜像、端口、服务配置等)。
- 在部署时通过自定义值覆盖默认值,方便为不同环境(开发、测试、生产)提供不同的配置。
文件结构(示例)
replicaCount: 2 # 应用副本数量
image:
repository: my-app-image # Docker 镜像仓库
tag: 1.2.3 # Docker 镜像版本
pullPolicy: IfNotPresent # 镜像拉取策略
service:
type: ClusterIP # 服务类型
port: 80 # 服务端口
postgresql:
enabled: true # 是否启用 PostgreSQL
image:
repository: bitnami/postgresql
tag: 15.3.0
功能总结
- 提供默认值:
values.yaml
提供了 Chart 中模板使用的默认参数。 - 灵活性强:用户可以在
helm install
或helm upgrade
时使用--set
或-f
命令覆盖默认值,适配不同环境。
chart.yaml
和 values.yaml
的关系
两者的关系可以简单总结为:
chart.yaml
是 Chart 的“宣言”,定义了应用依赖的结构和关系。values.yaml
是具体的配置数据,用来告诉 Kubernetes 如何部署这个 Chart。
举个例子:
如果
chart.yaml
说“这个应用需要一个 PostgreSQL 数据库”, 那么values.yaml
会详细说明“这个数据库应该用哪个版本,运行多少副本,监听哪个端口”。
它们在项目中的角色
1. chart.yaml
的角色
chart.yaml
在 Helm 项目中扮演着 “元信息声明” 的角色,主要用于:
- 定义 Helm Chart 本身的基本信息(名字、版本、描述等)。
- 声明依赖,告诉 Kubernetes 需要哪些额外服务来运行这个应用。
- 管理 Chart 的版本迭代。
对开发人员的意义:
- 让团队明确当前 Chart 的功能和依赖。
- 方便版本控制,确保团队在不同环境中使用一致的依赖版本。
2. values.yaml
的角色
values.yaml
在 Helm 项目中扮演着 “配置值提供者” 的角色,主要用于:
- 定义应用的默认部署配置。
- 提供可覆盖的参数,适配不同的环境(开发、测试、生产)。
对开发人员的意义:
- 减少重复配置,提供统一的默认值。
- 提高灵活性,通过覆盖默认值快速适配不同环境。
总结
文件 | 作用 | 角色 |
---|---|---|
chart.yaml | 定义 Helm Chart 的元信息(名称、版本、依赖关系等)。 | Chart 的“宣言” |
values.yaml | 提供 Chart 模板使用的默认配置值,支持通过覆盖自定义值部署不同环境的应用。 | Chart 的“配置提供者” |
两者协同作用,让 Helm Chart 成为一个 可复用、灵活且高效的 Kubernetes 应用打包和部署工具。