kubernetes应用的包管理Helm工具
Helm是Kubernetes的包管理工具,用于管理Charts(包含Kubernetes应用配置的YAML文件集合)。本文介绍了Helm的安装部署、常用操作命令、Chart构建方法及版本管理。主要内容包括:通过官方资源安装Helm客户端并配置命令补全;使用helm search、install、upgrade等命令管理应用;构建包含Chart.yaml、values.yaml等文件的Chart目
目录
1 helm简介

-
Helm是Kubernetes 应用的包管理工具,主要用来管理 Charts,类似Linux系统的yum。
-
Helm Chart是用来封装Kubernetes原生应用程序的一系列YAML文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。
-
对于应用发布者而言,通过Helm打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。
-
对于使用者而言,使用Helm后可以以简单的方式在Kubernetes上查找、安装、升级、回滚、卸载应用程序。

2 部署helm
2.1 官网与软件资源
官网:Helm | 快速入门指南如何安装和开始使用Helm,包括Helm的介绍、FAQs和Helm插件
https://helm.sh/zh/docs/intro/quickstart/
软件资源:https://github.com/helm/helm/releases
https://github.com/helm/helm/releases

2.2 部署helm
2.2.1 安装helm
提前准备这两个资源包

tar zxf helm-v3.18.6-linux-amd64.tar.gz # 解压下载的资源包
ls # 查看是否解压成功
cd linux-amd64/ # 进入解压后的资源包
ls # 查看资源包内的启动文件
cp -p helm /usr/local/bin/ # 复杂启动文件到bin目录
helm version # 查看版本

2.2.2 配置helm命令补全
echo "source <(helm completion bash)" >> ~/.bashrc
source ~/.bashrc

3 helm常用操作
| 命令 | 描述 |
|---|---|
| create | 创建一个 chart 并指定名字 |
| dependency | 管理 chart 依赖 |
| get | 下载一个 release,可用子命令:all、hooks、manifest、notes、values |
| history | 获取 release 历史 |
| install | 安装一个 chart |
| list | 列出 release |
| package | 将 chart 目录打包到 chart 存档文件中 |
| pull | 从远程仓库中下载 chart 并解压到本地 # helm pull stable/mysql -- untar |
| repo | 添加,列出,移除,更新和索引 chart 仓库,可用子命令:add、index、 list、remove、update |
| rollback | 从之前版本回滚 |
| search | 根据关键字搜索 chart,可用子命令:hub、repo |
| show | 查看 chart 详细信息,可用子命令:all、chart、readme、values |
| status | 显示已命名版本的状态 |
| template | 本地呈现模板 |
| uninstall | 卸载一个 release |
| upgrade | 更新一个 release |
| version | 查看 helm 客户端版本 |
3.1 查询官方应用中心
helm search hub nginx # 在官方仓库中搜索
helm search repo nginx # 在本地仓库中搜索

3.2 管理第三方repo源
- 阿里云仓库:https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
- bitnami仓库:https://charts.bitnami.com/bitnami
- 微软仓库:Index of /kubernetes/charts/
- 官方仓库:https://hub.kubeapps.com/charts/incubator
# 添加阿里云仓库
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
# 添加bitnami仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
# 查看仓库信息
helm repo list
# 查看仓库存储helm清单
helm search repo aliyun
# 删除第三方存储仓库
helm repo list
helm repo remove aliyun


3.3 helm的使用方法
3.3.1 查找chart
helm search repo nginx

3.3.2 查看chart信息
helm show chart bitnami/nginx

3.3.3 安装chart包
helm install timinglee bitnami/nginx
helm list
# 查看pod的运行情况
kubectl get pods
# 查看项目的发布状态
helm status timinglee
# 卸载项目
helm uninstall timinglee
kubectl get pods
helm list



3.3.4 安装项目前预定义项目选项
# 拉取项目
helm pull bitnami/nginx
ls
tar zxf nginx-21.1.23.tgz
ls
cd nginx/
ls
ls templates/ # 项目模板
vim values.yaml # 项目变量文件
修改项目变量文件中第13行,添加本地仓库地址

修改第87行

拉取项目

创建本地项目


