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

K8S的Helm包管理器

一、背景

        官网:  https://helm.sh/

        我们针对K8S环境中,部署对应的应用,无外乎就是编写一堆yaml资源清单文件. 资源清单、依赖性少的时候,可以直接手动维护。但是,随着资源清单越来越复杂,越来越多,不同的环境切换不同的资源清单配置,如果还是手动维护,那将会是一场运维灾难。

         没有Helm之前的问题: 

                1、手动管理YAML文件:需要手动编写和维护大量YAML文件,容易出错

                2、缺乏标准化:各团队有自己的部署方式,难以统一管理

                3、部署流程复杂:需要按特定顺序创建资源,容易遗漏步骤

                4、环境差异处理困难:不同环境的配置需要手动修改或维护多套文件

                5、回滚机制不完善:需要手动记录变更并反向操作才能回滚

        Helm 是 Kubernetes 的包管理工具,相当于 Linux 系统中的 apt/yum 或 macOS 中的 homebrew。它通过将 Kubernetes 应用打包成可复用的单元(称为 Chart),简化了复杂应用的部署和管理流程。

        Helm的核心原理就是:  使用go template模板语法,嵌入到K8S的资源清单yaml文件中,为yaml资源清单文件提供了动态编程能力的工具,动态生成最终部署的yaml清单文件。  并且还支持了repo仓库机制生态、依赖声明等功能。

        在Kubernetes生态系统中,Helm的出现主要解决了以下几个核心问题:

                1、应用管理的复杂性:Kubernetes原生资源文件(YAML)在管理复杂应用时变得冗长且难以维护,特别是当应用由多个组件组成时。

                2、配置管理的挑战:没有标准化的方式来管理不同环境的配置(开发、测试、生产),导致大量重复或轻微修改的YAML文件。

                3、版本控制的缺失:缺乏应用级别的版本控制机制,难以回滚到特定版本。

                4、共享和复用困难:没有统一的方式打包和共享Kubernetes应用模板,各团队重复造轮子。

二、Helm核心概念

1、Chart

        Chart是Helm的应用打包格式,包含了一组Kubernetes资源文件的模板和配置。Chart的结构如下:

mychart/Chart.yaml          # Chart的元数据文件values.yaml         # 默认配置值charts/             # 依赖的子Charttemplates/          # 模板目录deployment.yaml   # 部署模板service.yaml      # 服务模板...               # 其他Kubernetes资源模板

        类比docker里面的镜像image。 

2、Release

        Release是Chart在Kubernetes集群中的一次部署实例。同一个Chart可以多次安装到同一集群,每次安装都会创建一个新的Release。

        类比docker当做的容器。 同一个namespace只能部署唯一名称的release, release名称不同,则可以部署多个不同的release。  (除非nodeport等端口冲突)

3、Repository (Repo)

        Chart仓库是存放和共享Chart的地方。Helm客户端可以连接多个仓库来查找和下载Chart。

        类比docker当中的镜像仓库, Chart也有自己的仓库进行存储,方便分发、拉取。

三、Helm常用命令

1. Chart相关命令

# 创建新Chart
helm create mychart# 打包Chart
helm package mychart# 检查Chart语法
helm lint mychart# 查看Chart模板渲染结果(不实际部署)
helm template mychart# 验证Chart是否安装成功(dry-run模式)
helm install --dry-run myrelease mychart

2. Repository相关命令 

# 添加Chart仓库
helm repo add bitnami https://charts.bitnami.com/bitnami# 列出已配置的仓库
helm repo list# 更新本地仓库缓存
helm repo update# 搜索Chart
helm search repo nginx# 移除仓库
helm repo remove bitnami

3. Release相关命令

# 安装Release
helm install myrelease mychart# 列出已安装的Release
helm list# 查看Release状态
helm status myrelease# 升级Release
helm upgrade myrelease mychart# 回滚Release
helm rollback myrelease 1# 卸载Release
helm uninstall myrelease# 查看Release历史
helm history myrelease

四、实战示例

1、创建并部署一个简单的Chart

# 创建新Chart
helm create myapp# 编辑Chart配置
cd myapp
vim values.yaml  # 修改副本数、镜像等配置# 安装Chart
helm install myapp-release ./myapp# 检查部署状态
kubectl get pods
helm status myapp-release

 2、使用外部Chart部署应用

