K8s 可以对容器化应用进行部署运行, 资源调度, 服务发现, 动态伸缩等. 而 Helm 可以对 K8s 的应用进行打包, 分发, 安装, 升级, 回退.
用户通过 K8s API 描述应用, 编写成配置 Yaml 文件, 包括 Pod, Service, Volume, Namespace, ReplicaSet, Development, Job/CronJob 等资源类型. 通过 Kubectl 调用 K8s API 进行部署.
K8s 在对应用进行描述的时候, 使用的都是分散的 API, 多个 API 配置文件的管理问题, 多个 API 配置文件作为应用整体进行管理, 如何分发重用应用配置都是 Helm 解决的问题.
相关概念
Chart 是软件包, TAR 格式. 类似 deb, rpm 包. 包含 Yaml 文件, 可以在部署时指定一些 Metadata 便于应用分发.
Release 是 Helm 将 Chart 发布时创建的实例.
Tiller 是 Helm 2 版本的服务端, 在 Helm 3 版本中将其移除 了. Helm 2 版本中, 将其部署在 K8s 中. 负责 release 管理.
Repository 仓库, 一个提供保存, 下载 Chart 功能的 Web 服务器.
Chart 的文件结构
Chart 实际是 tar 归档文件.
1 | # 添加官方 stable repo |
Chart 包中, 主要包含文件 Chart.yaml
, values.yaml
, requirements.yaml
, 文件夹 templates
, charts
等.
安装及使用
安装 Helm 客户端
1 | curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > bash |
基本操作
1 | # 在 repo 中查找 Chart |
出现的版本兼容问题
执行 helm install db stable/mysql
报错:
1 | Error: unable to build kubernetes objects from release manifest: the server could not find the requested resource |
打印详细日志 helm install db stable/mysql --debug
报错:
1 | helm install db stable/mysql --debug |
查看 helm 和 k8s 版本:
1 | > helm version |
究其原因, helm 使用的是 3.x 版本, K8s 使用的是 1.5.x 版本. 使用 [Docker K8s 02 环境部署(软件包工具)](Docker K8s 02 环境部署(软件包工具).md) 部署的版本, 为 centos 官方版本, 非 K8s 官方版本, 版本老旧.
使用 [Docker K8s 02 环境部署(kubeadm)](Docker K8s 02 环境部署(kubeadm).md) 进行部署, 即可消除错误.