Skip to content

Helm 入门系列 08:灵活定制——Helm 扩展能力解锁,零改造适配 K8s

约 1779 字大约 6 分钟

Helm 入门系列云原生Helm

2026-03-31

日常用 Helm 部署 K8s 应用时,原生的 installrepo 等命令虽能满足基础需求,但面对定制化场景(比如加密密钥、标准化 Chart 模板、适配私有仓库协议)就略显吃力。好在 Helm 提供了插件启动程序(Starter) 两大扩展机制——不用修改 Helm 源码,就能轻松定制 CLI 功能、标准化 Chart 生成流程,完美适配企业独特的 K8s 交付工作流。

本文就带你吃透这两大扩展能力,让 Helm 完全贴合你的使用场景。

一、Helm 插件:给 CLI 加“自定义功能按钮”

Helm 插件是扩展 CLI 能力的核心方式,本质是给 Helm 新增自定义子命令,可集成密钥管理、Chart 备份、私有仓库认证等场景化功能,全程无需改动 Helm 源码。

1. 开箱即用:安装现成的第三方插件

社区已沉淀大量成熟插件,覆盖高频场景,直接安装就能解决80%的定制化需求:

插件名称核心用途(通俗版)
helm-2to3把 Helm 2 部署的应用无缝迁移到 Helm 3,无需重新部署
helm-secrets加密 values.yaml 里的密码/密钥,避免明文泄露
helm-backup备份 Helm 发布元数据,删错应用能快速恢复
helm-mapkubeapis更新废弃的 K8s API 版本,避免应用部署失败

核心操作命令

安装、管理插件的命令极简,记住这几个就够:

# 基础安装(指定 Git 仓库地址)
helm plugin install https://github.com/jkroepke/helm-secrets.git
# 指定版本安装(避免新版本兼容性问题)
helm plugin install https://github.com/jkroepke/helm-secrets.git --version v4.4.2

# 查看已安装插件
helm plugin list
# 更新插件到最新版本
helm plugin update helm-secrets
# 卸载插件
helm plugin remove helm-secrets

2. 核心用法:插件 = 自定义 Helm 子命令

安装插件后,会自动新增一个与插件名一致的 Helm 子命令,和原生命令无缝兼容:

# 用 helm-secrets 加密敏感配置文件
helm secrets enc values.secret.yaml

甚至不用记额外用法:输 helm help 能看到插件子命令,输 helm secrets help 可查看插件专属帮助文档。

3. 5分钟上手:写一个自定义插件

插件开发无语言限制(Shell、Go、Python 均可),核心只需两个文件:插件逻辑脚本 + plugin.yaml 配置清单。

步骤1:搭建极简目录结构

my-plugin/
├── plugin.yaml  # 插件配置(必需)
└── inspect-templates.sh  # 插件逻辑(Shell 脚本示例)

步骤2:编写插件逻辑(提取 Chart 核心信息)

以“快速提取 Chart 里的容器镜像/端口”为例,写一个简单的 Shell 脚本:

# inspect-templates.sh
#!/bin/bash

