两种仓库类型对比
| 特性 | 传统 HTTP 仓库 | OCI 注册表(推荐) |
|---|---|---|
| 协议 | HTTP,index.yaml 索引 | OCI Distribution Spec |
| 存储后端 | Chart Museum、GCS、S3 | 任意 OCI Registry(Harbor、GHCR、ECR) |
| 认证 | Basic Auth / Token | 标准 Docker 认证机制 |
| 安全性 | 需要额外配置 | 内置内容寻址、签名支持(cosign) |
| Helm 支持 | 从 Helm 2 开始 | Helm 3.8.0+ GA(正式可用) |
| URL 格式 | https://charts.example.com | oci://registry.example.com/charts |
Chart Museum:自托管 HTTP 仓库
Chart Museum 是最流行的自托管 Helm Chart 仓库服务器,支持多种存储后端。
# 使用 Helm 安装 Chart Museum
helm repo add chartmuseum https://chartmuseum.github.io/charts
helm install chartmuseum chartmuseum/chartmuseum \
--set env.open.STORAGE=local \
--set env.open.DISABLE_API=false \
--namespace helm-system --create-namespace
# 打包 Chart 为 .tgz
helm package ./mychart
# 生成 mychart-1.0.0.tgz
# 推送到 Chart Museum(使用 helm-push 插件)
helm plugin install https://github.com/chartmuseum/helm-push
helm cm-push mychart-1.0.0.tgz my-chartmuseum
# 或者直接用 HTTP API
curl --data-binary "@mychart-1.0.0.tgz" http://chartmuseum.example.com/api/charts
# 添加仓库并安装
helm repo add my-chartmuseum http://chartmuseum.example.com
helm repo update
helm install myapp my-chartmuseum/mychart
OCI 注册表:helm push / pull
Helm 3.8.0 起 OCI 支持正式 GA,可以将 Chart 存储在任何 OCI 兼容的注册表(如 Docker Hub、Harbor、GHCR、AWS ECR、GCP Artifact Registry)中。
# 打包 Chart
helm package ./mychart
# 生成 mychart-1.2.0.tgz
# 登录 OCI 注册表(以 Harbor 为例)
helm registry login harbor.example.com \
--username admin \
--password mypassword
# 推送到 OCI 注册表
# 格式:oci://registry/project/chartname
helm push mychart-1.2.0.tgz oci://harbor.example.com/myproject
# 从 OCI 注册表安装(不需要 helm repo add)
helm install myapp oci://harbor.example.com/myproject/mychart \
--version 1.2.0
# 从 OCI 下载 Chart(不安装)
helm pull oci://harbor.example.com/myproject/mychart \
--version 1.2.0 --untar
# 查看 OCI 注册表中的 Chart 信息
helm show chart oci://harbor.example.com/myproject/mychart --version 1.2.0
GitHub Container Registry(GHCR)作为 Chart 仓库
使用 GitHub Actions 自动打包并推送 Chart 到 GHCR,零成本搭建公共 OCI Chart 仓库。
# .github/workflows/helm-release.yml
name: Helm Chart Release
on:
push:
tags:
- 'v*' # 触发:推送 v* 标签时
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write # 推送 GHCR 需要 write 权限
steps:
- uses: actions/checkout@v4
- name: Set up Helm
uses: azure/setup-helm@v3
- name: Login to GHCR
run: |
echo "${{ secrets.GITHUB_TOKEN }}" | \
helm registry login ghcr.io -u ${{ github.actor }} --password-stdin
- name: Package and Push Chart
run: |
helm dependency update ./chart
helm package ./chart --version ${{ github.ref_name }}
helm push mychart-*.tgz oci://ghcr.io/${{ github.repository_owner }}/charts
# 从 GHCR 安装 Chart(公共仓库无需登录)
helm install myapp oci://ghcr.io/myorg/charts/mychart --version v1.2.0
Artifact Hub:发布公共 Chart
Artifact Hub (artifacthub.io) 是 CNCF 托管的包发现平台。通过添加一个简单的元数据文件,让全球用户搜索到你的 Chart。
# artifacthub-repo.yml(放在仓库根目录或 charts/ 目录)
repositoryID: your-repo-id # 在 Artifact Hub 注册后获得
owners:
- name: Your Name
email: you@example.com
发布到 Artifact Hub 的流程 1. 在 artifacthub.io 注册账号 │ 2. 添加仓库(填写仓库 URL,支持 HTTP 和 OCI) │ 3. 添加 artifacthub-repo.yml 到仓库 │ 4. Artifact Hub 定期爬取仓库,自动更新 Chart 列表 │ 5. 用户可在 artifacthub.io 搜索并 helm install
版本策略:SemVer
Helm Chart 版本严格遵循 Semantic Versioning (SemVer 2.0):MAJOR.MINOR.PATCH。
^1.2.3(>=1.2.3 <2.0.0),~1.2.3(>=1.2.3 <1.3.0),>=1.0.0 <2.0.0,1.x.x。实战:搭建私有 Chart 仓库
# 方案:使用 Harbor(企业级 OCI 注册表)搭建私有 Helm 仓库
# 1. 安装 Harbor(通过 Helm)
helm repo add harbor https://helm.goharbor.io
helm install harbor harbor/harbor \
-f harbor-values.yaml \
--namespace harbor --create-namespace
# 2. 在 Harbor 创建 project "charts"
# (通过 Harbor Web UI 或 API 完成)
# 3. 登录 Harbor
helm registry login harbor.company.internal \
-u admin -p Harbor12345
# 4. 开发 Chart 并打包
helm create my-service
# ... 编写模板 ...
helm package my-service
# 5. 推送到私有仓库
helm push my-service-1.0.0.tgz oci://harbor.company.internal/charts
# 6. 在 K8s 集群中拉取并安装
helm install my-service oci://harbor.company.internal/charts/my-service \
--version 1.0.0 \
-f values-prod.yaml
生产环境建议对 Chart 进行签名,防止供应链攻击。使用 helm package --sign --key mykey --keyring ~/.gnupg/secring.gpg mychart 签名,安装时用 helm install --verify 验证。更现代的方案是使用 cosign 对 OCI artifact 签名。
Helm 支持传统 HTTP 仓库(Chart Museum)和现代 OCI 注册表两种分发方式。OCI 是未来趋势,与 Docker Registry 基础设施统一,支持内容寻址和镜像签名。GitHub Container Registry 是零成本托管公共 Chart 的最佳选择。企业私有部署推荐 Harbor(OCI + HTTP 双协议支持)。Chart 版本严格遵循 SemVer,version 管理 Chart 本身,appVersion 描述应用版本,两者独立演进。