欢迎光临
我们一直在努力

别再手动写K8s YAML了!Helm——Kubernetes的“App Store”保姆级入门指南

别再手动写K8s YAML了!Helm——Kubernetes的“App Store”保姆级入门指南

从一段“痛苦”的经历说起

想象一下这个场景:你终于学会了Kubernetes,能手动写出Deployment、Service、ConfigMap这些YAML文件了。今天老板说:“把这个应用部署到开发环境测试一下。”

你撸起袖子就开始干——写好了backend-deployment.yaml,又写了service.yaml,再来个ingress.yaml,还有configmap.yaml……一共五六个文件,逐个kubectl apply -f。

第二天,老板又说:“测试通过,部署到预发布环境吧。”

你心想:好啊,那就复制一份,把镜像tag从latest改成v1.2.3,把副本数从1改成3,把域名从dev.example.com改成staging.example.com……

第三天,老板说:“上生产!”

你看了看那五六个文件,又看了看三个环境(dev、staging、prod),叹了口气——同样的文件要改三遍,每改一次都要小心翼翼,生怕哪个参数漏了或者写错了。

如果你有过类似的经历,那么恭喜你,你遇到了Kubernetes应用的“配置地狱”。

而Helm,就是来拯救你的。🦸


什么是Helm?一句话说清楚

Helm是Kubernetes的包管理器。

就像Ubuntu有apt、CentOS有yum、macOS有Homebrew、Python有pip一样,Helm就是Kubernetes世界的“软件管家”。

Helm做的事情可以总结为一句话:把一堆Kubernetes YAML文件打包成一个“安装包”,让你能一键安装、升级、回滚应用。


三个类比,让你秒懂Helm

类比一:手机App Store

概念手机Kubernetes
应用安装包 App Store里的应用 Helm Chart
应用商店 App Store Helm仓库(Repository)
安装后的应用 你手机上的微信 Release(一次部署实例)

你想装微信,不会自己去写代码编译吧?去App Store搜一下、点一下安装就搞定了。Helm也是一样——你想部署一个MySQL到K8s集群,不用自己写Deployment、Service、PVC,直接helm install mysql就行了。

类比二:YUM/DNF(Linux用户秒懂)

概念LinuxKubernetes
软件包 RPM包 Helm Chart
软件仓库 YUM源 Helm仓库
安装后的软件 运行中的程序 Release

你可以把Chart理解成Kubernetes的“RPM包”,把Helm仓库理解成“YUM源”,把Release理解成“装好并运行起来的软件”。

类比三:Docker(容器用户秒懂)

概念DockerKubernetes
打包格式 Docker镜像 Helm Chart
运行实例 容器 Release
存放位置 Docker Hub Helm仓库

一个Docker镜像可以启动无数个容器,一个Helm Chart也可以安装无数次,每次安装产生一个独立的Release。


Helm解决的三个核心痛点

痛点一:YAML文件太多,管不过来

一个稍微复杂的应用,在Kubernetes里至少需要:

  • Deployment(部署配置)

  • Service(服务发现)

  • ConfigMap(配置)

  • Secret(敏感信息)

  • Ingress(外部访问)

  • PVC(存储)

  • ……

如果是微服务架构,每个服务都有这么一堆文件。十几个服务就是几十上百个YAML文件,管理起来简直是一场噩梦。

Helm怎么解决? 把这些YAML文件打包成一个Chart(安装包)。你只需要管理这一个Chart,而不是几十个零散的文件。

痛点二:不同环境要改不同参数,烦死了

开发环境用1个副本、latest镜像、DEBUG开启;生产环境要5个副本、固定版本镜像、DEBUG关闭、内存限制还要翻倍……

如果每个环境都复制一份YAML文件,改一个参数就要改三遍,漏改一个就是事故。

Helm怎么解决? 用模板 + values文件的方式。模板里写replicas: {{ .Values.replicaCount }},不同环境用不同的values文件填充:

yaml

# environments/values-dev.yaml
replicaCount: 1
image.tag: latest
debug: true

# environments/values-prod.yaml
replicaCount: 5
image.tag: v1.0.0
debug: false

同一个模板,不同的values,一套配置通吃所有环境。

痛点三:版本回滚太麻烦

新版本上线出问题了怎么办?手动改YAML重新部署?太慢了。

Helm怎么解决? 每次部署都会生成一个Release,并记录版本历史。出问题了?一行命令直接回滚到上一个版本。

bash

helm rollback my-app 2 # 回滚到第2个版本


Helm的三大核心概念

理解了这三个概念,你就掌握了Helm的精髓。

1. Chart(安装包)

Chart就是Helm的“安装包”。

一个Chart是一个目录,里面包含了部署一个应用所需的所有Kubernetes资源模板和配置文件。

一个典型的Chart目录长这样:

text

my-chart/
├── Chart.yaml # Chart的元信息(名称、版本、描述等)
├── values.yaml # 默认配置值
├── templates/ # 模板文件目录
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── configmap.yaml
│ └── ingress.yaml
└── charts/ # 依赖的其他Chart(可选)

