CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Helm 与 GitOps 入门/课时/安装 Helm 与仓库
RawBlame
课时目录12 节

Helm 与 GitOps 入门

  1. 01为什么需要 Helm
  2. 02安装 Helm 与仓库
  3. 03Chart 目录结构
  4. 04模板与 values
  5. 05install upgrade rollback
  6. 06依赖与子 Chart
  7. 07GitOps 是什么
  8. 08仓库布局与清单
  9. 09Argo CD 入门
  10. 10Flux 概览
  11. 11发布策略
  12. 12综合练习

安装 Helm 与仓库

helm CLI、repo add、search、版本。

25 分钟

安装 Helm 与仓库

这一课你将能做到

  1. 在本机装好 Helm 3 CLI,用 helm version 确认客户端版本(确认无 Tiller 这一 Helm 2 遗留概念)
  2. 执行 helm repo add / update / search / show / pull,从公共仓库拉出一份默认 values 草稿
  3. 在学习集群(minikube/kind)试装再卸载一个 demo Chart,并说明为什么生产应用 values 文件进 Git 而不是长串 --set

为什么要学

有了「Chart/Release」的概念图像还不够:你得会 发现 别人写好的 Chart(ingress-nginx、Bitnami 的 Redis/MySQL),也会把自己写的 Chart 装进集群。Helm 3 没有 Tiller——CLI 直连 Kubernetes API,权限边界就是你的 kubectl 身份,这意味着「连错集群」的后果和 kubectl 一样真实。装错仓库、乱用 --set、分不清 Chart version 与 appVersion,会在后面的 upgrade 和 GitOps 课里连环踩坑。本课把 CLI、仓库、试装三条腿钉牢,全程命令真实可运行。

先建立图像

你的笔记本
  helm CLI ──kubeconfig──► API Server(与 kubectl 共用同一套身份)
       │
       ├─ helm repo add/update/list    ← 管理 Chart 源
       ├─ helm search repo/hub         ← 在源里发现 Chart
       ├─ helm show chart/values       ← 读元数据与默认配置
       ├─ helm pull                    ← 下载 Chart 包
       └─ helm install/uninstall       ← 创建/删除 Release
命令族人话典型用途
repo管 Chart 源(增删、刷新索引)接入 Bitnami、自建源
search在已添加源/Artifact Hub 里找包search repo redis
show看包说明书元数据、默认 values
pull把 Chart 下载到本地离线审阅、归档
install/uninstall装/卸 Release学习集群试装
list看当前命名空间的 Release清理 demo
Chart.yaml 里两个版本号:
  version: 1.2.3      ← Chart 包自身版本(SemVer,发版必须递增)
  appVersion: "8.0"   ← 所装应用软件的版本提示(不必严格 SemVer)

跟着做

步骤 1:安装 CLI 并确认版本

按你的操作系统任选其一(以官方安装页为准):

# Windows:winget install Helm.Helm  或  choco install kubernetes-helm
# macOS:brew install helm
# Linux:官方脚本一行安装
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# 全平台通用:直接下载二进制
# https://helm.sh/docs/intro/install/

验证:

helm version

应看到 version.BuildInfo{Version:"v3.x.x", ...},只有 Client 字段、没有 Server/Tiller——Tiller 是 Helm 2 的旧模型,见到「先装 Tiller」的教程请直接丢弃。

步骤 2:确认 kubectl 指向学习集群

kubectl config current-context
kubectl get nodes

应能列出节点。Helm 与 kubectl 共用 kubeconfig,current-context 指哪它连哪。养成肌肉记忆:任何 helm install 之前先看一眼 context。学习请用 minikube/kind/专用沙箱,严禁对生产执行本课示范操作。

步骤 3:添加仓库并搜索

# 添加 Bitnami(最常见的公共 Chart 源之一)
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# 在本地索引中搜索
helm search repo nginx
helm search repo redis

