一、Helm 是什么?为什么需要它?

K8s 是强大的容器编排平台,但部署复杂应用时(如包含 Web 服务、数据库、缓存等多个组件的系统),需要编写大量 YAML 文件,管理成本高。Helm 就是为简化 K8s 应用部署而生的工具,它被称为 “K8s 的包管理器”,类似 Ubuntu 的apt或 Mac 的brew

二、Helm 如何工作?核心概念解析
  1. Chart(图表)

    • Helm 的基本单位,是一组 YAML 文件的集合,描述了一个或多个 K8s 资源(如 Deployment、Service、ConfigMap 等)。
    • 类比:一个 Chart 就像手机应用商店里的 “APP 安装包”,包含了应用运行所需的所有组件和配置。
  2. Release(发布)

    • Chart 的实例化结果。同一个 Chart 可以在集群中部署多次,每次部署都是一个 Release,就像同一 APP 可以在多部手机上安装,每个安装都是独立的。
  3. Values(配置值)

    • 用于自定义 Chart 的参数。例如,Chart 中定义了数据库密码为变量,通过 Values 可以传入实际密码,避免硬编码。
    • 类比:安装 APP 时的 “个性化设置”,如选择安装路径、是否创建桌面图标等。
三、Helm vs 直接使用 kubectl:优势在哪?
场景直接用 kubectl用 Helm
复杂应用部署需要手动编写 / 管理多个 YAML 文件,易出错。一键安装预定义的 Chart,自动处理依赖关系。
配置管理配置硬编码在 YAML 中,难以复用和修改。通过 Values 文件灵活配置,支持环境变量。
版本控制手动记录 YAML 变更,回滚困难。自动记录 Release 历史,支持一键回滚到任意版本。
依赖管理需要手动确保组件顺序(如先部署 DB 再部署 APP)Chart 中定义依赖关系,自动按顺序部署。
四、实战案例:用 Helm 部署 WordPress

假设你想部署一个 WordPress 博客,包含 Web 服务和 MySQL 数据库:

  1. 不用 Helm:需要编写至少 4 个 YAML 文件(WordPress Deployment、Service,MySQL StatefulSet、PVC),还要处理数据库初始化、密码配置等细节。
  2. 用 Helm:只需一行命令:

    bash

    helm repo add bitnami https://charts.bitnami.com/bitnami  # 添加官方仓库
    helm install my-blog bitnami/wordpress  # 安装WordPress Chart
    

    Helm 会自动:
    • 创建 MySQL 数据库并配置持久化存储;
    • 部署 WordPress 应用并连接到数据库;
    • 生成随机密码并保存为 Secret;
    • 创建 Service 暴露 WordPress 服务。
五、Helm 的进阶能力:模板与钩子
  1. 模板引擎

    • Helm 使用 Go 模板语言,允许在 Chart 中定义动态配置。例如:
      # values.yaml
      replicas: 3# deployment.yaml
      replicas: {{ .Values.replicas }}  # 自动从values中获取值
      
    • 类比:手机 APP 安装时的 “自定义选项”,如选择安装语言、分辨率等。
  2. 钩子(Hooks)

    • 允许在特定阶段执行自定义操作,如部署前执行数据库迁移、删除前备份数据等。
    • 类比:手机 APP 安装前的 “权限申请” 或卸载前的 “数据备份提示”。

一、Helm 安装准备
1. 安装 Helm 客户端
  • macOS(使用 Homebrew):
    brew install helm
    
  • Linux(使用脚本):
    curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
    
  • Windows(使用 Chocolatey):

    choco install kubernetes-helm
    
2. 验证安装
helm version
# 输出类似:version.BuildInfo{Version:"v3.12.0", ...}
二、使用 Helm 安装应用
1. 添加官方仓库

Helm 通过 仓库(Repository) 管理 Charts,类似 npm 或 Maven 的仓库:

