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

Kubernetes Charts资源包管理工具之Heml学习总结

实践环境

registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.16

registry.cn-shanghai.aliyuncs.com/labring/helm:v3.8.2

简介

Helm 是 Kubernetes 生态系统中最核心的包管理工具,被誉为“Kubernetes 的 apt/yum”,其设计目标是简化 Kubernetes 应用的部署、管理与分发,通过标准化的“包”格式(Chart)解决 Kubernetes 原生资源配置复杂、复用性差的痛点。

一、Helm 的核心定位:Kubernetes 应用的“包管理器”

Helm 的本质是将 Kubernetes 应用的所有资源(Deployment、Service、ConfigMap、Secret 等)打包成一个可复用的“Chart”,并通过“Release”机制管理应用的生命周期(安装、升级、回滚、卸载)。其核心类比:

  • Chart:相当于 Linux 中的 .deb/.rpm包,或 Python 中的 pip包,包含应用运行所需的所有 Kubernetes 资源模板与默认配置;
  • Release:相当于“安装后的应用实例”,每个 Chart 可在集群中安装多次,生成多个独立的 Release(如同一 MySQL Chart 可部署“开发库”与“测试库”两个 Release);
  • Repository:相当于“应用商店”,用于存储与共享 Chart(如公共的 Artifact Hub,或企业内部私有仓库)。

二、Helm 的核心概念解析

要理解 Helm 的工作方式,必须掌握以下四个核心概念:

1. Chart:应用的“蓝图”

Chart 是 Helm 的打包格式,用于将 Kubernetes 应用的资源模板与配置封装为一个可复用的单元。其目录结构如下:

my-chart/
├── Chart.yaml          # 必须:Chart 的元数据(名称、版本、描述、依赖等)
├── values.yaml         # 必须:默认配置值(如副本数、镜像标签、资源限制)
├── templates/          # 必须:Kubernetes 资源模板(带 Go 模板语法,如 deployment.yaml、service.yaml)
├── charts/             # 可选:依赖的子 Chart(如应用依赖的数据库 Chart)
└── README.md           # 可选:Chart 的说明文档
  • templates/:存放带模板语法的 Kubernetes 资源文件,通过 values.yaml中的值动态渲染(如 {{ .Values.replicaCount }}会被替换为实际的副本数);
  • values.yaml:提供模板的默认值,用户安装时可覆盖(如 helm install --set replicaCount=3)。

2. Release:Chart 的“运行实例”

Release 是Chart 在 Kubernetes 集群中的具体运行实例。每执行一次 helm install,Helm 会根据 Chart 生成一个唯一的 Release(如 my-nginx-release),并记录其版本历史(通过 helm history <release-name>查看)。Release 的核心特性:

  • 唯一性:同一 Chart 可在同一集群中安装多次,每个 Release 有独立的名称与资源;
  • 版本管理:Helm 会记录每个 Release 的所有变更(如升级、回滚),支持一键回滚到任意历史版本(如 helm rollback <release-name> 1)。

3. Repository:Chart 的“存储与共享中心”

