K8S之Helm

Helm:Kubernetes的包管理器详解

Helm是什么?

  • Helm 是 Kubernetes 的包管理器,能快速查找、下载和安装软件包。
  • Helm 由客户端组件 helm 和服务端组件 Tiller 组成,能够将一组K8S资源打包统一管理,是查找、共享和使用为Kubernetes构建的软件的最佳方式。

Helm解决的痛点是?

  • 在 Kubernetes中部署一个可以使用的应用,需要涉及到很多的 Kubernetes 资源的共同协作。
  • 比如你安装一个 WordPress 博客,用到了一些 Kubernetes (下面全部简称k8s)的一些资源对象,包括 Deployment 用于部署应用、Service 提供服务发现、Secret 配置 WordPress 的用户名和密码,可能还需要 pv 和 pvc 来提供持久化服务。并且 WordPress 数据是存储在mariadb里面的,所以需要 mariadb 启动就绪后才能启动 WordPress。
  • 这些 k8s 资源过于分散,往往需要操作多个服务资源对象,且资源对象相互依赖,不方便进行管理,直接通过 kubectl 来管理一个应用十分困难。

在 k8s 中部署一个应用,通常面临以下几个问题:

  • 如何统一管理、配置和更新这些分散的 k8s 的应用资源文件
  • 如何分发和复用一套应用模板
  • 如何将应用的一系列资源当做一个软件包管理

Helm组件

Helm 包含两个组件,分别是 helm 客户端 和 Tiller 服务器:

  • helm 是一个命令行工具,用于本地开发及管理chart,chart仓库管理等
    Tiller 是 Helm 的服务端。Tiller 负责接收 Helm 的请求,与 k8s 的 apiserver 交互,根据chart 来生成一个 release 并管理 release
  • chart Helm的打包格式叫做chart,所谓chart就是一系列文件, 它描述了一组相关的 k8s 集群资源
  • release 使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release
  • Repoistory Helm chart 的仓库,Helm 客户端通过 HTTP 协议来访问存储库中 chart 的索引文件和压缩包

Helm工作流程

  1. 读取 Chart 和 Values
  • 读取 Chart:Helm 会读取指定的 Chart 包,包括Chart.yaml、values.yaml文件以及templates/目录下的模板文件。
  • 合并 ValuesHelm 会将values.yaml文件中的默认值与用户通过--set参数或-f参数提供的自定义值合并,形成最终的配置值。
  1. 渲染模板
  • 模板渲染Helm 使用 Go 模板引擎将templates/目录下的模板文件(如deployment.yaml)渲染成最终的 Kubernetes 资源清单文件。
  • 替换占位符:在渲染过程中,模板中的占位符(如{{ .Values.image.tag }})会被替换为实际的值。
  • 生成资源清单最终生成的资源清单文件是一个完整的 Kubernetes 资源定义,例如 Deployment、Service 等。
  1. 进行检查
  • 渲染资源清单:Helm 首先根据新的 Chart 和 Values 渲染出新的资源清单文件。
  • 获取当前状态:Helm 从 Kubernetes 集群中获取已部署的资源的当前状态。
  • 比较差异
    • deployment 或者 ds 有变化,更新,没变化,不更新。
    • helm 无法检查configmap里面的字段,所以更新了configmap的模板,需要手动操作??是这样的吗?不确定。
    • 有一种猜想:configmap,deployment,sql,等等是并列的,都检查,哪个有变更就变更哪个。
  1. 执行更新
  • 应用资源清单:Helm 将渲染后的资源清单文件发送到 Kubernetes API 服务器,请求更新集群中的资源。
  • Kubernetes 处理更新:Kubernetes API 服务器接收到资源清单后,会根据资源的类型和内容进行相应的更新操作。对于 Deployment,这可能包括创建新的 Pod 副本、逐步替换旧的 Pod 副本等。

Chart

  • chart说白了就是一系列文件,在经过各种组织和渲染后得到几个模板文件,例如ds或者deploy,secret,configmap等多个对象,然后将这些在集群中进行部署,达到一下更新很多组件的效果。
  • Helm的打包格式叫做chart,所谓chart就是一系列文件, 它描述了一组相关的 k8s 集群资源。Chart中的文件安装特定的目录结构组织, 简单的chart 目录如下所示:
.
├── Chart.yaml
├── files
│   ├── 1.tpl
│   └── 1.yaml
├── templates
│   ├── config
│   │   ├── config.yaml
│   │   └── images.yaml
│   ├── configmap.yaml
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── ingress.yaml
│   ├── role.yaml
│   ├── secert.yaml
│   ├── service.yaml
│   └── sql
│       ├── 00-1.sql
│       └── 01-2.sql
└── values.yaml
  • Chart.yaml中放的是chart包的大体信息。
  • values.yaml中放的是各种必要的默认“值”,用于存储 templates 目录中模板文件中用到变量的值。这些值可以在更新的时候被覆盖(因为chart包是自动打的,可能有些值和期望的不符)
  • configmap.yaml这个文件很关键,里面用于动态生成 Kubernetes ConfigMap 资源,这个文件引用了files和templates中的文件生成config资源,并且写了数据库初始化的脚本。
  • files中一般都是些静态文件。
  • templates:模板,顾名思义,存放应用一系列 k8s 资源的 yaml 模板
    • 就是更新这个组件时使用的yaml文件,一般时通过ds或者deployment渲染出来的。
    • _helpers.tpl 此文件中定义一些可重用的模板片断,此文件中的定义在任何资源定义模板中可用。
    • 这里面可以添加其他各种各样的模板,但是 根据业务的需求 去添加,我们最需要就是deployment.yaml。
    • sql里面,就是数据库初始化的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值