helm repo add bitnami https://charts.bitnami.com/bitnami  # 添加 Bitnami 官方仓库
helm repo update  # 更新仓库索引
2. 搜索可用 Charts
helm search repo wordpress  # 搜索 WordPress 相关 Charts
# 输出类似:
# NAME               CHART VERSION  APP VERSION  DESCRIPTION
# bitnami/wordpress  15.0.0         6.2.2        WordPress is the world's most popular blogging ...
3. 安装 Chart

以安装 WordPress 为例:

helm install my-blog bitnami/wordpress  # 安装名为 my-blog 的 WordPress 实例
  • 关键参数
    • --version 15.0.0:指定 Chart 版本
    • --values my-values.yaml:使用自定义配置文件
    • --set service.type=LoadBalancer:临时覆盖配置值
4. 查看安装状态
helm list  # 查看所有已安装的 Releases
helm status my-blog  # 查看特定 Release 的详细信息
kubectl get pods  # 验证 Pod 是否正常运行
三、自定义配置(Values 文件)
1. 创建自定义 Values 文件

复制默认配置并修改:

helm show values bitnami/wordpress > my-values.yaml
vi my-values.yaml  # 编辑配置,例如修改数据库密码、服务类型等
2. 使用自定义配置安装

bash

helm install my-blog bitnami/wordpress -f my-values.yaml
3. 常见配置示例
# my-values.yaml
wordpressUsername: admin
wordpressPassword: my-strong-password  # 自定义 WordPress 密码
service:type: NodePort  # 将服务类型改为 NodePort
persistence:size: 20Gi  # 增加持久化存储大小
四、升级与回滚应用
1. 升级应用
helm upgrade my-blog bitnami/wordpress --set wordpressPassword=new-password  # 升级并修改密码
2. 查看历史版本
helm history my-blog
# 输出类似:
# REVISION  UPDATED                  STATUS     CHART            APP VERSION  DESCRIPTION
# 1         Mon Jul 10 12:00:00 2023  superseded  wordpress-15.0.0  6.2.2        Install complete
# 2         Mon Jul 10 12:30:00 2023  deployed    wordpress-15.1.0  6.2.2        Upgrade complete
3. 回滚到指定版本
helm rollback my-blog 1  # 回滚到版本 1
五、管理 Helm 仓库
1. 添加自定义仓库
helm repo add my-repo https://my-company.com/charts
2. 查看已添加的仓库
helm repo list
3. 更新仓库索引
helm repo update  # 每次使用前建议更新
六、创建自己的 Chart
1. 初始化 Chart 项目
helm create my-app  # 创建名为 my-app 的 Chart 模板
2. Chart 目录结构
my-app/
├── charts/          # 依赖的子 Charts
├── templates/       # YAML 模板文件
│   ├── deployment.yaml
│   ├── service.yaml
│   └── _helpers.tpl  # 模板辅助函数
├── Chart.yaml       # Chart 元数据(名称、版本等)
└── values.yaml      # 默认配置值
3. 编写模板(示例)
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: {{ .Release.Name }}-app
spec:replicas: {{ .Values.replicas }}  # 从 values.yaml 获取副本数selector:matchLabels:app: {{ .Release.Name }}template:metadata:labels:app: {{ .Release.Name }}spec:containers:- name: {{ .Chart.Name }}image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"ports:- containerPort: {{ .Values.service.port }}
4. 打包 Chart
helm package my-app  # 生成 my-app-0.1.0.tgz 包
5. 安装本地 Chart
helm install my-release ./my-app
七、常用 Helm 命令速查表
命令作用
helm install release chart安装 Chart 为一个 Release
helm upgrade release chart升级 Release
helm uninstall release卸载 Release
helm search repo keyword在仓库中搜索 Chart
helm show values chart查看 Chart 的默认配置值
helm dependency update chart更新 Chart 的依赖
helm lint chart检查 Chart 语法错误
helm template chart渲染 Chart 模板(不安装)
八、最佳实践
  1. 使用 Values 文件:避免在命令行中使用大量 --set 参数,将配置保存在文件中便于版本控制。
  2. 命名规范:Release 名称和 Chart 名称保持语义化(如 my-prod-api)。
  3. 版本控制:将自定义 Values 文件和 Chart 代码纳入 Git 管理。
  4. 测试先行:使用 helm install --dry-run 预渲染模板,确保配置正确。
  5. 清理不再使用的 Releases:定期 helm uninstall 不再需要的应用。
