kubernetes的包的管理--helm
一 helm简介
Helm 是 Kubernetes 的包管理工具,就像 Linux 系统中的yum、apt一样,用来简化 Kubernetes 应用的部署、升级、回滚等操作。

如上图所示,Helm的工作流程总结如下:
- 开发者首先创建并编辑chart的配置;
- 接着打包并发布至Helm的仓库(Repository);
- 当管理员使用helm命令安装时,相关的依赖会从仓库下载;
- 接着helm会根据下载的配置部署资源至k8s;
1.1 Helm概念
| 概念 | 描述 |
|---|---|
| Chart | 一个Helm包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含Kubernetes集群中的服务定义,类似Homebrew中的formula、APT的dpkg或者Yum的rpm文件 |
| Repository | 存储Helm Charts的地方 |
| Release | Chart在k8s上运行的Chart的一个实例,例如,如果一个MySQL Chart想在服务器上运行两个数据库,可以将这个Chart安装两次,并在每次安装中生成自己的Release以及Release名称。 |
| Value | Helm Chart的参数,用于配置Kubernetes对象 |
| Template | 使用Go模板语言生成Kubernetes对象的定义文件 |
| Namespace | Kubernetes中用于隔离资源的逻辑分区 |
在了解了上述这些概念以后,我们就可以这样来解释 Helm:
Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。
1.2 Helm的目标
Helm管理名为chart的Kubernetes包的工具。Helm可以做以下的事情:
- 从头开始创建新的chart
- 将chart打包成归档(tgz)文件
- 与存储chart的仓库进行交互
- 在现有的Kubernetes集群中安装和卸载chart
- 管理与Helm一起安装的chart的发布周期
对于Helm,有三个重要的概念:
- chart 创建Kubernetes应用程序所必需的一组信息。
- config 包含了可以合并到打包的chart中的配置信息,用于创建一个可发布的对象。
- release 是一个与特定配置相结合的chart的运行实例。
1.3 Helm 架构流程
用户 → Helm客户端 → Helm库 → Kubernetes API Server → 集群资源
用户通过 Helm 客户端执行命令(如安装、升级),客户端将请求发送给 Helm 库,库负责处理逻辑(合并 Chart 和配置),再通过 Kubernetes API Server 操作集群资源,最终完成应用的部署或更新。
1.4 组件
Helm是一个可执行文件,执行时分成两个不同的部分:
Helm客户端 是终端用户的命令行客户端。负责以下内容:
- 本地chart开发
- 管理仓库
- 管理发布
- 与Helm库建立接口
- 发送安装的chart
- 发送升级或卸载现有发布的请求
Helm库 提供执行所有Helm操作的逻辑。与Kubernetes API服务交互并提供以下功能:
- 结合chart和配置来构建版本
- 将chart安装到Kubernetes中,并提供后续发布对象
- 与Kubernetes交互升级和卸载chart
独立的Helm库封装了Helm逻辑以便不同的客户端可以使用它。
二 部署helm
2.1 官网与资源
官网: https://helm.sh/zh/docs/intro/quickstart/
软件资源: https://github.com/helm/helm/releases
2.2部署helm
2.2.1 安装helm
# 解压下载的Helm安装包(以v3.19.0为例,根据实际版本修改)
[root@master ~]# tar xzf helm-v3.19.0-linux-amd64.tar.gz
# 进入解压后的目录(里面包含helm可执行文件)
[root@master ~]# cd linux-amd64/
# 查看目录内容:helm是核心程序,LICENSE是许可文件,README.md是说明
[root@master linux-amd64]# ls
helm LICENSE README.md
# 将helm程序复制到/usr/local/bin/(系统环境变量路径,确保全局可执行)
[root@master linux-amd64]# cp -p helm /usr/local/bin/
2.2.2 配置helm命令补齐
# 将helm的命令补齐脚本添加到bash配置文件(.bashrc),每次登录自动生效
[root@master linux-amd64]# echo "source <(helm completion bash)" >> ~/.bashrc
# 立即生效配置(不用重新登录)
[root@master linux-amd64]# source ~/.bashrc
# 验证安装:查看Helm版本,确认安装成功
[root@master linux-amd64]# helm version
version.BuildInfo{Version:"v3.19.0", GitCommit:"3d8990f0836691f0229297773f3524598f46bda6", GitTreeState:"clean", GoVersion:"go1.24.7"}
三 helm常用操作
3.1 查询Chart(从仓库找需要的应用)
# 在官方仓库(Artifact Hub)中搜索nginx相关的Chart
[root@master linux-amd64]# helm search hub nginx
URL CHART VERSION APP VERSION DESCRIPTION
https://artifacthub.io/packages/helm/cloudpirat... 0.4.0 1.29.3 Nginx is a high-performance HTTP server and rev...
https://artifacthub.io/packages/helm/wiremind/n... 2.1.1 An NGINX HTTP server [root@master helm]# helm search repo nginx #在本地仓库中搜索
3.2 管理第三方仓库(添加 / 删除仓库,获取更多 Chart)
- 阿里云仓库:https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
- bitnami仓库: https://charts.bitnami.com/bitnami
- 微软仓库:http://mirror.azure.cn/kubernetes/charts/
- 官方仓库: https://hub.kubeapps.com/charts/incubator
# 添加阿里云仓库,命名为aliyun
[root@master linux-amd64]# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts# 添加bitnami仓库,命名为bitnami
[root@master linux-amd64]# helm repo add bitnami https://charts.bitnami.com/bitnam# 查看aliyun仓库中的Chart
[root@master linux-amd64]# helm search repo aliyun# 删除aliyun仓库
[root@master linux-amd64]# helm repo remove aliyun
"aliyun" has been removed from your repositories# 查看当前已添加的仓库列表
[root@master linux-amd64]# helm repo list
NAME URL
bitnami https://charts.bitnami.com/bitnami [root@master linux-amd64]# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
"aliyun" has been added to your repositories[root@master linux-amd64]# helm repo list
NAME URL
bitnami https://charts.bitnami.com/bitnami aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
结果:repo add指定仓库名称和地址,repo list验证是否添加成功,repo remove清理无用仓库。
3.3 安装与卸载 Release(部署和删除应用)
3.3.1 安装本地 Chart(从已下载的 Chart 文件部署)
# xftp上传nginx-15.14.0.tgz ---Chart包
[root@master ~]# cd linux-amd64/
[root@master linux-amd64]# ls
helm LICENSE nginx-15.14.0.tgz README.md# 解压Chart包,查看内部结构
[root@master linux-amd64]# tar xzf nginx-15.14.0.tgz
[root@master linux-amd64]# ls
helm LICENSE nginx nginx-15.14.0.tgz README.md
[root@master linux-amd64]# cd nginx/
[root@master nginx]# ls
Chart.lock charts Chart.yaml README.md templates values.schema.json values.yaml# 安装Chart,指定Release名称为rch,Chart路径为/root/linux-amd64/nginx/
[root@master nginx]# cd ..
[root@master linux-amd64]# pwd
/root/linux-amd64
[root@master linux-amd64]# helm install rch /root/linux-amd64/nginx/
NAME: rch
LAST DEPLOYED: Wed Nov 5 19:33:05 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 15.14.0
APP VERSION: 1.25.4
...(省略部署说明)
结果:helm install就是安装应用
3.3.2 查看与卸载 Release
[root@master ~]# kubectl get pods #因为没有镜像,所以拉不下来
NAME READY STATUS RESTARTS AGE
rch-nginx-6df586ff45-smww4 0/1 Init:ImagePullBackOff 0 9m24s# 查看当前集群中所有的Release
[root@master ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
rch default 1 2025-11-05 19:33:05.713512831 +0800 CST deployed nginx-15.14.0 1.25.4 # 卸载Release(rch),会删除对应的Kubernetes资源(如Pod、Service)
[root@master ~]# helm uninstall rch
release "rch" uninstalled# 再次查看,确认已卸载
[root@master ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
[root@master ~]# kubectl get pods
结果:helm list查看已部署的应用,helm uninstall彻底删除应用及其资源,避免残留。
3.3.3 查看 Chart 详情
[root@master ~]# helm search repo nginx
NAME CHART VERSION APP VERSION DESCRIPTION
aliyun/nginx-ingress 0.9.5 0.10.2 An nginx Ingress controller that uses ConfigMap...
aliyun/nginx-lego 0.3.1 Chart for nginx-ingress-controller and kube-lego
bitnami/nginx 22.2.3 1.29.3 NGINX Open Source is a web server that can be a...
bitnami/nginx-ingress-controller 12.0.7 1.13.1 NGINX Ingress Controller is an Ingress controll...
bitnami/nginx-intel 2.1.15 0.4.9 DEPRECATED NGINX Open Source for Intel is a lig...
aliyun/gcloud-endpoints 0.1.0 Develop, deploy, protect and monitor your APIs ...# 查看aliyun仓库中nginx-ingress这个Chart的详细信息(版本、描述、来源等)
[root@master ~]# helm show chart aliyun/nginx-ingress
apiVersion: v1
appVersion: 0.10.2
description: An nginx Ingress controller that uses ConfigMap to store the nginx configuration.
icon: https://upload.wikimedia.org/wikipedia/commons/thumb/c/c5/Nginx_logo.svg/500px-Nginx_logo.svg.png
keywords:
- ingress
- nginx
maintainers:
- email: jack.zampolin@gmail.comname: jackzampolin
- email: mgoodness@gmail.comname: mgoodness
- email: chance.zibolski@coreos.comname: chancez
name: nginx-ingress
sources:
- https://github.com/kubernetes/ingress-nginx
version: 0.9.5
3.3.4 自定义安装配置(修改默认参数,适配实际环境)
# 创建values.yaml文件,自定义镜像仓库和版本(覆盖Chart的默认配置)
[root@master opt]# vim values.yaml
global:imageRegistry: "rch.hjn.com" # 自定义镜像仓库地址(如私有Harbor)
image:registry: docker.iorepository: bitnami/nginxtag: 1.27.1-debian-12-r2 #因为我本地nginx的版本是nginx:1.27.1-debian-12-r2,修改版本为1.27.1-debian-12-r2[root@master nginx]# ls
Chart.lock Chart.yaml README.md values.schema.json
charts nginx-1.27.1-debian-12-r2.tar templates values.yaml
[root@master nginx]# mv nginx-1.27.1-debian-12-r2.tar /opt/
[root@master nginx]# cd /opt/
[root@master opt]# ls
cni containerd nginx-1.27.1-debian-12-r2.tar# 加载本地镜像到Docker(避免从公网拉取,加速部署)
[root@master opt]# docker load -i nginx-1.27.1-debian-12-r2.tar
Loaded image: bitnami/nginx:1.27.1-debian-12-r2# 给镜像打标签,推到私有仓库(供Kubernetes集群拉取)
[root@master opt]# docker tag bitnami/nginx:1.27.1-debian-12-r2 rch.hjn.com/bitnami/nginx:1.27.1-debian-12-r2
[root@master opt]# docker push rch.hjn.com/bitnami/nginx:1.27.1-debian-12-r2

[root@master nginx]# helm install rch /root/linux-amd64/nginx
NAME: rch
LAST DEPLOYED: Wed Nov 5 20:06:45 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 15.14.0
APP VERSION: 1.25.4
...[root@master nginx]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 19d
rch-nginx LoadBalancer 10.107.91.135 <none> 80:39291/TCP 7s
[root@master nginx]# kubectl get pods
NAME READY STATUS RESTARTS AGE
rch-nginx-7fd7664cb5-6fttb 0/1 Running 0 10s
web-6f4b69478-rkvq2 1/1 Running 2 (41m ago) 3d20h
web-6f4b69478-vw85l 1/1 Running 2 (41m ago) 3d20h
web-6f4b69478-xd4nw 1/1 Running 2 (41m ago) 3d20h
[root@master nginx]# kubectl get pods
NAME READY STATUS RESTARTS AGE
rch-nginx-7fd7664cb5-6fttb 1/1 Running 0 13s# 修改values.yaml,更新配置(如将Service类型从LoadBalancer改为ClusterIP,配置Ingress域名)
[root@master nginx]# vim values.yaml
569 type: ClusterIP # 服务类型改为ClusterIP(仅集群内部访问)
785 enabled: true # 启用Ingress
794 hostname: myapp.timinglee.org # Ingress域名
862 ingressClassName: "nginx" # 指定Ingress控制器类型# 执行升级,应用新配置(.表示当前目录的Chart)
[root@master nginx]# helm upgrade rch .[root@master nginx]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 19d
rch-nginx ClusterIP 10.107.91.135 <none> 80/TCP 9m25s
[root@master nginx]# kubectl get pods
NAME READY STATUS RESTARTS AGE
rch-nginx-7fd7664cb5-6fttb 1/1 Running 0 9m30s
web-6f4b69478-rkvq2 1/1 Running 2 (51m ago) 3d21h
web-6f4b69478-vw85l 1/1 Running 2 (51m ago) 3d21h
web-6f4b69478-xd4nw 1/1 Running 2 (51m ago) 3d21h
[root@master nginx]# curl www.rch.com
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title># 查看升级历史(每次升级生成一个新版本)
[root@master nginx]# helm history rch
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Wed Nov 5 20:06:45 2025 superseded nginx-15.14.0 1.25.4 Install complete
2 Wed Nov 5 20:15:18 2025 failed nginx-15.14.0 1.25.4 Upgrade "rch" failed: failed to create resource: admission webhook "validate.nginx.ingress.kubernetes.io" denied the request: host "www.rch.com" and path "/" is already defined in ingress default/myapp-v1-ingress
3 Wed Nov 5 20:15:57 2025 deployed nginx-15.14.0 1.25.4 Upgrade complete
[root@master nginx]# helm uninstall rch
release "rch" uninstalled
[root@master nginx]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
**总结:**当应用需要修改配置(如域名、端口)或升级版本时,用helm upgrade更新,避免重新卸载安装。
四 构建helm中的chart包(自己制作 “安装包”,复用部署配置)
4.1 Helm Chart目录结构
[root@master linux-amd64]# ls
helm LICENSE nginx nginx-15.14.0.tgz README.md
[root@master linux-amd64]# rm -rf *# 创建一个名为rch的Chart(自动生成标准目录结构)
[root@master linux-amd64]# helm create rch
Creating rch
[root@master linux-amd64]# ls
rch
[root@master linux-amd64]# cd rch/
[root@master rch]# ls
charts Chart.yaml templates values.yaml# 查看Chart目录结构
[root@master rch]# tree .
.
├── charts # 子Chart(依赖的其他Chart,如应用依赖MySQL)
├── Chart.yaml # Chart元数据(名称、版本、描述等)
├── templates # Kubernetes资源模板(Deployment、Service等YAML,支持变量)
│ ├── deployment.yaml # 部署应用的Deployment模板
│ ├── _helpers.tpl # 模板函数(复用变量或逻辑)
│ ├── ingress.yaml # Ingress资源模板
│ ├── service.yaml # Service资源模板
│ ...(其他模板文件)
└── values.yaml # 默认配置值(可被用户自定义配置覆盖)
4.2 构建自定义 Chart(制作自己的应用安装包)
# 修改Chart.yaml,设置元数据(名称、版本、描述等)
[root@master rch]# vim Chart.yaml
apiVersion: v2
name: rch # Chart名称
description: webserver on kubernetes # 描述
type: application
version: 0.1.0 # Chart版本(自己定义,如v0.1)
appVersion: "v1" # 应用版本(对应镜像版本,如v1)# 修改values.yaml,设置默认配置(镜像、Ingress等)
[root@master rch]# vim values.yaml
image:repository: myapp # 应用镜像名称pullPolicy: IfNotPresent # 镜像拉取策略(本地有则不用拉)tag: "v1" # 镜像版本
ingress:enabled: true # 启用IngressclassName: "nginx" # 使用nginx类型的Ingress控制器hosts:- host: www.rch.com # 访问域名paths:- path: /pathType: ImplementationSpecific# 检查Chart是否有语法错误(类似代码 lint 检查)
[root@master rch]# helm lint .
==> Linting .
[INFO] Chart.yaml: icon is recommended # 提示可选的icon字段,不影响使用
1 chart(s) linted, 0 chart(s) failed # 无错误,通过检查# 打包Chart为tgz文件(方便传输和共享)
[root@master rch]# cd ..
[root@master linux-amd64]# helm package rch/
Successfully packaged chart and saved it to: /root/linux-amd64/rch-0.1.0.tgz
[root@master linux-amd64]# ls
rch rch-0.1.0.tgz# 安装自定义Chart(验证是否能正常部署)
[root@master linux-amd64]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
[root@master linux-amd64]# helm install rch rch-0.1.0.tgz
NAME: rch
LAST DEPLOYED: Wed Nov 5 20:32:42 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:http://www.rch.com/
[root@master linux-amd64]# kubectl get pods
NAME READY STATUS RESTARTS AGE
rch-845799b576-f86lg 1/1 Running 0 69s
[root@master linux-amd64]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 19d
rch ClusterIP 10.103.133.39 <none> 80/TCP 72s# 验证部署结果(访问应用域名,确认正常运行)
[root@master linux-amd64]# curl http://www.rch.com/
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
五 构建helm仓库
5.1 在harbor仓库中构建一个公开的项目

5.2 安装helm-push插件
官方网址:https://github.com/chartmuseum/helm-push
5.2.1 在线安装
如果网络没问题情况下直接安装即可
[root@master rch]# yum install git -y # 安装git(插件依赖)
[root@master rch]# helm plugin install https://github.com/chartmuseum/helm-push
5.2.2 离线安装
#xftp上传
[root@master linux-amd64]# ls
helm-push_0.10.4_linux_amd64.tar.gz rch rch-0.1.0.tgz#创建helm plugin的存放目录
[root@master linux-amd64]# mkdir ~/.local/share/helm/plugins/helm-push -p#解压push插件包到指定目录
[root@master linux-amd64]# tar zxf helm-push_0.10.4_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-push[root@master linux-amd64]# ll ~/.local/share/helm/plugins/helm-push
总用量 16
drwxr-xr-x 2 root root 26 11月 10 18:12 bin
-rw-r--r-- 1 1001 docker 11357 6月 5 2023 LICENSE
-rw-r--r-- 1 1001 docker 407 6月 5 2023 plugin.yaml#查看helm调用命令是否成功
[root@master linux-amd64]# helm cm-push --help
Helm plugin to push chart package to ChartMuseumExamples:$ 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 上传 Chart 到仓库(将自定义 Chart 共享到团队仓库)
5.3.1 添加仓库
# 添加Harbor中的Chart仓库(rch为仓库名称,URL为Harbor项目地址)
[root@master linux-amd64]# helm repo add rch https://rch.hjn.com/chartrepo/rch # chartrepo是固定路径
"rch" has been added to your repositories
[root@master linux-amd64]# helm repo list
NAME URL
bitnami https://charts.bitnami.com/bitnami
aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
rch https://rch.hjn.com/chartrepo/rch # 添加仓库时报错,因为我们用的是加密访问;我没有报错,因为我已经添加过了证书
Error: looks like "https://reg.timinglee.org/chartrepo/timinglee" is not a valid chart repository or cannot be reached: Get "https://reg.timinglee.org/chartrepo/timinglee/index.yaml": tls: failed to verify certificate: x509: certificate signed by unknown authority#为helm添加证书
[root@master linux-amd64]# cp /etc/docker/certs.d/rch.hjn.com/ca.crt /etc/pki/ca-trust/source/anchors/# 添加完之后更新ca库,之后再次添加就好啦
[root@master linux-amd64]# update-ca-trust
5.3.2 上传本地项目
**命令执行格式:**helm cm-push <项目名称> <仓库名称> -u admin -p lee
[root@master linux-amd64]# ls
helm-push_0.10.4_linux_amd64.tar.gz rch rch-0.1.0.tgz# 上传本地Chart到仓库(rch-0.1.0.tgz为Chart包,rch为仓库名,-u/-p为Harbor账号密码)
[root@master linux-amd64]# helm cm-push rch-0.1.0.tgz rch -u admin -p 123
Pushing rch-0.1.0.tgz to rch...
Done.


# 上传后数据没更新,所以搜不到
[root@master linux-amd64]# helm search repo rch
No results found#更新仓库
[root@master linux-amd64]# helm repo update rch # rch是本地仓库名
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "rch" chart repository
Update Complete. ⎈Happy Helming!⎈#再次查看
[root@master linux-amd64]# helm search repo rch/
NAME CHART VERSION APP VERSION DESCRIPTION
rch/rch 0.1.0 v1 webserver on kubernetes#安装项目
[root@master linux-amd64]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
[root@master linux-amd64]# helm install rch rch/rch
NAME: rch
LAST DEPLOYED: Mon Nov 10 18:37:35 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:http://www.rch.com/
[root@master linux-amd64]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
rch default 1 2025-11-10 18:37:35.609612596 +0800 CST deployed rch-0.1.0 v1
[root@master linux-amd64]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 24d
rch ClusterIP 10.109.13.179 <none> 80/TCP 11s
[root@master linux-amd64]# kubectl get pods
NAME READY STATUS RESTARTS AGE
rch-845799b576-sf6nq 1/1 Running 0 16s
[root@master linux-amd64]# curl www.rch.com
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
六 helm的版本迭代
之前在k8s集群中更新使用Deployment控制器,接下来我将使用helm如何更新(使用自制myapp:v1/v2镜像)
6.1 从新构建新版本项目
[root@master linux-amd64]# ls
rch rch-0.1.0.tgz
[root@master linux-amd64]# cd rch/# 修改Chart.yaml,升级版本(Chart版本从0.1.0→0.2.0,应用版本从v1→v2)
[root@master rch]# vim Chart.yaml

# 修改values.yaml,指定新的镜像版本(v2)
[root@master rch]# vim values.yaml
# 如果tag中什么都不写,那么它将会沿用Chart.yaml里面定义的appVersion版本;如果tag里面定义了版本,最终生效的是tag中定义的版本

6.2 上传项目到helm仓库中
# 打包新版本Chart
[root@master rch]# cd ..
[root@master linux-amd64]# helm package rch
Successfully packaged chart and saved it to: /root/linux-amd64/rch-0.2.0.tgz
[root@master linux-amd64]# ls
rch rch-0.1.0.tgz rch-0.2.0.tgz# 上传新版本到仓库
[root@master linux-amd64]# helm cm-push rch-0.2.0.tgz rch -u admin -p 123
Pushing rch-0.2.0.tgz to rch...
Done.# 更新仓库缓存,查看新版本
[root@master linux-amd64]# helm repo update rch
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "rch" chart repository
Update Complete. ⎈Happy Helming!⎈
[root@master linux-amd64]# helm search repo rch/
NAME CHART VERSION APP VERSION DESCRIPTION
rch/rch 0.2.0 v2 webserver on kubernetes

6.3 升级应用(将现有 Release 从 v1 升到 v2)
[root@master linux-amd64]# helm search repo rch/
NAME CHART VERSION APP VERSION DESCRIPTION
rch/rch 0.2.0 v2 webserver on kubernetes# 执行升级,使用仓库中的新版本Chart(rch/rch指向仓库中的最新版本)
[root@master linux-amd64]# helm upgrade rch rch/rch #第一个rch是安装的Chart名字,rch/rch是harbor仓库中rch这个项目下名为rch的helm包
Release "rch" has been upgraded. Happy Helming!
NAME: rch
LAST DEPLOYED: Mon Nov 10 18:54:38 2025
NAMESPACE: default
STATUS: deployed
REVISION: 2
NOTES:
1. Get the application URL by running these commands:http://www.rch.com/# 验证升级结果
[root@master linux-amd64]# curl www.rch.com
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
6.4 回滚应用–rollback
# 查看Release历史(获取需要回滚的版本号,这里1是v1,2是v2)
[root@master linux-amd64]# helm history rch
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Mon Nov 10 18:37:35 2025 superseded rch-0.1.0 v1 Install complete
2 Mon Nov 10 18:54:38 2025 deployed rch-0.2.0 v2 Upgrade complete# 回滚到版本1(v1)
[root@master linux-amd64]# helm rollback rch 1
Rollback was a success! Happy Helming!# 验证回滚结果(版本变回v1)
[root@master linux-amd64]# curl www.rch.com
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a># 可以再回滚到版本2(v2)
[root@master linux-amd64]# helm rollback rch 2
Rollback was a success! Happy Helming!
[root@master linux-amd64]# curl www.rch.com
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>
七 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 客户端版本 |
| ll | 从远程仓库中下载 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 客户端版本 |
