第十章 Helm 概念
1. 本章学习内容概览
本节为Kubernetes (K8s) Helm章节开篇,明确本章分为3个核心学习模块:
- Helm 核心概念与设计逻辑
- Helm 安装流程与常用命令实操演示
- 基于 Helm 部署 Ingress Nginx 实现集群七层代理
2. Helm 工具的设计背景与价值
在学习K8s基础资源(Deployment、Service、PV/PVC、StatefulSet等)后,实际业务部署会面临以下核心痛点:
- 复杂应用部署资源清单冗余:以WordPress博客系统为例,部署需要编写多套资源对象:基于Deployment部署Apache+WordPress项目、基于StatefulSet部署MySQL实例,同时需要PV/PVC分别实现WordPress代码、MySQL数据的持久化,还需要编写2份Service分别实现数据库向Apache的提供服务、Apache向集群外暴露访问能力。
- 微服务场景下部署效率极低:微服务拆分后,原本单体应用的1套资源清单可能扩展为几十上百套,重复编写浪费大量人力。
- 资源清单复用成本高:若拿到他人编写的现成资源清单,需要完全理解整套逻辑后才能修改配置(如调整Apache节点数、MySQL规格),修改、测试成本远高于重新编写。
- 缺乏版本管理能力:手动修改资源清单后无法快速回滚到历史可用版本。
Helm 是K8s生态的包管理工具,类比Linux下的yum/apt、容器生态的Docker镜像,可以将整套应用部署逻辑抽象为可复用的安装包,仅需1条命令即可完成部署,同时支持版本管理、配置动态生成,大幅降低部署与运维成本。
3. Helm 核心概念
Helm 本质是实现K8s应用可配置、动态生成的管理工具,核心包含4个基础概念:
- Chart
- 定义:应用的信息集合,是应用部署的自包含逻辑单位,包含K8s资源模板、参数定义、依赖关系、文档说明等所有部署所需内容。
- 类比:相当于Linux包管理中的rpm包、容器生态中的Docker镜像,封装了完整的应用部署逻辑与配置模板。
- Release
- 定义:Chart的运行实例,代表一个正在集群中运行的应用。
- 特性:同一个Chart可以被多次安装到同一集群,每次安装都会生成一个独立的Release;Release支持配置修改、版本回滚,但所有修改都符合Chart定义的资源类型约束(如WordPress的Chart不可能部署出Redis应用)。
- 类比:相当于Docker镜像启动后生成的容器,同一个镜像可以通过传入不同参数生成多个不同配置的容器,但容器的应用类型由镜像决定。
- Helm Client
- 定义:Helm的客户端组件,负责与K8s API Server通信,下发部署、更新、回滚等指令。
- Repository
- 定义:Chart的存储仓库,用于发布、存储Chart包,类比Docker镜像仓库。
其中values.yaml是Chart的核心配置文件,将Chart中所有可配置的参数抽象为该文件中的配置项,用户无需修改整套资源模板,仅需调整values.yaml中的参数即可生成符合自身需求的部署配置,大幅降低自定义成本,这也是Helm「动态生成」能力的核心体现。
4. Helm v2 与 v3 架构差异
Helm 经历v2、v3两个主流版本,架构差异极大,核心区别源于K8s权限体系(RBAC)的普及程度:
4.1 Helm v2 架构(历史版本)
- 架构模式:CS架构,分为Helm Client(客户端)和Tiller(服务端)两部分。
- 部署逻辑:Tiller需要以Pod形式运行在K8s集群内部,作为权限附着点(适配v2诞生时RBAC尚未普及、部分集群使用ABAC等权限体系的场景:ABAC模式下权限需要绑定在集群内部实体,外部客户端无法直接完成权限校验);Helm Client通过gRPC协议与Tiller通信,由Tiller调用API Server接口完成资源对象创建、应用部署。
- 初始化要求:部署Helm v2需要先安装客户端,再执行
helm init命令在集群内部署Tiller Pod。 - 安全风险:Tiller需要具备集群完整管理员权限,若被攻击会导致整个K8s集群面临安全风险,且存在权限溢出问题。
4.2 Helm v3 架构(当前主流版本)
- 架构模式:去中心化架构,仅保留Helm Client组件,完全移除了Tiller服务端。
- 部署逻辑:Helm Client直接通过当前环境的
kubeconfig文件认证,通过标准HTTPS双向认证协议直接调用K8s API Server接口完成部署操作,权限与当前用户的kubeconfig权限绑定。 - 初始化要求:无需执行
helm init初始化操作,安装客户端后配置好kubeconfig即可直接使用。 - 安全优势:不存在Tiller的安全风险,权限跟随用户kubeconfig,避免权限溢出,架构更简单灵活。
4.3 v2 与 v3 核心差异总结
| 对比项 | Helm v2 | Helm v3 |
|---|---|---|
| 核心组件 | Helm Client + Tiller | 仅Helm Client |
| 权限依赖 | Tiller需集群管理员权限,依赖集群内部权限实体 | 直接依赖用户kubeconfig权限,无额外权限需求 |
| 初始化流程 | 需要执行helm init部署Tiller |
无需初始化,安装即可用 |
| 安全风险 | Tiller存在被攻击、权限溢出风险 | 无额外安全风险,权限可控 |
| 架构复杂度 | CS架构,组件多,逻辑复杂 | 去中心化,架构简单 |
| 配置规范 | 无统一配置规范 | 统一使用kubeconfig格式认证 |
注:若企业中仍有存量Helm v2项目,可简单学习v2命令即可,二者命令差异极小,核心差异仅在架构层面。
AI 总结
本章为Kubernetes Helm工具的开篇概念章节,首先明确了Helm是K8s生态的包管理工具,核心解决复杂应用、微服务场景下资源清单重复编写、部署繁琐、无版本管理的问题;其次介绍了Helm的4个核心概念(Chart、Release、Helm Client、Repository),以及values.yaml实现配置动态生成、降低自定义成本的逻辑;最后对比了Helm v2与v3的架构差异,明确v3是当前主流版本,架构更安全简单,是后续学习与生产使用的首选版本。本章后续将围绕Helm的安装、命令使用、基于Helm部署Ingress Nginx展开实操讲解。