Repository 是存储 Chart 的仓库,类似于 Docker Hub 或 PyPI。其核心作用是:

  • 共享 Chart:公共 Repository(如 Artifact Hub)提供数千个现成的 Chart(如 Nginx、MySQL、Redis),用户可直接搜索并安装;

  • 私有部署:企业可搭建内部 Repository(如通过 Harbor 或 ChartMuseum),用于存储内部应用的 Chart,实现标准化分发。

    Helm 支持添加多个 Repository(如 helm repo add bitnami https://charts.bitnami.com/bitnami),并通过 helm repo update同步最新 Chart 列表。

4. Helm Client:命令行工具

Helm Client 是用户与 Helm 交互的主要方式,通过命令行指令(如 helm installhelm upgradehelm rollback)管理 Chart 与 Release。与 Kubernetes 原生的 kubectl不同,Helm Client 聚焦应用级别的管理(而非单个资源),例如:

  • helm install my-nginx bitnami/nginx:安装 Bitnami 提供的 Nginx Chart,生成名为 my-nginx的 Release;
  • helm upgrade my-nginx bitnami/nginx --set replicaCount=3:升级 my-nginx的副本数为 3;
  • helm rollback my-nginx 1:回滚 my-nginx到版本 1。

三、Helm 的核心价值:解决 Kubernetes 管理的痛点

Kubernetes 原生部署应用需要编写大量 YAML 文件(如 Deployment、Service、ConfigMap),且需手动管理这些文件的版本、依赖与回滚,效率低且易出错。Helm 针对这些痛点提供了以下核心价值:

1. 简化部署流程

通过 Chart 封装所有资源,用户只需执行一条命令(helm install)即可部署复杂应用(如包含前端、后端、数据库的微服务),无需手动创建多个 YAML 文件。

2. 标准化与复用

Chart 将应用的资源配置标准化(如统一的目录结构、模板语法),企业可将内部应用的 Chart 存储在私有 Repository 中,实现跨部门复用(如“支付服务”Chart 可被多个业务线使用)。

3. 版本控制与回滚

Helm 记录每个 Release 的所有变更(如升级时的配置修改),支持一键回滚到任意历史版本(如升级失败后回滚到稳定版本),降低生产环境的风险。

4. 依赖管理

Chart 可通过 requirements.yaml(Helm 2)或 Chart.yaml(Helm 3)声明依赖(如应用依赖 MySQL 数据库),Helm 会自动下载并安装依赖的 Chart,无需手动处理

Helm安装

二进制安装

# tar -zxvf helm-v4.0.0-linux-amd64.tar.gz
# mv linux-amd64/helm /usr/local/bin/helm

下载地址:https://github.com/helm/helm/releases

参考链接:https://helm.sh/docs/intro/install

镜像安装(基于sealos)

# sealos run registry.cn-shanghai.aliyuncs.com/labring/helm:v3.8.2

说明:基于 OCI 镜像的安装方式,通过 Sealos 工具将预打包的 Helm v3.8.2 镜像部署到 Kubernetes 集群

入门示例--Nginx服务部署

Chart资源包构造--极简版 Bitnami Nginx Helm Chart

参考连接: https://github.com/bitnami/charts/tree/main/bitnami/nginx

文件组织结构

my-minimal-nginx/
├── Chart.yaml          # Chart 元数据
├── values.yaml         # 可配置参数(Deployment/Service 核心配置)
└── templates/├── deployment.yaml # Deployment 模板└── service.yaml    # Service 模板(暴露外部 IP)

📄 1. Chart.yaml(Chart 元数据)

定义 Chart 名称、版本、描述等基础信息:

apiVersion: v2
name: my-minimal-nginx  # Chart 名称(部署后资源会带此前缀)
description: A simplified Helm chart to deploy Nginx with NodePort
version: 0.1.0          # Chart 版本(语义化版本,便于迭代)

📄 2. values.yaml(核心可配置参数)

存储 Deployment 和 Service 的默认配置(部署时可通过 -f覆盖):

image:repository: nginx       # Nginx 镜像仓库(用 Docker Hub 官方镜像,简化依赖)tag: latest             # 镜像标签(版本)replicaCount: 1           # Nginx Pod 副本数(高可用,可按需调整)service:type: NodePort          # 服务类型改为 NodePortport: 80                # Service 对外暴露的逻辑端口(集群内/外访问统一用 80)targetPort: 80          # 转发到 Nginx Pod 的端口nodePort: 30080         # (可选)指定节点上的端口,范围 30000-32767;不填则 K8s 自动分配

📄 3. templates/deployment.yaml(Deployment 模板)

Go 模板语法 动态生成 Kubernetes Deployment YAML:

{{- /* deployment.yaml:定义 Nginx Deployment 资源模板逻辑:通过 {{ .Values.XXX }} 读取 values.yaml 配置,通过 {{ .Chart.XXX }}读取Chart.yaml配置,动态生成 YAML
- */ -}}apiVersion: apps/v1
kind: Deployment
metadata:name: {{ .Release.Name }}-deployment  # 资源名 = 发布名 + 固定后缀labels:app: {{ .Chart.Name }}                    # 标签:关联 Chart 名称(my-minimal-nginx)
spec:replicas: {{ .Values.replicaCount }}        # 副本数(从 values.yaml 读取)selector:matchLabels:app: {{ .Chart.Name }}                  # Selector:匹配 Pod 标签(必须和 Pod 模板一致)template:metadata:labels:app: {{ .Chart.Name }}                # Pod 标签(必须和 selector.matchLabels 一致)spec:containers:- name: nginx-container                 # 容器名image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"  # 镜像地址(仓库 + 标签)ports:- containerPort: {{ .Values.service.targetPort }}  # 容器暴露的端口(从 values.yaml 读取)

📄 4. templates/service.yaml(Service 模板)

用 Go 模板生成 Kubernetes Service YAML,实现外部 IP 暴露

{{- /* service.yaml:定义 Service 资源,支持 NodePort/LoadBalancer 暴露- NodePort:通过节点 IP + nodePort 访问(如 192.168.88.139:30080)- LoadBalancer:通过云厂商负载均衡器 IP 访问
- */ -}}apiVersion: v1
kind: Service
metadata:name: {{ .Release.Name }}-service   # 服务名 = 发布名 + 固定后缀labels:app: {{ .Chart.Name }}                  # 标签:关联 Chart 名称
spec:type: {{ .Values.service.type }}          # 服务类型(从 values.yaml 读取:NodePort/LoadBalancer)selector:app: {{ .Chart.Name }}                  # 关联 Pod 标签(必须和 Deployment 模板的 labels 一致)ports:- protocol: TCPport: {{ .Values.service.port }}        # Service 逻辑端口(集群内访问用)targetPort: {{ .Values.service.targetPort }}  # 转发到 Pod 的端口{{- if eq .Values.service.type "NodePort" }}  # 仅 NodePort 类型时添加 nodePort 字段nodePort: {{ .Values.service.nodePort }}    # 节点上暴露的端口(范围 30000-32767,可选配置){{- end }}

🔧 部署 & 验证(核心步骤)

1. 部署到 Kubernetes 集群

进入 my-minimal-nginx所在目录,执行 helm install

# helm install my-nginx ./my-minimal-nginx
NAME: my-nginx-release
LAST DEPLOYED: Sun Jan 18 22:44:32 2026
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

my-nginx本次部署的发布名(自定义,集群内唯一)。

2. 查看 Service 状态(确认 NodePort)

部署完成后,执行以下命令查看 Service 状态(重点看 EXTERNAL-IP):

# kubectl get svc -A
NAMESPACE     NAME               TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)                  AGE
default       kubernetes         ClusterIP   10.96.0.1     <none>        443/TCP                  35h
default       my-nginx-service   NodePort    10.96.2.4     <none>        80:30080/TCP             57s
kube-system   hubble-peer        ClusterIP   10.96.2.226   <none>        443/TCP                  35h
kube-system   kube-dns           ClusterIP   10.96.0.10    <none>        53/UDP,53/TCP,9153/TCP   35h
# kubectl get svc my-nginx-service 
NAME                             TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
my-nginx-service   NodePort   10.96.0.178   <none>        80:30080/TCP   3m47s

