helm3-完整安装配置教程

Helm3 完整安装+配置教程

·15 分钟阅读·5655 字
📋 目录

Helm3 完整安装+配置教程

核心概念 Helm 3 彻底移除 Tiller,纯客户端运行,通过 kubeconfig 直接调用 apiserver,是生产标准部署方式。

1. 前置说明

当前生产统一使用 Helm 3,已废弃 Helm2(带Tiller,架构缺陷),下文全部基于 Helm 3.14+ 稳定版。
环境:CentOS / Ubuntu,Kubernetes 1.24+,containerd。

一、Helm 客户端安装(单机安装,只需装本地工具)

2. 方式1:官方脚本一键安装(推荐,通用)

# 下载执行官方安装脚本
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# 验证安装
helm version

输出类似代表成功:

version.BuildInfo{Version:"v3.15.2", GitCommit:"...", GoVersion:"go1.22.4"}

3. 方式2:手动二进制包安装(离线内网环境)

  1. 下载对应系统安装包:
    https://github.com/helm/helm/releases
    示例 linux amd64:helm-v3.15.2-linux-amd64.tar.gz
# 解压
tar -zxvf helm-v3.15.2-linux-amd64.tar.gz
# 移动二进制到系统PATH
mv linux-amd64/helm /usr/local/bin/
# 赋权
chmod +x /usr/local/bin/helm
# 验证
helm version

4. 方式3:yum/apt包管理器

# CentOS/RHEL
yum install helm -y

# Ubuntu
apt update && apt install helm -y

5. 环境变量补全(可选,方便运维)

5.1. 命令自动补全

# bash
helm completion bash > /etc/bash_completion.d/helm
source /etc/profile

# zsh
helm completion zsh > ~/.zsh/_helm
source ~/.zshrc

5.2. 配置helm全局缓存目录(多用户/离线场景)

helm 默认缓存路径:~/.cache/helm
可自定义环境变量永久修改:

echo 'export HELM_CACHE_HOME=/data/helm/cache' >> /etc/profile
echo 'export HELM_CONFIG_HOME=/data/helm/config' >> /etc/profile
echo 'export HELM_DATA_HOME=/data/helm/data' >> /etc/profile
source /etc/profile

二、核心前置依赖:kubeconfig 连通集群

helm 本身无服务端,完全依赖本地 kubeconfig 访问 apiserver。

6. 默认读取规则

helm 自动读取:~/.kube/config

7. 多集群切换方式

7.1. 方式A:环境变量指定kubeconfig

export KUBECONFIG=/root/kube-prod.config
helm list -n default

7.2. 方式B:切换kubectl上下文(helm共用)

kubectl config use-context prod-cluster
helm list

8. 校验连通性

helm ls --all-namespaces
# 无报错、正常列出release代表集群连通正常

三、仓库 Repo 配置(最常用配置)

9. 基础命令语法

# 添加仓库
helm repo add [仓库名] [仓库地址]
# 更新仓库索引(拉取chart列表)
helm repo update
# 查看已添加仓库
helm repo list
# 删除仓库
helm repo remove [仓库名]

10. 常用公有仓库示例

# Bitnami 主流中间件 mysql/redis/nginx
helm repo add bitnami https://charts.bitnami.com/bitnami
# NVIDIA GPU Operator
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
# Prometheus Operator
helm repo add prom-community https://prometheus-community.github.io/helm-charts
# 更新所有源
helm repo update

11. 私有OCI仓库(Harbor,企业主流)

Helm3 原生支持 OCI 镜像仓库,替代旧ChartMuseum:

# 登录harbor OCI仓库
helm registry login harbor.example.com -u admin -p Harbor12345
# 拉取私有chart
helm pull oci://harbor.example.com/library/mysql --version 9.0.0
# 直接安装OCI chart
helm install mysql oci://harbor.example.com/library/mysql -n db

12. 仓库搜索、查看参数

# 搜索mysql
helm search repo mysql
# 查看chart默认values配置
helm show values bitnami/mysql
# 查看chart详细信息
helm show chart bitnami/mysql

四、Chart 部署相关配置(安装/升级核心配置)

13. values 配置文件分层覆盖规则

优先级从低到高:

  1. chart 内置 values.yaml
  2. 自定义环境文件 -f values-dev.yaml-f values-prod.yaml
  3. 命令行临时覆盖 --set / --set-string / --set-json

示例多文件叠加:

# 基础通用配置 + 生产覆盖配置
helm install app ./mychart -n prod \
-f ./mychart/values.yaml \
-f ./values-prod.yaml

14. 常用覆盖参数示例

