Helm 工作原理
- Chart:Helm 应用(package),包括该应用的所有 Kubernetes manifest 模版,类似于 YUM RPM 或 Apt dpkg 文件
- Repository:Helm package 存储仓库
- Release:chart 的部署实例,每个 chart 可以部署一个或多个 release
Helm 包括两个部分, 客户端和 tiller
服务端。
helm 客户端是一个命令行工具,负责管理 charts、reprepository 和 release。它通过 gPRC API(使用 kubectl port-forward
将 tiller 的端口映射到本地,然后再通过映射后的端口跟 tiller 通信)向 tiller 发送请求,并由 tiller 来管理对应的 Kubernetes 资源。
Helm 客户端的使用方法参见 Helm 命令。
tiller 对外暴露 gRPC API,供 helm 客户端调用。
Helm 使用 来管理 Kubernetes manifest 文件。每个 chart 都至少包括
- 一个或多个 Kubernetes manifest 文件模版(放置于 templates / 目录中),可以包括 Pod、Deployment、Service 等各种 Kubernetes 资源
Helm 支持两种方式管理依赖的方式:
- 直接把依赖的 package 放在
charts/
目录中 - 使用
requirements.yaml
并用helm dep up foochart
来自动下载依赖的 packages
dependencies:
- name: apache
version: 1.2.3
repository: http://example.com/charts
version: 3.2.1
repository: http://another.example.com/charts
Chart 模板基于 Go template 和 Sprig,比如
imageRegistry: "quay.io/deis"
dockerTag: "latest"
storage: "s3"
# 依赖的 mysql chart 的默认参数
mysql:
password: "secret"
插件提供了扩展 Helm 核心功能的方法,它在客户端执行,并放在 $(helm home)/plugins
目录中。
一个典型的 helm 插件格式为
而 plugin.yaml 格式为
name: "keybase"
version: "0.1.0"
usage: "Integreate Keybase.io tools with Helm"
description: |-
This plugin provides Keybase services to Helm.
ignoreFlags: false
command: "$HELM_PLUGIN_DIR/keybase.sh"
这样,就可以用 命令来使用这个插件。