3. 查看pod状态

# kubectl get pod -o wide
NAME                                  READY   STATUS    RESTARTS   AGE     IP          NODE             NOMINATED NODE   READINESS GATES
my-nginx-deployment-ff65df8fb-j6ct7   1/1     Running   0          2m25s   10.0.1.54   192-168-88-140   <none>           <none>

4. 访问验证

![image-20260118234921918](images/k8s Charts资源包管理工具之Heml学习总结/image-20260118234921918.png)

Helm核心命令

1. 添加 Chart 仓库

# 添加官方仓库(推荐 Bitnami)
# helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories# 更新仓库索引
# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "bitnami" chart repository
Update Complete. ⎈Happy Helming!⎈

2. 搜索 Chart

# 搜索 Nginx Chart
# helm search repo nginx
NAME                            	CHART VERSION	APP VERSION	DESCRIPTION                                       
bitnami/nginx                   	22.4.3       	1.29.4     	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...

3. 安装 Chart

# 基础安装(使用默认配置)
helm install my-nginx bitnami/nginx# 自定义配置(通过 values.yaml 覆盖默认值)
helm install my-nginx bitnami/nginx -f values.yaml# 安装时指定名称空间--指定安装到哪个名称空间 
# helm install my-nginx-release ./my-minimal-nginx -n base_app
# helm install my-nginx-release ./my-minimal-nginx --namespace base_app# 安装本地自定义Chart
# helm install my-nginx-release ./my-minimal-nginx
NAME: my-nginx-release
LAST DEPLOYED: Sun Jan 18 22:44:32 2026
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

说明:有时候执行卸载命令,再次安装时会报错:

Error: INSTALLATION FAILED: cannot re-use a name that is still in use