# 校验参数:必须传入 Chart 路径
if [ $# -eq 0 ]; then
  echo "请指定 Chart 目录/归档文件!" >&2
  exit 1
fi

# 渲染模板并提取镜像、端口信息
echo "=== Chart 核心配置 ==="
helm template --dry-run myapp $1 | grep -E 'image:|containerPort:' | sort -u

给脚本加执行权限:chmod +x inspect-templates.sh

步骤3:编写插件配置(plugin.yaml)

这个文件告诉 Helm “插件叫什么、怎么用、执行哪个脚本”:

name: inspect-templates  # 插件名(即 Helm 子命令名)
version: 0.1.0           # 版本号(遵循 SemVer 规范即可)
usage: "快速提取 Chart 中的镜像和端口"  # 简短说明
description: "无需手动翻模板文件,一键查看 Chart 核心配置"
command: ./inspect-templates.sh  # 要执行的脚本路径

步骤4:安装并测试插件

# 安装本地插件
helm plugin install ./my-plugin
# 测试:解析 anvil Chart 的核心信息
helm inspect-templates ./anvil

输出示例(一眼看到关键配置):

=== Chart 核心配置 ===
containerPort: 80
image: "example/anvil:1.0.0"

4. 进阶特性:适配复杂场景

插件还支持这些“隐藏技能”,应对企业级需求:

  • 跨平台适配:在 plugin.yaml 中配置 platformCommands,为 Linux/Mac/Windows 指定不同执行文件;
  • 生命周期钩子:安装/更新/删除插件时自动执行脚本(比如下载对应平台的二进制文件);
  • 自定义下载器:适配私有 Chart 仓库的特殊协议(如带 Bearer Token 认证的仓库);
  • Shell 自动补全:配置后按 Tab 就能补全插件命令/参数,提升使用效率;
  • 环境变量复用:Helm 会自动传递 HELM_NAMESPACEHELM_PLUGIN_DIR 等变量,插件可直接使用。

二、Helm 启动程序:标准化 Chart 模板,告别重复造轮子

日常新建 Chart 时,每次都要改 deploymentservice 模板,还容易出现团队规范不统一的问题。启动程序就是“定制化 Chart 模板”,用 helm create 时指定启动程序,可一键生成符合团队规范的 Chart。

1. 把普通 Chart 改成启动程序(核心1步)

任何标准 Chart 都能转成启动程序,关键是将硬编码的 Chart 名替换为占位符 <CHARTNAME>(Helm 会自动替换为新 Chart 名)。

比如原模板硬写了 Chart 名 basic-webapp

# 原始模板
metadata:
  name: basic-webapp-{{ .Release.Name }}
  labels:
    app: basic-webapp

替换为占位符后:

# 启动程序模板
metadata:
  name: <CHARTNAME>-{{ .Release.Name }}
  labels:
    app: <CHARTNAME>

2. 安装启动程序

启动程序需放到 Helm 指定目录,先查目录路径,再复制模板:

# 查看 Helm 数据目录(启动程序需放在该目录的 starters 下)
helm env HELM_DATA_HOME  # 示例输出:~/.local/share/helm

# 创建 starters 目录并复制启动程序
mkdir -p ~/.local/share/helm/starters
cp -r ./basic-webapp ~/.local/share/helm/starters/

3. 用启动程序生成新 Chart

一行命令就能生成符合规范的新 Chart,<CHARTNAME> 会自动替换为新名称:

# 生成 my-webapp Chart,基于 basic-webapp 启动程序
helm create my-webapp --starter basic-webapp

生成后的模板里,所有占位符都变成了 my-webapp,无需手动修改。

4. 启动程序最佳实践

  1. 标准化模板:把团队规范(如资源限制、标签格式、安全上下文)写进启动程序,确保所有 Chart 统一;
  2. 分类创建:为 StatefulSet、Job、微服务分别制作启动程序,按需选用;
  3. 版本控制:将启动程序纳入 Git 管理,方便团队共享和迭代更新。

三、插件 vs 启动程序:怎么选?

场景需求推荐方案
新增 Helm CLI 功能(加密、备份、自定义仓库下载)插件
标准化 Chart 模板,简化新项目初始化启动程序

四、总结

Helm 的插件和启动程序,是“零改造扩展”的核心抓手:

  • 插件解决 CLI 功能定制问题,适配密钥管理、私有仓库等场景;
  • 启动程序解决 Chart 模板标准化问题,提升团队协作效率。

无需修改 Helm 源码,就能让 Helm 完美适配企业的 K8s 交付流程,大幅降低定制化成本,同时保证部署规范和效率。

下一篇我们将聊聊 Helm 生产环境的避坑指南,敬请期待~