自定义资源

最佳实践的这部分处理创建和使用自定义资源。

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

1、CRD的声明。是一个具有CustomResourceDefinition类型的yaml文件。

2、有些资源使用CRD.假设CRD定义了foo.example.com/v1。任何有apiVersion: example.com/v1和Foo类的资源都可以使用CRD。

使用资源之前安装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 install和helm upgrade时的--dry-run参数目前不支持CRD。“模拟运行”的目的是检测chart的输出是否在发送到服务器时实际有效。但是CRD是对服务器行为的修改。Helm无法再模拟运行时安装CRD,因此客户端无法知道自定义资源(CR),验证就会失败。您可以将CRD移动到自己的chart中或者helm upgrade代替。

在讨论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分开安装,但对于具有集群管理员访问权限的操作员,这种工作流可能更有用。

————————————

仅用于本人学习

来源:Helm | Docs

01-30 22:40