# 添加bitnami仓库
helm repo add bitnami https://charts.bitnami.com/bitnami# 搜索nginx Chart
helm search repo nginx# 安装nginx
helm install my-nginx bitnami/nginx# 自定义配置安装
helm install my-nginx bitnami/nginx --set service.type=LoadBalancer,replicaCount=2

 3、高级配置示例

创建自定义values.yaml:

# custom-values.yaml
replicaCount: 3
image:repository: nginxtag: "1.21.0"pullPolicy: IfNotPresent
service:type: NodePortport: 80

然后使用自定义值安装:

helm install -f custom-values.yaml my-nginx bitnami/nginx

4、最佳实践

  1. 版本控制:将Chart和values文件纳入版本控制系统

  2. 环境分离:为不同环境(dev/staging/prod)维护不同的values文件

  3. 模板测试:使用helm template--dry-run测试模板渲染

  4. 依赖管理:明确声明Chart依赖关系

  5. 安全实践:只使用可信的Chart仓库,审查第三方Chart

  6. 资源命名:使用.Release.Name作为资源名前缀确保唯一性

  7. 配置默认值:为模板参数提供合理的默认值

五、总结

        Helm作为Kubernetes的包管理器,极大地简化了复杂应用的部署和管理。通过模板化、版本控制和依赖管理等特性,Helm为Kubernetes应用提供了类似于Linux包管理工具的体验。掌握Helm不仅可以提高部署效率,还能实现配置的标准化和可重复性,是Kubernetes生态中不可或缺的工具。 

        可以方便我们直接部署和使用,也可以支持快速安装、快速回滚。

        核心原理:

        使用go template模板语法,嵌入到K8S的资源清单yaml文件中,为yaml资源清单文件提供了动态编程能力的工具,动态生成最终部署的yaml清单文件。  并且还支持了repo仓库机制生态、依赖声明等功能。

http://www.lryc.cn/news/587831.html

相关文章:

  • WebView 性能调试全流程:卡顿问题实战还原与优化路径解析
  • 基于 Gitlab、Jenkins与Jenkins分布式、SonarQube 、Nexus 的 CiCd 全流程打造
  • 考完数通,能转云计算/安全方向吗?转型路径与拓展路线分析
  • 计算机毕业设计Java医学生在线学习平台系统 基于 Java 的医学生在线学习平台设计与开发 Java 医学在线教育学习系统的设计与实现
  • 【云服务器安全相关】如何使用 `ping` 命令排查云服务器网络连接问题
  • Java实现文件自动下载,XXL-Job定时任务中的HTTP文件下载最佳实践
  • JAVA 设计模式 适配器
  • 设计模式之适配器模式:让不兼容的接口协同工作的艺术
  • 闲庭信步使用图像验证平台加速FPGA的开发:第十四课——图像二值化的FPGA实现
  • 使用aiohttp实现高并发爬虫
  • 未来手机会自动充电吗
  • vscode 源码编译
  • TCP半关闭
  • 使用layui的前端框架过程中,无法加载css和js怎么办?
  • 如何通过添加企业logo视频水印来对教育视频进行加密?
  • 8:从USB摄像头把声音拿出来--ALSA大佬登场!
  • GNhao,长期使用跨境手机SIM卡成为新趋势!
  • 控制台打开mysql服务报错解决办法
  • 我的Qt八股文面试笔记1:信号与槽文件流操作
  • Sharding-Sphere学习专题(四)广播表和绑定表、分片审计
  • 胡志明证券交易所新一代交易系统解决方案——基于美联储利率决议背景下的越南跨境金融基础设施升
  • 学习C++、QT---25(QT中实现QCombobox库的介绍和用QCombobox设置编码和使用编码的讲解)
  • 2025js——面试题(8)-http
  • 第二章 基于新版Onenet搭建云服务(stm32物联网)
  • 【leetcode】326. 3的幂
  • 对偶原理与蕴含定理
  • SSE(Server-Sent Events)和 MQTT(Message Queuing Telemetry Transport)
  • 【工具】AndroidStudio修改中文语言汉化
  • 【2025/07/14】GitHub 今日热门项目
  • 直播推流技术底层逻辑详解与私有化实现方案-以rmtp rtc hls为例-优雅草卓伊凡