输出会列出 NAME、CHART VERSION、APP VERSION。注意两点:search repo 搜的是 你已 add 的源的本地索引,不是全网;发现新包可以用 helm search hub <关键词> 查 Artifact Hub,再决定是否 add。索引会过期,装之前习惯性 repo update。

步骤 4:导出默认 values 并审阅

helm show chart bitnami/redis            # 看元数据与说明
helm show values bitnami/redis > redis-values-default.yaml

打开导出的文件,找 architecture、replica.replicaCount、auth.enabled 这类键。你会直观感受到:默认 values 几百行,生产不可能靠手敲二十个 --set,正确姿势是 复制一份、只改差异、放进 Git 评审。

步骤 5:学习集群试装再卸载

# 仅学习环境!
helm install my-redis bitnami/redis \
  --set auth.enabled=false \
  --set replica.replicaCount=0

helm list
helm list -A                                   # 看所有命名空间
kubectl get pods -l app.kubernetes.io/instance=my-redis

# 观察 NOTES 输出:Helm 会打印连接提示

# 用完即删,保持环境干净
helm uninstall my-redis

应看到 install 后 Release 出现在 helm list,Pod 标签带 app.kubernetes.io/instance=my-redis;uninstall 后列表清空。体验一下 NOTES.txt——它是 Chart 作者留给用户的「装完之后怎么办」说明书。

步骤 6:分清两个版本号

helm show chart bitnami/redis | grep -iE "version|appVersion"
# Windows PowerShell: helm show chart bitnami/redis | Select-String -Pattern "version"

笔记写死:「升级 Chart 包装看 version;关心应用软件代际看 appVersion。二者经常不同步,以 Chart 的变更说明为准。」这个区分在后面读 Argo CD 界面、读镜像更新公告时都会用到。

讲清楚要点

  1. 因为 Helm 3 无 Tiller,所以装 Chart 的权限 = 你的 kubeconfig 能改哪些资源——RBAC 拒绝时,helm install 与 kubectl apply 的报错一模一样,排障思路也一致。
  2. 因为公共 Chart 来自 repo 索引,所以先 repo add 再 search,并定期 repo update——过期索引会找到已被撤下或带漏洞的旧版本。
  3. 因为默认 values 很长,所以用 helm show values 导出再改,而不是背参数——差异文件可以进 Git、可以评审、可以复现,这正是后面 GitOps 的原料。
  4. 因为 --set 适合临时试验,不适合作为生产真相源,所以正式环境用 -f values.yaml——--set 会散落在 shell 历史和 CI 日志里,且复杂类型(列表、嵌套)表达力差。
  5. 因为 Chart version 与 appVersion 职责不同,所以排障先问「包版本还是应用版本」——「升了 Chart 但应用没变」或「应用变了但 Chart 没重新打包」都是这里混淆出来的。
  6. 因为试装会在集群留下资源,所以学完必须 helm uninstall 或清理专用命名空间——残留的 Release 会让后面的课出现「幽灵资源」干扰判断。

你可能会懵的地方

  • helm search hub 和 search repo 有什么区别? search repo 查本地已添加仓库的索引(离线可用);search hub 查 Artifact Hub 在线索引(需网络)。日常团队内源用 repo;发现新包先 hub 再决定 add。

  • 为什么官方强调不要把生产密钥塞进 --set? --set 会进 shell 历史与 CI 日志,泄漏面大;values 文件若进 Git 也不能明文密钥。正确路径:K8s Secret / Sealed Secrets / External Secrets,values 里只写 Secret 的 名字。

  • 装 Helm 需要装「服务端」吗? 不需要。Helm 3 的「服务端」就是 Kubernetes API 本身;GitOps 场景下是 Argo/Flux 在集群内调用 Helm 渲染逻辑,同样不是 Tiller。见到「helm init」的资料一律视为 Helm 2 过时内容。

  • Bitnami 仓库是官方唯一的源吗? 否。还有 ingress-nginx、prometheus-community、grafana、各云厂商以及自建 HTTP/OCI 仓库(helm push 到 Harbor/ACR 已是主流)。选型看维护活跃度、values 文档质量、安全公告响应速度。

  • helm pull 和 helm install <repo>/<chart> 有何不同? pull 只下载(可 --untar 解包),用于审阅与归档;install 是渲染并创建 Release。审第三方 Chart 的模板代码是良好习惯——你要知道它装了什么资源。