上传项目所需镜像到仓库

安装本地项目
# 安装时添加参数,允许非标准镜像
helm install timinglee . --set global.security.allowInsecureImages=true
24 allowInsecureImages: true
helm install timinglee .


更新项目
vim values.yaml
624 type: ClusterIP
751 enabled: true
763 hostname: myapp.timinglee.org
783 ingressClassName: "nginx"
# 更新项目
helm upgrade timinglee .
kubectl get svc


访问之前记得在/etc/hosts加入域名解析

查看历史项目
helm history timinglee

删除项目

4 构建helm中的chart包
4.1 Helm Chart目录结
[root@master helm]# helm create timinglee
Creating timinglee
[root@master helm]# ls
timinglee
[root@master helm]# tree timinglee/
timinglee/
├── charts # 目录里存放这个chart依赖的所有子chart
├── Chart.yaml # 用于描述这个 Chart 的基本信息,包括名字、描述信息以及版本等
├── templates # 目录里面存放所有 yaml 模板文件
│ ├── deployment.yaml
│ ├── _helpers.tpl # 放置模板助手的地方,可以在整个 chart 中重复使用
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml # 用于存储 templates 目录中模板文件中用到变量的值
3 directories, 10 files

4.2 构建方法
[root@master helm]# cd timinglee/
[root@master timinglee]# ls
charts Chart.yaml templates values.yaml
[root@master timinglee]# vim Chart.yaml
[root@master timinglee]# cat Chart.yaml
apiVersion: v2
name: timinglee
description: A Helm chart for Kubernetes
version: 0.1.0 # 项目版本
appVersion: "v1" # 软件版本
[root@master timinglee]# vim values.yaml
image:
repository: myapp
pullPolicy: IfNotPresent
tag: "v1"
ingress:
enabled: true
className: "nginx"
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: myapp.timinglee.org
paths:
- path: /
pathType: ImplementationSpecific
[root@master timinglee]# helm lint . # 语法检测
==> Linting .
[INFO] Chart.yaml: icon is recommended
1 chart(s) linted, 0 chart(s) failed
[root@master timinglee]# cd ..
[root@master helm]# helm package timinglee/ # 打包项目
Successfully packaged chart and saved it to: /root/helm/timinglee-0.1.0.tgz
[root@master helm]# ls
nginx nginx-21.1.23.tgz timinglee timinglee-0.1.0.tgz

部署项目本地项目
先删除已存在的 timinglee ServiceAccount,清除冲突
删除旧的冲突 Ingress(若已无用)
[root@master helm]# kubectl delete serviceaccounts timinglee -n default
serviceaccount "timinglee" deleted
[root@master helm]# kubectl delete ingress myapp-v1-ingress -n default
ingress.networking.k8s.io "myapp-v1-ingress" deleted
# 部署本地项目
[root@master helm]# helm install timinglee timinglee-0.1.0.tgz
[root@master helm]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 20d
timinglee ClusterIP 10.98.78.155 <none> 80/TCP 20s
[root@master helm]# vim /etc/hosts

5 构建helm仓库
5.1 在harbor仓库中构建一个公开的项目
在 Harbor 2.10 中,默认情况下不支持 Helm Chart 的管理功能。如果需要使用 Helm Chart 功能,可以通过启用 ChartMuseum 来实现。
启用 ChartMuseum 支持
在安装 Harbor 时,可以通过添加参数 --with-chartmuseum 来启用 Helm Chart 支持。
[root@harbor harbor]# docker-compose down
[root@harbor harbor]# ./install.sh --with-chartmuseum

5.2 安装helm push插件
官方网址:GitHub - chartmuseum/helm-push: Helm plugin to push chart package to ChartMuseum
5.2.1 在线安装
如果网络没问题情况下直接安装即可
[root@master helm]# dnf install git -y
[root@master helm]# helm plugin install https://github.com/chartmuseum/helm-push

