一、Helm介绍和使用场景

1.1 什么是Helm

Helm是Kubernetesl的包管理器,类似于Linux.上的apt或yum,可以用包的形式工程化管理和部署复杂的Kubernetes.应用程序,比如一键安装zookeeper集群、一键部署整个项目等。

Helm核心概念:

  • Helm:Helm的管理工具
  • Chart:Helm的包,是一个包含Kubernetes资源定义的安装文件包
  • Release:Helm每次部署会产生一个Release,可以用于回滚等
  • Repository:Helm Chart存储库,用于存储和分发Chart

1.2 Helm主要功能

Helm主要功能如下:

  • 资源管理:Helm Chart是一组预定义的YAML文件,描述了Kubernetes应用程序的各个组件配置与模板
  • 版本控制:Helm支持版本控制,可以轻松回滚到之前的版本
  • 依赖管理:Charts可以声明依赖关系,Helm可以自动解析并安装这些依赖
  • 模板化:Charts可以使用Go的模板语言,动态生成资源文件

1.3 Helm使用步骤

Day021-K8s资源管理与扩展-图1

维度 传统方式 Helm 方式
配置管理 手动修改文件,易出错 通过 values.yaml 集中管理,可版本控制
依赖处理 需手动安装依赖组件 自动解析依赖(如 Chart 中的 requirements.yaml
部署效率 步骤繁琐,适合单次部署 一键部署,适合重复操作(DevOps 流水线)
集群化支持 需手动配置节点和网络 内置集群模板(如 StatefulSet 配置)
维护成本 高(扩缩容、升级复杂) 低(支持 helm upgrade 和回滚)

适用场景:

  • 传统方式
  • 组件无现成 Helm Chart。
  • 需要深度定制化配置(如内核参数调优)。
  • Helm 方式
  • 标准化部署(如微服务、中间件)。
  • 多环境(开发、测试、生产)一致性要求高。

1.4 Helm安装

1.4.1 下载helm包

Helm官方安装文档:https://helm.sh/docs/intro/install/

Helm安装包:https://get.helm.sh/helm-v3.16.2-linux-amd64.tar.gz

1.打开Helm-3.16.2,点击【Linux amd64】下载压缩包

image-20250326154408180

说明:目前已更新至3.17.2版本

2.等待下载完成,将压缩包上传到linux机器上(可以使用xftp或者rz进行上传)

1.4.2 安装helm

1.解压压缩包

$ tar -zxvf helm-v3.16.2-linux-amd64.tar.gz
$ cd linux-amd64/
$ ls
helm  LICENSE  README.md

2.在解压目中找到helm程序,移动到需要的目录中

$ mv /root/linux-amd64/helm /usr/local/bin/helm

3.出现以下版本信息代表安装成功

[root@k8s-master01 ~]# helm  version
version.BuildInfo{Version:"v3.16.2", GitCommit:"13654a52f7c70a143b1dd51416d633e1071faffb", GitTreeState:"clean", GoVersion:"go1.22.7"}

1.4.3 添加稳定仓库

1.添加稳定仓库

$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm repo add stable https://charts.helm.sh/stable

2.验证仓库是否添加,观察到仓库已经添加

$ helm repo list
NAME    URL                               
bitnami https://charts.bitnami.com/bitnami
stable  https://charts.helm.sh/stable 

二、Helm仓库分类

2.1 Helm常用仓库类型

Helm 支持以下几种主流仓库类型:

1. HTTP/HTTPS 仓库(传统方式)

  • 说明:通过 HTTP 协议存储 Helm Chart 的仓库,是 Helm 早期的标准方案。
  • 典型实现chartmuseum、Nexus、Artifactory 等。
  • 特点:
  • 图表以压缩包(.tgz)形式存储在服务器目录中。
  • 通过 index.yaml 文件索引图表元数据。
  • 支持基本认证(如用户名 / 密码)或 API 密钥。

2. OCI 仓库(Open Container Initiative)

  • 说明:基于容器镜像标准(OCI Image Spec)的仓库,Helm 3.4+ 开始支持。
  • 典型实现:Docker Hub、Harbor、Amazon ECR、Google GCR 等。
  • 特点:
  • 图表作为容器镜像的一层存储(application/vnd.helm.chart 媒体类型)。
  • 兼容容器生态的认证、镜像签名、分层存储等特性。

3. 其他类型

  • 本地仓库:直接引用本地目录或压缩包(如 helm install ./mychart)。
  • Git 仓库:通过 Git URL 引用 Chart(需 helm pull --git 命令)。

2.2 Helm常用仓库类型对比

1、访问方式对比

维度 chartmuseum(HTTP 仓库) OCI 仓库
仓库地址格式 http(s)://<host>/<path>(如 http://chartmuseum:8080 oci://<registry>/<repo>(如 oci://ghcr.io/org/helm-charts
认证方式 基本认证(helm repo add --username --password Docker 认证(helm registry login.docker/config.json
存储位置 独立服务器存储 Chart 压缩包 容器注册表存储镜像(含 Chart 层)

2、命令行操作对比

(1)添加仓库

chartmuseum

helm repo add my-chartmuseum http://chartmuseum:8080 \
  --username myuser --password mypass  # 可选认证

OCI 仓库

# 登录(可选,自动读取 ~/.docker/config.json)
helm registry login ghcr.io --username myuser --password mypass

# 无需显式添加仓库,直接引用 OCI 地址

(2)安装Chart

chartmuseum

helm install my-app my-chartmuseum/mychart --version 2.0.0

OCI 仓库

# 完整格式
helm install my-app oci://ghcr.io/org/mychart --version 2.0.0

# 简写(需提前通过 helm repo add 关联 OCI 仓库)
helm repo add my-oci-repo oci://ghcr.io/org
helm install my-app my-oci-repo/mychart --version 2.0.0

(3)推送Chart

chartmuseum

helm package mychart  # 打包
helm push mychart-2.0.0.tgz my-chartmuseum

OCI 仓库

helm package mychart --version 2.0.0
helm push mychart-2.0.0.tgz oci://ghcr.io/org/mychart

(4)列出仓库Chart

chartmuseum

helm search repo my-chartmuseum

OCI 仓库

helm search registry oci://ghcr.io/org

3、优缺点对比

维度 chartmuseum OCI 仓库
生态集成 专用于 Helm,需独立部署和维护 与容器生态(如 Docker、K8s)深度集成,无需额外组件
存储效率 每个 Chart 单独存储,可能有冗余 利用容器镜像分层存储,节省空间
安全性 支持基本认证和 TLS,但需额外配置 支持镜像签名、细粒度权限控制(如 Docker 角色)
学习成本 命令与 Helm 传统方式一致,上手快 需熟悉 OCI 命令(如 helm registry

4、小结

  • 推荐场景:
  • chartmuseum:适合自建 K8s 集群内部使用,快速搭建 Helm 仓库。
  • OCI 仓库:适合与容器镜像统一管理,或使用公有云注册表(如 ECR、ACR)。
  • 趋势:OCI 是 Helm 官方推荐的未来方向,与容器生态的兼容性更强,但 chartmuseum 仍在传统场景中广泛使用。