helm

Posted by llussy on January 16, 2019

helm概念

Helm 有两个重要的概念:chart 和 release。

​ chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。可以将 chart 想象成 apt、yum 中的软件安装包。

​ release 是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release。

Helm 是包管理工具,这里的包就是指的 chart。Helm 能够:

  1. 从零创建新 chart。
  2. 与存储 chart 的仓库交互,拉取、保存和更新 chart。
  3. 在 Kubernetes 集群中安装和卸载 release。
  4. 更新、回滚和测试 release。

Helm 包含两个组件:Helm 客户端 和 Tiller 服务器。

image-20181125112903848

Helm 客户端是终端用户使用的命令行工具,用户可以:

  1. 在本地开发 chart。
  2. 管理 chart 仓库。
  3. 与 Tiller 服务器交互。
  4. 在远程 Kubernetes 集群上安装 chart。
  5. 查看 release 信息。
  6. 升级或卸载已有的 release。

Tiller 服务器运行在 Kubernetes 集群中,它会处理 Helm 客户端的请求,与 Kubernetes API Server 交互。Tiller 服务器负责:

  1. 监听来自 Helm 客户端的请求。
  2. 通过 chart 构建 release。
  3. 在 Kubernetes 中安装 chart,并跟踪 release 的状态。
  4. 通过 API Server 升级或卸载已有的 release。

简单的讲:Helm 客户端负责管理 chart;Tiller 服务器负责管理 release。

helm官方文档

helm中文文档

安装初始化

curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash 或者二进制安装,放到执行kubectl的机器上,修改可执行属性 二进制包下载地址 在所有node节点安装socat yum install -y socat

ifeng hub tiller

docker pull docker.ifeng.com/file/tiller:v2.9.1
docker tag 6253045f26c6 gcr.io/kubernetes-helm/tiller:v2.9.1

初始化

$ kubectl -n kube-system create sa tiller
$ kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
$ helm init --service-account tiller
(init 需要访问google,可以使用以下方式)
helm init --upgrade --tiller-image fishead/gcr.io.kubernetes-helm.tiller:v2.11.0 
# helm version
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

helm 补全

编辑.bashrc,追加 source <(helm completion bash)

更新

server

helm init --tiller-image docker.ifeng.com/file/tiller:v2.12.3 --upgrade

常用命令

- helm repo list
- helm search mysql
- helm  repo update
- helm list
- helm delete xxxx -force
- helm install -f ./prometheus/values.yaml --name prometheus --namespace=monitoring ./prometheus
- helm upgrade -f kube-prometheus/values.yaml prometheus ./kube-prometheus/
- helm delete prometheus --purge
- helm fetch stable/redis-ha    #将tar包拉到本地

helm安装方式

- 指定chart: helm install stable/mariadb
- 指定打包的chart: helm install ./nginx-1.2.3.tgz 
- 指定打包目录: helm install -f ./prometheus-8.4.2/values.yaml --name prometheus --namespace=monitoring ./prometheus-8.4.2/
- 指定chart包URL: helm install https://example.com/charts/nginx-1.2.3.tgz

CHART chart 是 Helm 的应用打包格式,一旦安装了某个 chart,我们就可以在 ~/.helm/cache/archive 中找到 chart 的 tar 包。

helm 调试

helm lint 验证chart是否有错误

helm install --dry-run --debug 调试,渲染模板并返回

helm get mainfest 输出已安装好的yaml配置

chart目录结构

chart目录结构详细介绍

image-20190109225503842

  • Chart.yaml YAML 文件,描述 chart 的概要信息。name 和 version 是必填项,其他都是可选。
  • README.md Markdown 格式的 README 文件
  • values.yaml chart 支持在安装的时根据参数进行定制化配置,而 values.yaml 则提供了这些配置参数的默认值。
  • templates目录 各类 Kubernetes 资源的配置模板都放置在这里。Helm 会将 values.yaml 中的参数值注入到模板中生成标准的 YAML 配置文件。模板是 chart 最重要的部分,也是 Helm 最强大的地方。模板增加了应用部署的灵活性,能够适用不同的环境,我们后面会详细讨论。
  • templates/NOTES.txt chart 的简易使用文档,chart 安装成功后会显示此文档内容。与模板一样,可以在 NOTE.txt 中插入配置参数,Helm 会动态注入参数值。

更新 helm upgrade

修改了values.yaml文件,upgrade后 prometheus-kube-prometheus-0会重启 数据会被清空 ,后续考虑共享存储

helm upgrade -f kube-prometheus/values.yaml kube-prometheus ./kube-prometheus/

版本回滚

helm rollback prometheus 3

参考

离线安装helm和tiller