你可以把Chart想象成一个“安装包”,里面包含了所有安装这个应用需要的“材料”和“说明书”。

2. Repository(仓库)

Repository就是存放Chart的地方,相当于“应用商店”。

你可以把做好的Chart上传到仓库,别人就能从仓库里下载并安装。

公共仓库比如Artifact Hub(https://artifacthub.io),里面有成千上万个现成的Chart——MySQL、Redis、Nginx、Prometheus……基本上你听说过的云原生项目,都能在里面找到对应的Chart。

3. Release(一次部署实例)

Release就是Chart在Kubernetes集群里的一次“安装运行”。

同一个Chart可以在同一个集群里安装多次,每次安装都会创建一个独立的Release。比如你想部署两个MySQL实例做读写分离,可以用同一个MySQL Chart安装两次,得到两个不同的Release。

一句话总结三者的关系: 从仓库(Repository) 下载Chart(安装包),安装到Kubernetes集群里,产生一个Release(运行实例)。


Helm是怎么工作的?(Helm 3版)

在Helm v2时代,架构里有一个叫Tiller的服务端组件,它需要安装在Kubernetes集群内部。这带来了不少安全和管理上的麻烦。

Helm v3彻底移除了Tiller,架构变得非常简单:

text

┌─────────────┐ ┌─────────────────────┐
│ Helm CLI │ ──────► │ Kubernetes API │
│ (你的电脑) │ │ Server (集群内) │
└─────────────┘ └─────────────────────┘

现在的Helm只是一个命令行工具,运行在你自己的电脑上(或者CI/CD流水线里)。它直接通过kubeconfig跟Kubernetes API Server通信,不再需要在集群内部署任何额外的服务。

安装Chart的流程:

  • 你执行helm install命令

  • Helm读取Chart目录下的模板文件(templates/*.yaml)

  • Helm读取values.yaml和你指定的其他values文件

  • Helm把模板和values渲染成完整的Kubernetes YAML资源清单

  • Helm把这些YAML通过Kubernetes API发送给集群

  • Kubernetes创建对应的Pod、Service等资源

  • 整个过程,Helm就是一个“模板渲染器 + YAML部署器”。


    一个最简示例:用Helm部署Nginx

    光说不练假把式,我们用一个最简单的例子感受一下Helm的威力。

    第一步:安装Helm

    bash

    # macOS
    brew install helm

    # Linux(官方脚本)
    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
    chmod 700 get_helm.sh
    ./get_helm.sh

    第二步:添加一个Chart仓库

    bash

    # 添加官方的Bitnami仓库(有很多常用Chart)
    helm repo add bitnami https://charts.bitnami.com/bitnami

    # 更新仓库信息
    helm repo update

    第三步:搜索并安装Nginx

    bash

    # 搜索nginx相关的Chart
    helm search repo nginx

    # 安装nginx,Release名字叫my-nginx
    helm install my-nginx bitnami/nginx

    就这么三行命令,一个Nginx就部署到你的Kubernetes集群里了。不用写任何YAML文件!

    第四步:查看和管理

    bash

    # 查看已安装的Release
    helm list

    # 查看Release状态
    helm status my-nginx

    # 升级(比如改个配置)
    helm upgrade my-nginx bitnami/nginx –set service.type=NodePort

    # 回滚到上一个版本
    helm rollback my-nginx

    # 卸载
    helm uninstall my-nginx


    Helm vs 手动写YAML:一张表看懂区别

    场景手动写YAML用Helm
    部署一个MySQL 写5-8个YAML文件,逐个apply helm install mysql bitnami/mysql
    部署到3个不同环境 维护3套YAML,改3遍 1套模板 + 3个values文件
    版本回滚 手动改YAML重新部署 helm rollback 一行命令
    分享给团队 发一堆YAML文件 打包成Chart,上传到仓库
    依赖其他服务 手动部署依赖 Chart里声明依赖,自动处理

    总结

    Helm是什么?

    • Kubernetes的包管理器

    • 把一堆YAML打包成Chart(安装包)

    为什么用Helm?

    • 不用手写几十个YAML文件

    • 一套模板适配所有环境

    • 一键安装、升级、回滚

    • 有现成的Chart可以直接用(App Store的感觉)

    三个核心概念记牢:

    • Chart = 安装包(类似RPM、DEB)

    • Repository = 应用商店(类似YUM源、App Store)

    • Release = 一次安装运行(类似装好的软件)


    写在最后

    如果你刚开始学Kubernetes,建议先手动写YAML——这能帮你理解每个资源是干什么的。

    但一旦你理解了基础概念,尽快拥抱Helm。它能把你从重复劳动中解放出来,让你把精力花在更有价值的事情上。

    毕竟,聪明人不是更能吃苦,而是更懂得用工具。Helm就是Kubernetes世界里,那个值得你花时间学习的“趁手兵器”。⚔️

    赞(0)
    未经允许不得转载:171主机测评 » 别再手动写K8s YAML了!Helm——Kubernetes的“App Store”保姆级入门指南
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址