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/             # 依赖的子Chart
  templates/          # 模板目录
    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: nginx
  tag: "1.21.0"
  pullPolicy: IfNotPresent
service:
  type: NodePort
  port: 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仓库机制生态、依赖声明等功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Rocky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值