一、背景

        官网:  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.pswp.cn/diannao/91063.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91063.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/91063.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多模态数据处理新趋势:阿里云ODPS技术栈深度解析与未来展望

多模态数据处理新趋势:阿里云ODPS技术栈深度解析与未来展望 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈…

AI数据分析仪设计原理图:RapidIO信号接入 平板AI数据分析仪

AI数据分析仪设计原理图:RapidIO信号接入 平板AI数据分析仪 1 、概述 本仪器是一款面向工业控制、新能源、震动测量等业务开发的平板AI数据分析仪。基于 Jetson Orin Nano(AI边缘计算)、实现RapidIO接口数据接入,进行AI分析。Rap…

人工智能正逐步商品化,而“理解力”才是开发者的真正超能力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

玩转ClaudeCode:ClaudeCode安装教程(Windows+Linux+MacOS)

Windows 环境安装 Claude Code 一、安装 WSL 环境 1. 确认 Windows 功能已开启 打开 “控制面板 → 程序 → 启用或关闭 Windows 功能” 勾选 “适用于 Linux 的 Windows 子系统” 和 “虚拟机平台” 点“确定”后重启电脑。 开机后,管理员模式打开 Terminal…

PyTorch多层感知机(MLP)模型构建与MNIST分类训练

冲冲冲😊 here😊 文章目录PyTorch多层感知机模型构建与MNIST分类训练笔记🎯 1. 任务概述⚙️ 2. 环境设置2.1 导入必要库2.2 GPU配置🧠 3. 模型构建3.1 模型定义关键点3.2 损失函数选择3.3 模型初始化与设备选择🔧 4. …

android tabLayout 切换fragment fragment生命周期

1、TabLayout 与 Fragment 结合使用的常见方式 通常会使用 FragmentPagerAdapter 或 FragmentStatePagerAdapter 与 ViewPager 配合,再将 TabLayout 与 ViewPager 关联,实现通过 TabLayout 切换 Fragment。 以下是布局文件示例 activity_main.xml: <LinearLayout xmln…

马蹄集 BD202401补给

可怕的战争发生了&#xff0c;小度作为后勤保障工作人员&#xff0c;也要为了保卫国家而努力。现在有 N(1≤N≤)个堡垒需要补给&#xff0c;然而总的预算 B(1≤B≤)是有限的。现在已知第 i 个堡垒需要价值 P(i) 的补给&#xff0c;并且需要 S(i) 的运费。 鉴于小度与供应商之间…

《Llava:Visual Instruction Tuning》论文精读笔记

论文链接&#xff1a;arxiv.org/pdf/2304.08485 参考视频&#xff1a;LLAVA讲解_哔哩哔哩_bilibili [论文速览]LLaVA: Visual Instruction Tuning[2304.08485]_哔哩哔哩_bilibili 标题&#xff1a;Visual Instruction Tuning 视觉指令微调 背景引言 大模型的Instruction…

【DataWhale】快乐学习大模型 | 202507,Task01笔记

引言 我从2016年开始接触matlab看别人做语音识别&#xff0c;再接触tensorflow的神经网络&#xff0c;2017年接触语音合成&#xff0c;2020年做落地的医院手写数字识别。到2020年接触pytorch做了计算机视觉图像分类&#xff0c;到2021年做了目标检测&#xff0c;2022年做了文本…

机器学习中的朴素贝叶斯(Naive Bayes)模型

1. 用实例来理解朴素贝叶斯 下面用具体的数据来演示垃圾邮件 vs 正常邮件的概率计算假设我们有一个小型邮件数据集邮件内容类别&#xff08;垃圾/正常&#xff09;“免费 赢取 大奖”垃圾“免费 参加会议”正常“中奖 点击 链接”垃圾“明天 开会”正常“赢取 免费 礼品”垃圾 …

document.documentElement详解

核心概念定义 它始终指向当前文档的根元素&#xff0c;在 HTML 文档中对应 <html> 标签。与 document.body&#xff08;对应 <body>&#xff09;和 document.head&#xff08;对应 <head>&#xff09;形成层级关系。与 document.body 的区别 <html> &l…

