k8s-Helm管理器

什么是Helm?简单来说,**Helm 是 Kubernetes 的包管理器**。你可以把它理解为 Kubernetes 版本的 `apt`(Ubuntu 的包管理器)或 `yum`(Red Hat 的包管理器),或者是针对 Kubernetes 的 `pip`(Python 的包管理器)/ `npm`(Node.js 的包管理器)。

它的核心作用是:**将一组 Kubernetes 资源(如 Deployment、Service、ConfigMap、Ingress 等)打包成一个统一的"软件包",称为 Chart(图表)**,然后通过简单的命令就可以完成这个应用的安装、升级、回滚和删除。


为什么需要 Helm?

直接使用 `kubectl apply -f` 部署多个 YAML 文件时,会遇到很多麻烦:

  1. **分散且难以管理**:一个应用可能包含几十个 YAML 文件(deployment.yaml, service.yaml, configmap.yaml, ingress.yaml...),手动维护很痛苦。

  2. **难以复用**:对于开发、测试、生产环境,你只能手动复制 YAML 文件并修改其中的镜像标签、副本数、域名等参数,极易出错。

  3. **无法追踪和回滚**:`kubectl apply` 不记录"版本"。如果部署出问题,你不知道上次正常的状态是什么,也很难一键回滚。

  4. **依赖管理复杂**:如果应用 A 依赖数据库和消息队列,你很难用原生 YAML 管理这种依赖关系。

**Helm 完美解决了这些问题。**

Helm 的核心概念

  • **Chart(图表)**:一个 Helm 软件包。它包含了在 Kubernetes 集群上运行一个应用、工具或服务所需的所有资源定义和配置。你可以把它想象成一个应用的"安装包"。

  • **Repository(仓库)**:用于存放和分享 Chart 的服务器位置。你可以把它想象成 Chart 的"应用商店"。(官方仓库:Artifact Hub)

  • **Release(发行版)**:当你在 Kubernetes 集群中安装一个 Chart 时,就会产生一个 Release。这是 Chart 的一个具体运行实例。你可以安装同一个 Chart 多次,每次都得到一个不同的 Release(例如 `my-app-dev`、`my-app-prod`)。

工作流程:

  1. 开发者或社区创建 **Chart**(例如:MySQL Chart、Nginx Chart)。

  2. 你将 Chart 的 **Values**(配置参数,如副本数=3,镜像版本=v1.2.3)准备好。

  3. 使用 `helm install my-release ./my-chart` 命令。

  4. Helm 根据 Chart 模板和 Values,生成最终的 YAML 文件,并调用 Kubernetes API 创建所有资源。

  5. 在集群中,一个名为 **`my-release`** 的 **Release** 就诞生并运行了。

常用 Helm 命令示例

| 命令 | |功能 | |类比 |

| :--- | :--- | :--- |

| `helm repo add bitnami https://charts.bitnami.com/bitnami\` | 添加一个 Chart 仓库 | `apt-add-repository` |

| `helm search repo nginx` | 在仓库中搜索 nginx 相关的 Chart | `apt search nginx` |

| `helm pull bitnami/nginx` | 下载 Chart 包到本地(不解压) | `apt download nginx` |

| `helm install my-nginx bitnami/nginx` | 安装一个 Chart,生成一个 Release | `apt install nginx` |

| `helm upgrade my-nginx bitnami/nginx` | 升级已有的 Release(如改镜像版本) | `apt upgrade nginx` |

| `helm rollback my-nginx 1` | 回滚到上一个版本 | (没有直接类比) |

| `helm list` | 列出所有 Release | `dpkg -l` |

| `helm uninstall my-nginx` | 卸载 Release | `apt remove nginx` |

| `helm create my-chart` | 创建一个新的 Chart 脚手架 | `npm init` |

核心价值总结

| 问题 | | 原生 kubectl | | 使用 Helm |

| :--- | :--- | :--- |

| **管理复杂度** | 面对几十个 YAML 文件 | 面对一个 Chart 包(一个应用) |

| **环境配置** | 手动复制修改 YAML | 通过 `values.yaml` 或 `--set` 轻松切换 |

| **版本控制** | 无,依赖外部 Git 等 | 内置版本历史,可轻松回滚 |

| **依赖管理** | 手动依次安装 | 在 Chart 中声明 dependencies |

| **分享与复用** | 靠文档和复制粘贴 | 通过 Chart 仓库(如 Artifact Hub) |

何时使用 Helm?

  • **应该使用**:部署复杂应用(如 Wordpress、GitLab、Prometheus 全家桶),需要管理多个环境(dev/staging/prod),需要频繁升级和回滚,希望复用社区成熟的解决方案。

  • **可能过度**:非常简单的、单个 Pod 的测试服务,或者你非常喜欢手写所有 YAML 并完全掌控(但这在生产环境通常不现实)。

简而言之

**Helm 让管理 Kubernetes 应用变得像在 Ubuntu 上管理软件包一样简单**。它将你的所有 YAML 文件打包成一个 Chart(安装包),让你可以一键完成应用的安装、升级、回滚和分享,并支持不同环境使用不同的配置。

**学习建议**:可以尝试安装 Helm,然后使用 `helm install bitnami/nginx --generate-name` 快速体验一个简单的 Release。理解 `Chart.yaml`(定义 chart 元数据)和 `values.yaml`(默认配置)这两个文件是后续编写自己 Chart 的关键。

相关推荐
Linux-18742 小时前
分布式链路追踪系统之二进制安装skywalking
elasticsearch·云原生·skywalking·分布式链路追踪系统·应用程序性能监控
一叶龙洲3 小时前
wslg打开Ubuntu24.04默认打开图形界面
linux·服务器·数据库·ubuntu
敖行客 Allthinker4 小时前
Parallels Ubuntu虚拟机项目如何让手机访问?完整解决方案
linux·运维·ubuntu
BullSmall5 小时前
Anolis OS 8.10 完整安装 Docker CE(生产可用,解决 podman 冲突)
docker·容器·podman
keyipatience6 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
元Y亨H6 小时前
生产环境监控与故障应急处理(5-5-5 标准)指南
运维
j7~6 小时前
【Linux】二十二.《Linux 信号机制完全指南:表示、捕捉与处理》
linux·信号处理·volatile·可入重函数·保存信号
heimeiyingwang7 小时前
【架构实战】可观测性三支柱:日志、指标、链路的融合
elasticsearch·架构·kubernetes
观山岳五楼7 小时前
Ubuntu 24 怎么使用Ubuntu 20 的镜像源
linux·运维·ubuntu
m0_715646767 小时前
20260720
linux·arm