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
    1. dependencies:
    2. - name: apache
    3. version: 1.2.3
    4. repository: http://example.com/charts
    5. version: 3.2.1
    6. repository: http://another.example.com/charts

    Chart 模板基于 Go template 和 Sprig,比如

    1. imageRegistry: "quay.io/deis"
    2. dockerTag: "latest"
    3. storage: "s3"
    4. # 依赖的 mysql chart 的默认参数
    5. mysql:
    6. password: "secret"

    插件提供了扩展 Helm 核心功能的方法,它在客户端执行,并放在 $(helm home)/plugins 目录中。

    一个典型的 helm 插件格式为

    而 plugin.yaml 格式为

    1. name: "keybase"
    2. version: "0.1.0"
    3. usage: "Integreate Keybase.io tools with Helm"
    4. description: |-
    5. This plugin provides Keybase services to Helm.
    6. ignoreFlags: false
    7. command: "$HELM_PLUGIN_DIR/keybase.sh"

    这样,就可以用 命令来使用这个插件。