总结:Helm 是 K8s 的 “应用增强器”
  • Helm 的定位简化 K8s 应用的部署、升级和管理,尤其适合复杂的分布式系统。
  • 与 K8s 的关系:K8s 提供容器编排能力,Helm 提供应用层面的封装和管理,二者结合就像 “操作系统”+“应用商店”,让用户更高效地使用 K8s。

通过 Helm,开发者可以将精力集中在业务逻辑上,而不是复杂的 K8s 配置,真正实现 “一键部署,全家无忧”!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87424.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87424.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/87424.shtml

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

相关文章

靠机器学习+组合优化就发了CCF-A

这两年机器学习求解组合优化问题领域取得了显著的进展。ICLR、ICML、NeurIPS等顶会都有多篇成果发表。 组合优化:它是一种寻找一组变量的最佳组合的方法,以最小化或最大化一个目标函数。组合优化问题通常具有大量的状态和选择,需要在有限的…

UI评审时应该注意哪些方面才能有效保障交付质量

需从​​评审准备、设计评估、用户体验优化、技术实现验证​​四大维度展开,并结合具体实践经验 一、评审前的充分准备 ​​明确评审目标与范围​​ 确定评审核心目标,如验证设计是否符合产品需求、评估视觉与交互表现等。划定评审范围,聚焦核心页面与关键功能模块,避免分散…

分块矩阵怎么取逆?

目录 一、特殊分块矩阵取逆 1. 对角分块矩阵取逆​ 2. 副对角分块矩阵取逆​ 3. 三角分块矩阵 上三角:​ 下三角:​ 4. 任意二阶矩阵​ 二、一般分块矩阵 一、特殊分块矩阵取逆 1. 对角分块矩阵取逆 2. 副对角分块矩阵取逆 3. 三角分块矩阵…

2025微信小程序wxapkg解包全攻略

好的,以下是优化后的微信小程序 wxapkg 解包工具使用说明,纯文本格式,结构清晰,便于直接复制使用: --- 微信小程序 wxapkg 解包工具使用说明 一、查找 __APP__.wxapkg 文件 1. 按 WinR,输入 cmd&#xff0c…

标签体系设计与管理:从理论基础到智能化实践的综合指南

这类文章可以直接给大模型做上下文,主页有更多。 文章目录 一、标签体系的理论基础与概念框架1.1 标签的本体论定位1.2 逻辑学视角的标签形式化1.3 语言符号学的标签机制1.4 信息学的知识组织原理 二、标签的语义原子化设计原理2.1 语义原子性的理论基础2.2 语义分解…

【gateway网关】

网关的核心功能 网关(Gateway)作为网络架构中的关键组件,主要承担不同协议或网络之间的数据转换与路由功能。以下是其核心功能的详细说明: 协议转换与适配 网关能够连接使用不同通信协议的网络或系统,实现数据格式的…

windows平台+vs2019 编译 poho mqtt开源库[C,C++]

参考windows下编译paho.mqtt_c paho mqtt c windows编译-CSDN博客这个链接 其中要说明几个重点注意事项: 1,要安装上面要求准备安装好相关的工具,我的是vs2019,具体看个人,另外要补充一个安装git 客户端,…

【VScode | 格式化文档】一文掌握VScode使用 clang-format 的文档格式化(C/C++)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

vs code远程自动登录服务器,无需手动输入密码的终极方案(windows版)

目录 步骤1:本地生成 SSH 密钥对(如果尚未生成)步骤2:将公钥复制到远程服务器步骤3:配置 SSH Agent 自动启动1. 检查是否已安装 OpenSSH2. 编辑 .bashrc 或 .profile 文件3. 将私钥添加到 SSH Agent4. 验证配置 步骤4&…

