Skip to content

kubernetes学习笔记-helm

简介

Helm 是 Kubernetes 的包管理器,类似于 Linux 下的 aptyum,可以方便地管理 Kubernetes 中的应用程序。Helm 通过 charts(预打包的 Kubernetes 资源集合)来实现应用的安装、升级、版本控制等。


安装 Helm

手动安装

1. 下载 Helm 安装脚本

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3

2. 赋予安装脚本执行权限

chmod 700 get_helm.sh

3. 执行安装脚本

./get_helm.sh

或者直接执行:

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

添加 Helm Chart 仓库

Helm 支持多个仓库,以下是添加常用仓库的命令:

# 添加 Bitnami 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami

# 国内常用的 Helm 仓库
helm repo add aliyuncs https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add kaiyuanshe http://mirror.kaiyuanshe.cn/kubernetes/charts
helm repo add azure http://mirror.azure.cn/kubernetes/charts
helm repo add dandydev https://dandydeveloper.github.io/charts

更新 Helm 仓库

通过以下命令更新所有已添加的 Helm 仓库:

helm repo update

查看已添加的 Helm 仓库

查看当前 Helm 仓库列表:

helm repo list

删除 Helm 仓库

删除指定仓库:

helm repo remove <repo-name>

例如,删除 bitnami 仓库:

helm repo remove bitnami

查看 Helm Charts 列表

helm list

全网仓库查询

通过 helm search hub 从 Artifact Hub 查询 Helm Charts:

helm search hub mysql

从本地仓库查询

查询已添加的本地 Helm 仓库中的 Charts:

helm search repo mysql

拉取 Helm Chart 包

拉取指定版本的 Helm Chart 包:

helm pull azure/mysql --version 0.3.5

安装 Helm Chart

安装 Chart 时,可以通过 --set 参数传递自定义值,或直接使用 helm install 安装:

示例 1:指定 release 名称安装

helm install test-mysql azure/mysql

示例 2:让 Helm 随机生成 release 名称

helm install aliyuncs/mysql --generate-name

示例 3:指定命名空间安装

helm install aliyuncs/mysql --namespace my-namespace

示例 4:若命名空间不存在,则创建新的命名空间

helm install aliyuncs/mysql --namespace my-namespace --create-namespace

卸载 Helm Chart

helm uninstall <release-name>

例如,卸载 test-mysql

helm uninstall test-mysql

查询 Helm Chart 状态

helm status <release-name>

例如,查询 my-nginx 状态:

helm status my-nginx

自定义 Helm Chart

查询 Chart 的可配置项

使用 helm show values 查看某个 Chart 的默认配置项:

helm show values azure/mysql

该命令会列出该 Chart 支持的所有配置项,如:

  • MySQL 镜像版本、root 密码、数据库名称等。
  • 持久化配置、资源请求和限制等。

修改配置并安装

可以通过 --set 参数覆盖 Chart 中的默认值:

helm install --set mysqlRootPassword=test1234,mysqlDatabase=testdb,service.nodePort=32001,service.type=NodePort test-mysql azure/mysql

在上述命令中,mysqlRootPasswordmysqlDatabaseservice.nodePort 是需要自定义的配置项。


更新 Helm Chart

helm upgrade <release-name> --set <key1>=<value1>,<key2>=<value2> <chart-name>

例如,更新 test-mysqlmysqlRootPassword

helm upgrade test-mysql --set mysqlRootPassword=test1234 azure/mysql

查看 Helm Chart 修订历史

查看 release 的修订历史:

helm history <release-name>

例如,查看 test-mysql 的修订历史:

helm history test-mysql

回滚 Helm Chart

回滚到指定版本:

helm rollback <release-name> <revision-number>

例如,回滚 test-mysql 到第 1 版本:

helm rollback test-mysql 1

查看 Helm 帮助信息

查看 Helm 的帮助信息:

helm get -h

常见问题及解决方案

1. K3s 使用 Helm 出现连接失败

# 错误信息
Error: Kubernetes cluster unreachable: Get "http://127.0.0.1:8080/version": read tcp 127.0.0.1:45436->127.0.0.1:8080: read: connection reset by peer

# 解决方案:临时
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

# 解决方案:永久(推荐,否则安装 Chart 时部分功能可能没有权限)
vi /etc/profile
# 最后一行写入
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
# 激活
source /etc/profile

2. Helm 安装 Chart 失败

# 错误信息
Error: INSTALLATION FAILED: unable to build kubernetes objects from release manifest: resource mapping not found for name: "test-mysql-mysql" namespace: "" from "": no matches for kind "Deployment" in version "extensions/v1beta1"

# 解决方案:换一个仓库的 Chart 或使用 `stable` 仓库中的 Chart

小结

  • Helm 是 Kubernetes 中的包管理器,便于安装、管理、升级、回滚等操作。
  • Charts 是 Helm 使用的包,包含 Kubernetes 资源的所有定义,支持自定义配置。
  • 通过 helm repo 可以管理 Helm 仓库,helm install 用于安装 Chart,helm upgradehelm rollback 用于更新和回滚。
  • 使用 helm uninstall 卸载已安装的 Chart。
  • 遇到连接问题时,需要确保配置正确,尤其是 KUBECONFIG 环境变量的设置。