# 普通字符串/数字
helm upgrade app ./chart --set replicaCount=3
# 字符串避免自动转数字
--set-string image.tag="v1.2.0"
# 数组覆盖
--set env[0].name="HTTP_PROXY",env[0].value="http://proxy:8080"
# json复杂结构
--set-json resources.limits='{"cpu":"2","memory":"4Gi"}'
# 布尔开关
--set ingress.enabled=true

15. 安装全局公共参数(运维必记)

-n/--namespace       指定命名空间
--create-namespace   不存在则自动创建ns
--dry-run            模拟安装,仅渲染不提交API,校验语法
--debug              输出完整渲染日志,排错用
--version            指定chart版本安装
--wait               等待所有pod就绪才返回(超时5m)
--timeout 10m        自定义就绪等待超时
--atomic             安装失败自动回滚(生产强烈推荐)
--cleanup-on-fail    失败清理资源

生产标准安装命令模板:

helm install web ./web-chart -n online \
-f values-prod.yaml \
--version 1.2.0 \
--wait --timeout 5m --atomic

五、生产环境高阶配置

16. 配置仓库本地缓存(离线机房)

内网无法访问外网源,提前pull chart到本地打包部署:

# 拉取chart到本地
helm pull bitnami/mysql --untar --version 9.0.0
# 本地目录直接安装,无需外网仓库
helm install mysql ./mysql -n db

17. 依赖管理配置(Chart内部子依赖)

Chart.yaml 中定义依赖:

dependencies:
  - name: redis
    repository: "oci://harbor.example.com/bitnami"
    version: "18.x.x"
    condition: redis.enabled

下载依赖到本地 charts/ 目录:

helm dependency update ./mychart
# 校验依赖完整性
helm dependency build ./mychart

18. values.schema.json 参数校验配置

在Chart目录新建 values.schema.json,限制参数类型、必填项,安装前自动校验,避免配置错误:

{
  "$schema": "https://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "replicaCount": {
      "type": "integer",
      "minimum": 1
    },
    "image.repository": {
      "type": "string"
    }
  },
  "required": ["image.repository"]
}

执行安装时自动校验,参数非法直接终止发布。

19. 全局TLS/代理配置(内网代理环境)

19.1. (1)全局HTTP代理

# 永久写入环境变量
echo 'export HTTP_PROXY=http://10.0.0.10:8080' >> /etc/profile
echo 'export HTTPS_PROXY=http://10.0.0.10:8080' >> /etc/profile
echo 'export NO_PROXY=127.0.0.1,localhost,.svc.cluster.local' >> /etc/profile
source /etc/profile

19.2. (2)私有仓库自签证书

存放证书到系统信任目录,或指定证书文件:

helm registry login harbor.example.com --ca-file /etc/pki/harbor.crt

六、RBAC 权限配置(多租户集群核心配置)

helm 无独立权限体系,完全复用 k8s RBAC,需要给执行helm的账号分配对应权限。

20. 场景:开发仅拥有test命名空间部署权限

  1. 创建serviceAccount、Role、RoleBinding
apiVersion: v1
kind: ServiceAccount
metadata:
  name: helm-user
  namespace: test
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: test
  name: helm-deploy
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["create","update","patch","delete","get","list","watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: test
  name: helm-deploy-bind
subjects:
- kind: ServiceAccount
  name: helm-user
roleRef:
  kind: Role
  name: helm-deploy
  apiGroup: rbac.authorization.k8s.io
  1. 导出sa token作为kubeconfig,给开发使用helm操作test命名空间。

七、CI/CD流水线标准配置(企业自动化)

  1. 流水线预装helm客户端;
  2. 注入kubeconfig secret到CI环境;
  3. 内置私有Harbor OCI登录凭证;
  4. 发布流程标准步骤:
# 1. 更新依赖
helm dependency update ./chart
# 2. 语法、参数校验
helm lint ./chart
# 3. 模拟渲染校验
helm template ./chart -f values-prod.yaml
# 4. 正式升级,失败自动回滚
helm upgrade --atomic --wait app ./chart -f values-prod.yaml

八、常见配置问题排查

  1. helm connect refused / apiserver 连接失败
    检查kubeconfig、集群LB、安全组是否放行6443端口;
  2. pull chart 超时
    配置HTTP代理或切换内网私有仓库;
  3. OCI仓库登录证书报错
    导入Harbor自签CA证书,或命令指定—ca-file;
  4. 权限不足 forbidden
    给当前ServiceAccount补充对应命名空间RBAC权限;
  5. 模板渲染报错缩进/变量不存在
    使用 helm template --debug 输出详细报错定位模板行。