跳至主要内容

Helm

Helm 是 Kubernetes 的首选包管理工具。Helm 图表为 Kubernetes YAML 清单文档提供模板语法。使用 Helm,开发人员或集群管理员可以创建可配置的模板(称为图表),而不是只使用静态清单。有关创建自己的图表目录的更多信息,请查看 https://helm.kubernetes.ac.cn/docs/intro/quickstart/ 中的文档。

K3s 不需要任何特殊配置来支持 Helm。只需确保您已按照 集群访问 文档中的说明正确设置了 kubeconfig 路径。

K3s 包含一个 Helm 控制器,该控制器使用 HelmChart 自定义资源定义 (CRD) 来管理安装、升级/重新配置和卸载 Helm 图表。与 自动部署的附加组件清单 配合使用,您可以在磁盘上创建一个单文件来实现自动在集群上安装 Helm 图表。

使用 Helm 控制器

HelmChart 自定义资源 HelmChart 自定义资源 捕获了您通常传递给 helm 命令行工具的大多数选项。以下是如何从 Bitnami 图表库部署 Apache 的示例,该示例覆盖了一些默认图表值。请注意,HelmChart 资源本身位于 kube-system 命名空间中,但图表资源将部署到 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

从私有库部署具有身份验证的 helm 图表的示例

apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
namespace: kube-system
name: example-app
spec:
targetNamespace: example-space
createNamespace: true
version: v1.2.3
chart: example-app
repo: https://secure-repo.example.com
authSecret:
name: example-repo-auth
repoCAConfigMap:
name: example-repo-ca
valuesContent: |-
image:
tag: v1.2.2
---
apiVersion: v1
kind: Secret
metadata:
namespace: kube-system
name: example-repo-auth
type: kubernetes.io/basic-auth
stringData:
username: user
password: pass
---
apiVersion: v1
kind: ConfigMap
metadata:
namespace: kube-system
name: example-repo-ca
data:
ca.crt: |-
-----BEGIN CERTIFICATE-----
<YOUR CERTIFICATE>
-----END CERTIFICATE-----

HelmChart 字段定义

字段默认值说明Helm 参数/标志等效项
metadata.nameHelm 图表名称NAME
spec.chart库中的 Helm 图表名称,或指向图表存档 (.tgz) 的完整 HTTPS URLCHART
spec.targetNamespacedefaultHelm 图表目标命名空间--namespace
spec.createNamespacefalse如果目标命名空间不存在,则创建它--create-namespace
spec.versionHelm 图表版本(从库安装时)--version
spec.repoHelm 图表库 URL--repo
spec.repoCA使用此 CA 捆绑包验证启用 HTTPS 的服务器的证书。应为包含一个或多个 PEM 编码的 CA 证书的字符串。--ca-file
spec.repoCAConfigMap对包含 CA 证书的 ConfigMap 的引用,这些证书将被 Helm 信任。可以与 repoCA 一起使用,也可以代替 repoCA 使用。--ca-file
spec.helmVersionv3要使用的 Helm 版本(v2v3
spec.bootstrapFalse如果需要此图表来引导集群(云控制器管理器等),则设置为 True
spec.set覆盖简单的默认图表值。这些值优先于通过 valuesContent 设置的选项。--set / --set-string
spec.jobImage指定在安装 helm 图表时要使用的镜像。例如 rancher/klipper-helm:v0.3.0 .
spec.backOffLimit1000指定在将作业视为失败之前要重试的次数。
spec.timeout300sHelm 操作的超时时间,作为 持续时间字符串 (300s, 10m, 1h 等)--timeout
spec.failurePolicyreinstall设置为 abort,在这种情况下,Helm 操作将中止,需要操作员手动干预。
spec.authSecret对类型为 kubernetes.io/basic-auth 的 Secret 的引用,该 Secret 存储用于图表库的基本身份验证凭据。
spec.authPassCredentialsfalse将基本身份验证凭据传递到所有域。--pass-credentials
spec.dockerRegistrySecret对类型为 kubernetes.io/dockerconfigjson 的 Secret 的引用,该 Secret 存储用于充当图表库的 OCI 基于注册表的 Docker 身份验证凭据。
spec.valuesContent通过 YAML 文件内容覆盖复杂的默认图表值--values
spec.chartContentBase64 编码的图表存档 .tgz - 覆盖 spec.chartCHART

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

注意

name 字段应遵循 Helm 图表命名约定。请参考 Helm 最佳实践文档 了解详细信息。

使用 HelmChartConfig 自定义打包组件

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

注意

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

例如,要自定义打包的 Traefik 入口配置,您可以创建一个名为 /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: 2.9.10
ports:
web:
forwardedHeaders:
trustedIPs:
- 10.0.0.0/8

从 Helm v2 迁移

K3s 可以处理 Helm v2 或 Helm v3。如果您希望迁移到 Helm v3, 篇 Helm 博客文章介绍了如何使用插件成功迁移。有关更多信息,请参考官方 Helm 3 文档 此处。只需确保您已按照关于 集群访问 的部分正确设置了您的 kubeconfig。

注意

Helm 3 不再需要 Tiller 和 helm init 命令。有关详细信息,请参阅官方文档。