c#进阶之数据结构(动态数组篇)----Queue

1、简介这个是c#封装的队列类型&#xff0c;同栈相反&#xff0c;这个是先进先出&#xff0c;一般用于事件注册&#xff0c;或者数据的按顺序处理&#xff0c;理解为需要排队处理的可以用队列来处理。注意&#xff0c;队列一定是有顺序的&#xff0c;先进确实是会先出&#xff…

使用 keytool 在服务器上导入证书操作指南(SSL 证书验证错误处理)

使用 keytool 在服务器上导入证书操作指南(SSL 证书验证错误处理) 一、概述 本文档用于指导如何在运行 Java 应用程序的服务器上,通过keytool工具将证书导入 Java 信任库,解决因证书未被信任导致的 SSL/TLS 通信问题(如PKIX path building failed错误)。 二、操作步骤…

VUE export import

目录 命名导出 导出变量 导出函数 总结 默认导出 导出变量 导出函数 总结 因为总是搞不懂export和Import什么时候需要加{}&#xff0c;什么时候不用&#xff0c;所以自己测试了一下&#xff0c;以下是总结。 需不需要加{}取决于命名导出还是默认导出&#xff0c;命名导…

端侧宠物识别+拍摄控制智能化:解决设备识别频次识别率双低问题

随着宠物成为家庭重要成员&#xff0c;宠物影像创作需求激增&#xff0c;传统相机系统 “人脸优先” 的调度逻辑已难以应对宠物拍摄的复杂场景。毛发边缘模糊、动态姿态多变、光照反差剧烈等问题&#xff0c;推动着智能拍摄技术向 “宠物优先” 范式转型。本文基于端侧 AI 部署…

Popover API 实战指南:前端弹层体验的原生重构

&#x1fa84; Popover API 实战指南&#xff1a;前端弹层体验的原生重构 还在用 position: absolute JS 定位做 tooltip&#xff1f;还在引入大型 UI 库只为做个浮层&#xff1f;现在浏览器已经支持了真正原生的「弹出层 API」&#xff0c;一行 HTMLCSS 就能构建可交互、无障…

CCS-MSPM0G3507-6-模块篇-OLED的移植

前言基础篇结束&#xff0c;接下来我们来开始进行模块驱动如果懂把江科大的OLED移植成HAL库&#xff0c;那其实也没什么难首先配置OLED的引脚这里我配置PA16和17为推挽输出&#xff0c;PA0和1不要用&#xff0c;因为只有那两个引脚能使用MPU6050 根据配置出来的引脚&#xff0c…

意识边界的算法战争—脑机接口技术重构人类认知的颠覆性挑战

一、神经解码的技术奇点当瘫痪患者通过脑电波操控机械臂饮水&#xff0c;当失语者借由皮层电极合成语音&#xff0c;脑机接口&#xff08;BCI&#xff09;正从医疗辅助工具演变为认知增强的潘多拉魔盒。这场革命的核心突破在于神经信号解析精度的指数跃迁&#xff1a;传统脑电图…

详解彩信 SMIL规范

以下内容将系统地讲解彩信 MMS&#xff08;Multimedia Messaging Service&#xff09;中使用的 SMIL&#xff08;Synchronized Multimedia Integration Language&#xff09;规范&#xff0c;涵盖历史、语法结构、在彩信中的裁剪与扩展、常见实现细节以及最佳实践。末尾附示例代…

《红蓝攻防:构建实战化网络安全防御体系》

《红蓝攻防&#xff1a;构建实战化网络安全防御体系》文章目录第一部分&#xff1a;网络安全的攻防全景 1、攻防演练的基础——红队、蓝队、紫队 1.1 红队&#xff08;攻击方&#xff09; 1.2 蓝队&#xff08;防守方&#xff09; 1.3 紫队&#xff08;协调方&#xff09; 2、5…