5.2.2 离线安装
#创建helm plugin的存放目录
[root@master helm]# mkdir ~/.local/share/helm/plugins/helm-push -p
#解压push插件包到指定目录
[root@master helm]# tar zxf helm-push_0.10.4_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-push
[root@master helm]# ls ~/.local/share/helm/plugins/helm-push
bin LICENSE plugin.yaml
#查看helm调用命令是否成功
[root@master helm]# helm cm-push --help
Helm plugin to push chart package to ChartMuseum
Examples:
$ helm cm-push mychart-0.1.0.tgz chartmuseum # push .tgz from "helm package"
$ helm cm-push . chartmuseum # package and push chart directory
$ helm cm-push . --version="1.2.3" chartmuseum # override version in Chart.yaml
$ helm cm-push . https://my.chart.repo.com # push directly to chart repo URL
5.3 上传项目到仓库
5.3.1 添加仓库
[root@master helm]# helm repo add timinglee https://harbor.timinglee.org/chartrepo/timinglee
报错的原因是因为采用加密访问

为helm添加证书
[root@master helm]# cp /etc/docker/certs.d/harbor.timinglee.org/ca.crt /etc/pki/ca-trust/source/anchors/
[root@master helm]# update-ca-trust

重新添加仓库
[root@master helm]# helm repo add timinglee https://harbor.timinglee.org/chartrepo/timinglee

5.3.2 上传本地项目
#命令执行格式
helm cm-push <项目名称> <仓库名称> -u admin -p 123456
[root@master helm]# helm cm-push timinglee-0.1.0.tgz timinglee -u admin -p 123456
[root@master helm]# helm search repo timinglee
No results found
[root@master helm]# helm repo update timinglee
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "timinglee" chart repository
Update Complete. ⎈Happy Helming!⎈
[root@master helm]# helm install timinglee timinglee/timinglee
[root@master helm]# vim /etc/hosts
[root@master helm]# curl myapp.timinglee.org
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>



6 helm的版本迭代
6.1 从新构建新版本项目
[root@master helm]# vim timinglee/Chart.yaml
version: 0.2.0
appVersion: "v2"
[root@master helm]# vim timinglee/values.yaml
tag: "v2"
[root@master helm]# helm package timinglee
Successfully packaged chart and saved it to: /root/helm/timinglee-0.2.0.tgz

6.2 上传项目到helm仓库中
[root@master helm]# helm cm-push timinglee-0.2.0.tgz timinglee -u admin -p lee
Pushing timinglee-0.2.0.tgz to timinglee...
Done.
[root@master helm]# helm repo update timinglee
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "timinglee" chart repository
Update Complete. ⎈Happy Helming!⎈
[root@master helm]# helm search repo timinglee -l
NAME CHART VERSION APP VERSION DESCRIPTION
timinglee/timinglee 0.2.0 v2 A Helm chart for Kubernetes
timinglee/timinglee 0.1.0 v1 A Helm chart for Kubernetes


6.3 更新应用
# 应用更新
[root@master helm]# helm upgrade timinglee timinglee/timinglee
Release "timinglee" has been upgraded. Happy Helming!
NAME: timinglee
LAST DEPLOYED: Wed Sep 3 11:56:46 2025
NAMESPACE: default
STATUS: deployed
REVISION: 2
NOTES:
1. Get the application URL by running these commands:
http://myapp.timinglee.org/
[root@master helm]# curl myapp.timinglee.org
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
# 查看历史版本
[root@master helm]# helm history timinglee
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Wed Sep 3 11:44:09 2025 superseded timinglee-0.1.0 v1 Install complete
2 Wed Sep 3 11:56:46 2025 deployed timinglee-0.2.0 v2 Upgrade complete
# 应用回滚
[root@master helm]# helm rollback timinglee
Rollback was a success! Happy Helming!
[root@master helm]# helm history timinglee
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Wed Sep 3 11:44:09 2025 superseded timinglee-0.1.0 v1 Install complete
2 Wed Sep 3 11:56:46 2025 superseded timinglee-0.2.0 v2 Upgrade complete
3 Wed Sep 3 11:57:37 2025 deployed timinglee-0.1.0 v1 Rollback to 1
[root@master helm]# curl myapp.timinglee.org
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

恢复测试环境
[root@master helm]# helm uninstall timinglee
release "timinglee" uninstalled

到此helm的部署和简单的使用结束!
更多推荐
所有评论(0)