此时执行helm list -n <命名空间> 看不到对应名称的发布。

解决方法:

# 查找残留的 Secret(Helm 3 默认存储方式)
kubectl get secrets -n <命名空间> | grep "sh.helm.release.v1.your-custom-release-name"# 删除残留 Secret
kubectl delete secret sh.helm.release.v1.your-custom-release-name.v1 -n <命名空间>

4. 查看已部署的 Release

#列出所有 Release
# helm list
NAME    	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART                 	APP VERSION
my-nginx	default  	3       	2026-01-18 23:54:01.031035787 +0800 CST	deployed	my-minimal-nginx-0.1.0	           #查看 Release 详情
# helm status my-nginx 
NAME: my-nginx
LAST DEPLOYED: Sun Jan 18 23:54:01 2026
NAMESPACE: default
STATUS: deployed
REVISION: 3
TEST SUITE: None

5. 升级 Release

# 修改 values.yaml 后升级
helm upgrade my-nginx bitnami/nginx -f values.yaml# 修改本地自定义Chart后升级
# helm upgrade my-nginx-release ./my-minimal-nginx
Release "my-nginx-release" has been upgraded. Happy Helming!
NAME: my-nginx-release
LAST DEPLOYED: Sun Jan 18 22:58:51 2026
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None

6. 回滚 Release

# 查看 Release 历史版本
helm history my-nginx# 回滚到指定版本(如 revision 2)
helm rollback my-nginx 2

7. 卸载 Release

# helm uninstall my-nginx
release "my-nginx" uninstalled

注意:如果Release不在默认名称空间下,则需要显示指定,如下:

helm uninstall my-nginx -n your_space_name
http://www.jsqmd.com/news/343283/

相关文章:

  • 详解四大格式(PIL/OpenCV/NumPy/PyTorch)的转换原理与场景选择
  • 互联网大厂Java求职面试实录:从核心技术到AI大数据应用
  • AI技术支持的6款工具,为论文写作带来更快的完成速度和更出色的内容表现
  • 图像边缘检测算法全景解析
  • 2026年热门的深圳CNC操机编程培训,深圳无人机编程培训学校用户好评推荐榜 - 品牌鉴赏师
  • 借助AI驱动的6款智能工具,用户可以大幅加快论文写作速度并提升内容质量
  • P1449 后缀表达式
  • Chronyd与NTP
  • 这6款由AI驱动的专业工具,为论文写作提供了更快的速度和更高的质量保障
  • AI赋能的6款实用工具,让论文写作变得更加流畅,同时大幅改善最终成果质量
  • 国产时序数据库的云原生实践:Apache IoTDB 与 TimechoDB 在物联网场景的深度应用
  • AI效率工具基础版与专业版的核心差异详解:涵盖10款工具
  • 剑桥大学定义图形世界:神经网络让纹理压缩像画家调色一样自然
  • 开发报销单自动填写工具,导入发票信息(金额,日期,品类),自动填充报销单,核对无误后导出,支持按公司规范调整,节省报销时间。
  • 李想汽车研究院:让AI从“工具使用者“进化为“工具创造者“
  • Advanced Genetics|作物杂种优势遗传机理的定量解析
  • 情人节公众号 SVG 交互设计方案整理:适合 2/14 的几种常用组件模型(以 E2 编辑器为例)
  • 【个人成长笔记】在 Windows 11 上使用 MemTest86 11.6(免费版)进行 DDR 内存测试(实操篇)
  • Python的基础类型,模块,存储类型
  • 批判的瘾:当“不自在”成为思想进化的第一推动力
  • 2026太空舱厂家推荐,本土智造品牌舱体研发与量产能力大盘点 - 品牌鉴赏师
  • 探索大数据领域数据目录的最佳实践方法
  • 解决SLAM14讲第九节initial.ply不能显示的问题
  • 论文生成PPT工具排行榜:7大软件+一键转化推荐
  • 提示工程架构师的故障注入测试:风险评估与应对
  • 2026年有实力的轮式高空作业平台,剪刀式高空作业平台厂家采购参考手册 - 品牌鉴赏师
  • 推荐 5 个好用的 AI 简历优化工具
  • PCIe-Link Status Dependencies
  • 推荐能做“简历 + JD 匹配”的工具
  • 2026微高压氧舱厂家权威推荐,舱体稳定性与续航能力深度评测 - 品牌鉴赏师