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.name | Helm 图表名称 | NAME | |
spec.chart | 库中的 Helm 图表名称,或指向图表存档 (.tgz) 的完整 HTTPS URL | CHART | |
spec.targetNamespace | default | Helm 图表目标命名空间 | --namespace |
spec.createNamespace | false | 如果目标命名空间不存在,则创建它 | --create-namespace |
spec.version | Helm 图表版本(从库安装时) | --version | |
spec.repo | Helm 图表库 URL | --repo | |
spec.repoCA | 使用此 CA 捆绑包验证启用 HTTPS 的服务器的证书。应为包含一个或多个 PEM 编码的 CA 证书的字符串。 | --ca-file | |
spec.repoCAConfigMap | 对包含 CA 证书的 ConfigMap 的引用,这些证书将被 Helm 信任。可以与 repoCA 一起使用,也可以代替 repoCA 使用。 | --ca-file | |
spec.helmVersion | v3 | 要使用的 Helm 版本(v2 或 v3 ) | |
spec.bootstrap | False | 如果需要此图表来引导集群(云控制器管理器等),则设置为 True | |
spec.set | 覆盖简单的默认图表值。这些值优先于通过 valuesContent 设置的选项。 | --set / --set-string | |
spec.jobImage | 指定在安装 helm 图表时要使用的镜像。例如 rancher/klipper-helm:v0.3.0 . | ||
spec.backOffLimit | 1000 | 指定在将作业视为失败之前要重试的次数。 | |
spec.timeout | 300s | Helm 操作的超时时间,作为 持续时间字符串 (300s , 10m , 1h 等) | --timeout |
spec.failurePolicy | reinstall | 设置为 abort ,在这种情况下,Helm 操作将中止,需要操作员手动干预。 | |
spec.authSecret | 对类型为 kubernetes.io/basic-auth 的 Secret 的引用,该 Secret 存储用于图表库的基本身份验证凭据。 | ||
spec.authPassCredentials | false | 将基本身份验证凭据传递到所有域。 | --pass-credentials |
spec.dockerRegistrySecret | 对类型为 kubernetes.io/dockerconfigjson 的 Secret 的引用,该 Secret 存储用于充当图表库的 OCI 基于注册表的 Docker 身份验证凭据。 | ||
spec.valuesContent | 通过 YAML 文件内容覆盖复杂的默认图表值 | --values | |
spec.chartContent | Base64 编码的图表存档 .tgz - 覆盖 spec.chart | CHART |
放置在 /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
命令。有关详细信息,请参阅官方文档。