Helm-k8s包管理工具(一)核心概念、helm工作目录

介绍

Helm是什么

  • Helm本质是k8s的包管理工具 ,类似于Linux 中的apt或者yum
  • Helm可以将k8s yaml抽象成chart,用于管理k8s应用的安装升级回滚等生命周期操作

为什么使用Helm

  • 没有helm时部署k8s应用的问题

    • yml文件编辑繁琐

      • 为了在k8s部署一个应用需要编辑大量的yml文件,而且这些yml一般都是静态模板文件。比如deployment、service、configmap、secret等yml文件
    • yml一致性难以保证

      • 一般使用git仓库来保存这些yml文件,yml在k8s环境生效时,git仓库中的yml文件和实际k8s环境中的yml文件一致性难以保证,运维困难
    • yml历史版本难以管理

      • 原生k8s没有提供yml历史版本的功能
      • 有些场景下需要做yml版本回退等操作

Helm的优势

  • k8s 中,很多情况下需要在多个环境 部署多个应用 ,特别是微服务的项目。如果每个应用都需要kubectl apply来执行的话,运维人员操作会非常繁琐困难

  • Helm的优势在于拥有一键式部署所有应用的能力,有以下好处

    • 简化部署
      • 允许单个命令部署和管理应用程序,简化了整个部署过程
      • 可以智能识别 资源的部署顺序,比如service和configmap需要在deployment部署前创建出来
    • 参数化配置
      • 提供了高度可配置的选项,可以自定义修改应用程序的部署配置
    • 版本控制
      • 可以管理应用程序的多个版本,实现版本控制和回滚
    • 模板化
      • 将k8s的yaml抽象成Helm Chart模板,提高了重用性和扩展性
    • 应用程序库
      • Helm应用程序库可以共享和重用Helm Charts
    • 插件系统
      • 拥有强大的插件系统,允许扩展和定制Helm的功能

核心概念

  • Chart

    • 一个Helm应用包 ,包含一组描述k8s资源yaml模板 ,定义应用程序的资源配置部署逻辑
    • 结构一般包含Chart.yamlvalues.yamltemplates/charts/
  • Release

    • 某次chart 安装后的运行实例多次安装同一个chart是多个release,且每个release对应不同的名称
  • Repository

    • 存储Chart 的仓库服务器或路径,一般使用Git仓库。可以是公开仓库或自建私有仓库
  • Value

    • Helm Chart的参数,用来配置k8s对象。通过 values.yaml 或 --set 注入变量值

工作目录

  • helm标准的目录结构(chart根目录命名示例:mychart/)

    复制代码
    mychart/
    ├── Chart.yaml              # 必需:Chart 元信息(名称、版本、描述等)
    ├── values.yaml             # 必需:默认配置参数(可被用户覆盖)
    ├── charts/                 # 可选:子 Chart(依赖包)
    ├── crds/                   # 可选:自定义资源定义(CRDs)
    ├── templates/              # 必需:模板目录,存放所有 Kubernetes YAML 模板
    │   ├── deployment.yaml
    │   ├── service.yaml
    │   ├── ingress.yaml
    │   ├── hpa.yaml
    │   ├── serviceaccount.yaml
    │   ├── _helpers.tpl        # 辅助模板(函数、变量等)
    │   ├── NOTES.txt           # 安装后提示信息
    │   └── tests/
    │       └── test-connection.yaml
    ├── LICENSE                 # 可选:许可证信息
    ├── README.md               # 可选:使用说明文档
    └── values.schema.json      # 可选:values.yaml 的 JSON Schema 校验文件
  • 目录详解

文件/目录 说明
Chart.yaml 定义 Chart 名称、版本、描述、图标、维护者、依赖等元数据。
values.yaml 提供模板中使用的默认值,用户可通过 --set-f 覆盖。
templates/ 所有 Kubernetes 资源模板文件存放目录,支持 Go 模板语法。
_helpers.tpl 定义可复用的模板片段(如标签、命名规范),供其他模板引用。
charts/ 存放子 Chart(依赖),Helm 会自动解析 Chart.yaml 中的依赖。
crds/ 放置 CRD YAML 文件,Helm 安装时先部署这些资源。
NOTES.txt 安装完成后输出的提示信息,如访问地址、用户名密码等。
tests/ 定义测试 Pod,用于验证 Chart 安装是否成功(如连接测试)。
LICENSE 开源协议说明,可选。
README.md Chart 使用说明,可选。
values.schema.json values.yaml 的结构进行校验,防止配置错误。

Helm的工作流程

  1. 构建chart

    • 开发者创建并编辑chart配置
  2. 打包发布至git仓库

    • 打包发布至helm仓库repository
  3. helm命令安装

    • 管理员使用helm命令 安装时,相关依赖 会从仓库下载
  4. helm自动部署资源到k8s

    • helm会根据下载的配置自动部署k8s资源