helm入门
Helm 是什么??
Helm 是 Kubernetes 的包管理器。包管理器类似于我们在 Ubuntu 中使用的apt、Centos中使用的yum 或者Python中的 pip 一样,能快速查找、下载和安装软件包。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 原理
下面两张图描述了 Helm 的几个关键组件 Helm(客户端)、Tiller(服务器)、Repository(Chart 软件仓库)、Chart(软件包)之间的关系以及它们之间如何通信
创建release
helm 客户端从指定的目录或本地tar文件或远程repo仓库解析出chart的结构信息
helm 客户端指定的 chart 结构和 values 信息通过 gRPC 传递给 Tiller
Tiller 服务端根据 chart 和 values 生成一个 release
Tiller 将install release请求直接传递给 kube-apiserver
删除release
helm 客户端从指定的目录或本地tar文件或远程repo仓库解析出chart的结构信息
helm 客户端指定的 chart 结构和 values 信息通过 gRPC 传递给 Tiller
Tiller 服务端根据 chart 和 values 生成一个 release
Tiller 将delete release请求直接传递给 kube-apiserver
更新release
helm 客户端将需要更新的 chart 的 release 名称 chart 结构和 value 信息传给 Tiller
Tiller 将收到的信息生成新的 release,并同时更新这个 release 的 history
Tiller 将新的 release 传递给 kube-apiserver 进行更新
chart 的基本结构
Helm的打包格式叫做chart,所谓chart就是一系列文件, 它描述了一组相关的 k8s 集群资源。
Chart中的文件安装特定的目录结构组织, 最简单的chart 目录如下所示:
charts 目录存放依赖的chart
Chart.yaml 包含Chart的基本信息,包括chart版本,名称等
templates 目录下存放应用一系列 k8s 资源的 yaml 模板
_helpers.tpl 此文件中定义一些可重用的模板片断,此文件中的定义在任何资源定义模板中可用
NOTES.txt 介绍chart 部署后的帮助信息,如何使用chart等
values.yaml 包含了必要的值定义(默认值), 用于存储 templates 目录中模板文件中用到变量的值
Chart 文件结构
wordpress ├── charts ├── Chart.yaml ├── README.md ├── requirements.lock ├── requirements.yaml ├── templates │ ├── deployment.yaml │ ├── externaldb-secrets.yaml │ ├── _helpers.tpl │ ├── ingress.yaml │ ├── NOTES.txt │ ├── pvc.yaml │ ├── secrets.yaml │ ├── svc.yaml │ └── tls-secrets.yaml └── values.yaml
一个 wordpress chart 如上(去除部分 test 和 charts 依赖), 基本结构由以下几个部分组成:
charts 存放子Chart (Subchart) 的定义,Subchart 指的是当前 Chart 依赖的 Chart , 在 requirements.yaml 中定义
Chart.yaml 包含 Chart 信息的 YAML 文件, 包括 Chart 的版本、名称等,在 DCE Helm 插件中还包含 Chart 的 团队授权 信息 和 是否公开 的信息
README.md 可选:Chart 的介绍信息等(该文件对于一个大型 Chart 来说十分重要)
Requirements.yaml 可选:列举当前 Chart 的需要依赖的 Chart
templates
该目录下存放 Chart 所有的 K8s 资源定义模板,通常不同的资源放在不同的文件中,DCE Helm 插件中自定义模板的 K8s 资源统一放在 all_sources.yaml 文件中
_helpers.tpl , 通常这个文件存放可重用的模板片段,该文件中的定义可以在 Chart 其它资源定义模板中使用
NOTES.txt,可选:一段简短使用说明的文本文件,用于安装 Release 后提示用户使用
values.yaml 当前 Chart 的默认配置的值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)