错法对照

错法问题正解
未 repo update 就安装旧 Chart踩已知漏洞或弃用 API安装前 update,values 里钉住版本
生产用一长串 --set a=1,b=2,...不可评审、难复现-f values-prod.yaml 进 Git
kubeconfig 指向生产却跑 demo install污染生产环境先 current-context,用学习集群
分不清 Chart version / appVersion升错包或误以为应用已升级helm show chart 对照变更说明
试装后不 uninstall残留 Service/PVC 占资源学完卸载或删专用命名空间
网上抄的 helm init / Tiller 教程Helm 2 过时命令直接报错认准 Helm 3 文档

卡点急救

  1. 现象:helm: command not found——安装后 PATH 未刷新:重开终端;Windows 检查环境变量 Path 是否包含 Helm 安装目录( winget 默认在 ...\\Helm );用 helm version 验证。
  2. 现象:helm search repo 找不到刚 add 的包——忘了 helm repo update,或仓库 URL 写错;执行 helm repo list 核对 URL,再 helm repo update 刷新索引后重试。
  3. 现象:install 卡在 ImagePullBackOff——镜像拉不下来(网络/私有仓库凭证/tag 拼错);kubectl describe pod <pod> 看 Events 里的具体原因;学习环境可先换公共镜像验证 Chart 结构。

面试常问

  • Helm 3 相比 Helm 2 最大的变化是什么? 移除了集群内的服务端组件 Tiller。Helm 2 里 Tiller 需要集群级高权限,成为安全隐患与多租户瓶颈;Helm 3 改为 CLI 直接以当前 kubeconfig 身份调用 Kubernetes API,权限最小化、与 kubectl RBAC 一致。另外 Release 存储从 ConfigMap/Tiller 内部改到 Secret(sh.helm.release.v1.<name>.v<N>),支持 helm test、helm rollback 到任意 revision 等增强。

  • --set 和 -f 的优先级与取舍? 优先级:--set 最高,其次按 -f 传入顺序后者覆盖前者,最低是 Chart 默认 values.yaml。但生产不靠 --set:它不可评审、会进日志、复杂结构表达力差。工程实践是把差异固化为 values 文件进 Git,--set 仅限本地试验。

  • 如何安全地使用第三方 Chart? 四步:认准维护活跃的源(Bitnami/官方社区);helm show values 与 helm pull 审阅默认配置与模板;用 SemVer 约束或 Chart.lock 锁定版本;密钥类配置一律外部注入,不写进 values。升级前看 CHANGELOG 与 helm diff 插件输出的渲染差异。

自测三问

  1. Helm 3 为什么没有 Tiller?权限边界落在哪里?
  2. 写出从「添加仓库」到「导出默认 values」的最少命令序列。
  3. 为什么生产倾向 values 文件而不是 --set?这和后面的 GitOps 有什么关系?

小结一句话

装好 Helm 3 CLI、管好 repo、用 search/show/pull 发现与审阅 Chart,用 values 文件表达配置;学习集群可试装,生产配置进 Git 可评审——CLI 环境至此就绪。

延伸

  • Helm — Installing Helm
  • Helm — Helm Commands
  • 下一课:动手 helm create 生成 Chart 骨架,读懂目录结构并裁剪出 backend 的最小可用 Chart。
加载本节练习…
← 上一课为什么需要 Helm下一课 →Chart 目录结构