1. 自定义资源(crds)

CRD 是 helm3 中未来存储 kubernetes 扩展的 CRD 资源的目录。

[!WARNING|style:flat] 注意1,在 helm2 中使用 pre-hook-crds 在 helm3 中被移除 注意2,考虑到安全和影响范围不易确定,在 helm3 中 crd 只支持安装,不支持删除和升级

当使用自定义资源时(CRD),区分两个不同的部分很重要:

CRD 的声明。是一个具有 CustomResourceDefinition 类型的 yaml 文件。 有些资源使用 CRD,假设 CRD 定义了 foo.example.com/v1。任何有 apiVersion: example.com/v1 和 Foo 类的资源都可以使用该 CRD。

1.1. 使用资源之前安装CRD声明

Helm 被优化为尽可能快地将尽可能多的资源加载到 Kubernetes 中。按照设计,Kubernetes 可以获取一整套清单并将其全部上线 (称之为协调循环)。

但 CRD 与此不同。对于 CRD 来说,声明必须在所有的 CRD 类型资源使用之前被注册到集群中。注册过程可能需要几秒钟。

方法1: 使用 helm

随着 Helm 3的到来,我们去掉了旧的 crd-install 钩子以便获取更简单的方法。现在可以在 chart 中创建一个名为 crds 的特殊目录来保存CRD。 这些 CRD 没有模板化,但是运行 helm install 时可以为 chart 默认安装。如果 CRD 已经存在,会显示警告并跳过。如果希望跳过 CRD 安装步骤, 可以使用 --skip-crds 参数。

注意事项(和说明):

  • 目前不支持使用 Helm 升级或删除 CRD。由于数据意外丢失的风险,这是经过多次社区讨论后作出的明确决定。对于如何处理 CRD 及其生命周期, 目前社区还未达成共识。随着过程的发展,Helm会逐渐支持这些场景。
  • 执行 helm installhelm upgrade 时的 --dry-run 参数目前不支持 CRD。“模拟运行”的目的是检测chart的输出是否在发送到服务器时实际有效。 但是 CRD 是对服务器行为的修改。Helm无法在模拟运行时安装 CRD,因此客户端无法知道自定义资源(CR),验证就会失败。 你可以将 CRD 移动到自己的 chart 中或者使用 helm template 代替。

在讨论CRD支持时需要考虑的另一个重要点是如何处理模板的渲染。Helm 2中使用crd-install的一个明显缺点是, 由于API可用性的变化导致无法有效验证chart(CRD实际上是向Kubernetes集群添加了另一个可用API)。 如果chart安装了CRD, helm不再有一组有效的API版本可供使用。这也是从CRD删除模板支持的原因。有了CRD安装的新方法crds,我们现在可以确保helm拥有当前集群状态的完全有效的信息。

方法2: 分隔chart

另一个方法是将CRD定义放入chart中,然后将所有使用该CRD的资源放到 另一个 chart中。

这个方法要将每个chart分开安装,但对于具有集群管理员访问权限的操作员,这种工作流可能更有用。

2. CRDs 在 Helm 社区的讨论

Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2022-06-22 02:37:30

results matching ""

    No results matching ""