当前位置: 首页 > news >正文

kubernetes的包的管理--helm

一 helm简介

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

image-20251110193003254

如上图所示,Helm的工作流程总结如下:

  1. 开发者首先创建并编辑chart的配置;
  2. 接着打包并发布至Helm的仓库(Repository);
  3. 当管理员使用helm命令安装时,相关的依赖会从仓库下载;
  4. 接着helm会根据下载的配置部署资源至k8s;

1.1 Helm概念

概念描述
Chart一个Helm包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含Kubernetes集群中的服务定义,类似Homebrew中的formula、APT的dpkg或者Yum的rpm文件
Repository存储Helm Charts的地方
ReleaseChart在k8s上运行的Chart的一个实例,例如,如果一个MySQL Chart想在服务器上运行两个数据库,可以将这个Chart安装两次,并在每次安装中生成自己的Release以及Release名称。
ValueHelm Chart的参数,用于配置Kubernetes对象
Template使用Go模板语言生成Kubernetes对象的定义文件
NamespaceKubernetes中用于隔离资源的逻辑分区

在了解了上述这些概念以后,我们就可以这样来解释 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,有三个重要的概念:

  1. chart 创建Kubernetes应用程序所必需的一组信息。
  2. config 包含了可以合并到打包的chart中的配置信息,用于创建一个可发布的对象。
  3. 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

新建名为bitnami的项目

[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仓库中构建一个公开的项目

image-20251110181612872

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 1110 18:12 bin
-rw-r--r-- 1 1001 docker 11357  65  2023 LICENSE
-rw-r--r-- 1 1001 docker   407  65  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.

image-20251110182802690

image-20251110182808307

# 上传后数据没更新,所以搜不到
[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 

image-20251110184151533

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

image-20251110184346695

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

image-20251110185140887

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 客户端版本
http://www.dtcms.com/a/594285.html

相关文章:

  • opencv 学习: 06 使用指针遍历像素,以均匀颜色量化为例
  • 网站改版 被百度k网页设计素材 旅游
  • C++ 设计模式《智能任务助手上线,小明用上了解释器》
  • 小型企业建设网站陕西网站建设公司找哪家
  • Rust编译时计算:`const` 函数、泛型与高级类型体操
  • 从零开始理解和编写LLM中的KV缓存
  • 做离线版申报表进入哪个网站广告设计专业术语
  • 做网站维护要学些什么·咋做网站代码背景图
  • zustand解决的痛点以及zustand状态管理与C++全局变量的区别对比
  • 介绍自己做的网站室内设计奖项有哪些
  • 基于Zigbee协议的分布式漏水检测系统设计与实
  • 网站建设中怎么设置默认页小小影院 电视剧免费
  • 蓝牙钥匙 第73次 蓝牙与蜂窝网络:技术特性与互补优势
  • 公司网站模块制作国内男女直接做的视频网站
  • 嵌入式系统外接看门狗配置注意事项
  • 2025-Agent解析
  • 网站 域名解析出错中企动力苏州网页设计
  • 网站怎么做网页河南网站平台建设公司
  • 3.注册页测试用例
  • 加强文明网站内容建设做网站做推广
  • Unity 二级弹窗机制与回调实现原理
  • 面向C++程序员的JavaScript 语法实战学习1
  • 做某网站的设计与实现深圳做网站制作
  • K8S中Ingress的使用
  • 怎么建立微信网站あかねさす少女免费
  • 基于单片机的多波形信号发生器设计
  • JAVA1110 反射 泛型
  • 设计网站大全软件网络营销有哪些功能
  • 余江网站建设河南郑州百姓网
  • 济南莱芜最新消息seo平台是什么意思