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 的关键。

相关推荐
9命怪猫1 小时前
[K8S小白问题集] - Calico好在哪里?
网络·云原生·容器·kubernetes
Irene19911 小时前
(课堂笔记)Linux 基础命令:文件增删改、重命名、压缩等
linux
容器魔方1 小时前
让Skill从执行中生长:Cloud Agent Harness的三段式Skill自进化机制
云原生·开源·资讯
叶~小兮1 小时前
K8S进阶核心综合学习笔记(持久化存储+特殊容器+调度管理)
笔记·学习·kubernetes
Zhu7582 小时前
[软件部署]在k8s环境部署alist
云原生·容器·kubernetes
脆皮炸鸡7552 小时前
库制作与原理~动态链接
linux·开发语言·经验分享·笔记·学习方法
小王C语言2 小时前
Windows和Linux之间文件互传
linux·运维·服务器
magic_now3 小时前
Linux 内核启动流程详解(基于 5.15.119 源码)
linux·运维·服务器
2401_840192273 小时前
k8s的crd、operator、cr分别是什么?
运维·分布式·kubernetes·prometheus