7.redis对象介绍(三)

1.类型检查与命令多态 redis中用于操作键的命令可以分为两种,一种是可以对任何类型的键执行的命令,比如del,expire,rename,type,object等;另一种是只能对特定类型的键执行,比如set&…

VsCode 配置 C/C++ 开发环境

简述一下步骤哈: 下载VsCode(这点大家都会哈)下载MingG64(C/C编译器【gcc】),配置环境变量在VsCode配置一下C/C运行时环境测试运行 1、准备MingG64 VsCode 本身是没有C/C编译的,这里我们自己…

用C#编写一个读取磁盘第一扇区的程序

1.运行结果 2.WinHex校验 3.程序 using System; using System.IO;class Program {static void Main(){try{// 以管理员权限运行此程序const string drivePath "\\.\G:";const int sectorSize 512; // 标准扇区大小// 打开逻辑驱动器(需要管理员权限&a…

【PyTorch】PyTorch预训练模型缓存位置迁移,也可拓展应用于其他文件的迁移

目录 前言: 一、具体实现: 二、关键技术解析 路径动态拼接 安全目录创建 环境变量魔法 迁移条件检查 三、代码实现: 前言: 当模型文件下载到本地c盘的默认路径时,可用以下代码的形式进行文件位置的迁移。 一、…

Python 机器学习核心入门与实战进阶 Day 2 - KNN(K-近邻算法)分类实战与调参

✅ 今日目标 理解 KNN 的原理与“以邻为近”的思想掌握 K 值选择与模型效果的关系学会使用 sklearn 训练 KNN 模型实现 KNN 分类 模型评估 超参数调优 📘 一、KNN 算法原理 KNN(K-Nearest Neighbors)核心思想: 给定一个待预测…

pppoe宽带连接-系列命令调用

以下是对PPPoE相关命令的详细解释及用法说明: 1. pppoe 功能:PPPoE基础工具集,通常作为其他命令的底层依赖。 用法:一般不直接使用,而是通过pppoe-*系列命令调用。 2. pppoe-connect 功能:建立PPPoE连接…

C# 合并两个byte数组的几种方法

1. 使用 Array.Copy 方法(高效推荐)byte[] array1 { 1, 2, 3 }; byte[] array2 { 4, 5, 6 };byte[] combined new byte[array1.Length array2.Length]; Array.Copy(array1, 0, combined, 0, array1.Length); Array.Copy(array2, 0, combined, array1…

Spring AI 源码

目录 Spring AI 介绍 Spring AI 组件介绍 Spring AI 结构化输出 Srping AI 多模态 Spring AI 本地Ollama Spring AI 源码 Spring AI Advisor机制 Spring AI Tool Calling Spring AI MCP Spring AI RAG Spring AI Agent Spring AI 是一个用于 AI 工程的应用程序框架。 其目标是…

钉钉企业应用开发系列:前端实现自定义右上角菜单(dd.http + Vue3)

本文将围绕“如何在钉钉企业应用中自定义右上角菜单”这一主题进行讲解,并结合现代前端技术栈(Vue3 Composition API)展示完整实现过程,帮助你快速构建具备原生交互体验的企业应用。一、前置准备1. 注册钉钉开发者账号并创建应用…

STC8H驱动两相四线步进电机

两相步进电机, STC8H系列 用高级PWM实现SPWM细分驱动 /************* 功能说明 ************** 用B组高级PWM细分驱动2相4线小型步进电机, 支持1、2、4、8、16、32、64细分, 比如1.8度的电机4细分到0.45度. 本程序用于演示SPWM多细分直接驱动2相4线小型步进电机…

读书笔记:《DevOps实践指南》

《DevOps实践指南》 美 Gene Kim, Jez Humble, Patrick Debois, John Willis 著;刘征,王磊,马博文,曾朝京 译 个人理解: 向客户交付价值,快速、高效、高质量交付 信息全流程共享、全过程参与、关注软件…