跳到主要内容

Helm

Helm 是 Kubernetes 的包管理工具。Helm Chart 为 Kubernetes YAML 清单文件提供了模板语法。借助 Helm,开发人员或集群管理员可以创建称为 Chart 的可配置模板,而不仅仅是使用静态清单。如果你需要创建自己的 Chart catalog,请参阅 https://helm.sh/docs/intro/quickstart/。

K3s 不需要使用任何特殊配置来支持 Helm。请确保你已根据集群访问文档正确设置了 kubeconfig 路径。

K3s 包含一个 Helm Controller,它使用 HelmChart 自定义资源定义 (CRD) 来管理 Helm Chart 的安装、升级、重新配置和卸载。与自动部署 AddOn 清单配合使用后,它可以在磁盘上创建单个文件,自动在集群上安装 Helm Chart。

使用 Helm Controller​

HelmChart Custom Resource 捕获了你通常传递给 helm 命令行工具的大部分选项。以下示例说明了如何从 Bitnami Chart 仓库部署 Apache,并覆盖某些默认的 Chart 值。请注意,HelmChart 资源本身位于 kube-system 命名空间中,但 Chart 的资源将部署到在同一清单中创建的 web 命名空间。如果你希望将 HelmChart 资源与其部署的资源分开,这将很有用。

apiVersion: v1
kind: Namespace
metadata:
name: web
---
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: apache
namespace: kube-system
spec:
repo: https://charts.bitnami.com/bitnami
chart: apache
targetNamespace: web
valuesContent: |-
service:
type: ClusterIP
ingress:
enabled: true
hostname: www.example.com
metrics:
enabled: true

HelmChart 字段定义​

字段默认描述Helm 参数/标志等效项
metadata.nameHelm Chart 名称NAME
spec.chart仓库中的 Helm Chart 名称,或 chart archive (.tgz) 的完整 HTTPS URLCHART
spec.targetNamespacedefaultHelm Chart 目标命名空间--namespace
spec.versionHelm Chart 版本(通过仓库安装时)--version
spec.repoHelm Chart 仓库 URL--repo
spec.repoCA指定启用 HTTPS 的 Server 的证书--ca-file
spec.helmVersionv3要使用的 Helm 版本(v2 或 v3)
spec.bootstrapFalse如果需要此 Chart 来引导集群(Cloud Controller Manager 等),请设置为 True
spec.set覆盖简单的默认 Chart 值。优先于通过 valuesContent 设置的选项。--set / --set-string
spec.jobImage指定安装 helm chart 时要使用的镜像。例如:rancher/klipper-helm:v0.3.0
spec.timeout300sHelm 操作的超时,作为 duration string(300s、10m、1h 等)--timeout
spec.failurePolicyreinstall如果设置为 abort,Helm 操作会被中止,等待操作人员的手动干预。
spec.valuesContent通过 YAML 文件内容覆盖复杂的默认 Chart 值--values
spec.chartContentBase64 编码的 chart archive .tgz,覆盖 spec.chartCHART

你可以通过集群内的 Kubernetes APIServer 匿名访问 /var/lib/rancher/k3s/server/static/ 中的内容。此 URL 可以使用 spec.chart 字段中的特殊变量 %{KUBERNETES_API}% 进行模板化。例如,打包的 Traefik 组件通过 https://%{KUBERNETES_API}%/static/charts/traefik-12.0.000.tgz 加载 Chart。

备注

name 字段需要遵循 Helm Chart 命名约定。有关更多信息,请参阅 Helm 最佳实践文档。

使用 HelmChartConfig 自定义打包组件​

版本

从 v1.19.1+k3s1 起可用

为了允许覆盖部署为 HelmCharts(例如 Traefik)的打包组件的值,K3s 支持通过 HelmChartConfig 资源进行自定义部署。HelmChartConfig 资源必须与对应的 HelmChart 名称和命名空间匹配,并且支持提供额外的 valuesContent,它作为附加值文件传递给 helm 命令。

备注

HelmChart spec.set 值会覆盖 HelmChart 和 HelmChartConfig spec.valuesContent 设置。

例如,要自定义打包的 Traefik ingress 配置,你可以创建一个名为 /var/lib/rancher/k3s/server/manifests/traefik-config.yaml 的文件并使用以下内容填充它:

apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: traefik
namespace: kube-system
spec:
valuesContent: |-
image:
name: traefik
tag: v2.8.5
forwardedHeaders:
enabled: true
trustedIPs:
- 10.0.0.0/8
ssl:
enabled: true
permanentRedirect: false

从 Helm v2 迁移​

版本

v1.17.0+k3s.1 开始支持 Helm v3 并默认使用它。

K3s 可以处理 Helm v2 或 Helm v3。如果你想迁移到 Helm v3,Helm 的这篇博客文章解释了如何使用插件进行迁移。有关更多信息,请参阅官方 Helm 3 文档。请确保你已按照集群访问部分正确设置了 kubeconfig。

备注

Helm 3 不再需要 Tiller 和 helm init 命令。详情请参阅官方文档。