2.4.4.5. 依赖项最佳实践
在指定依赖项时应该考虑的最佳实践。
- 依赖于 API 或 Operator 的特定版本范围
-
操作员可以随时添加或删除 API ; 始终针对 Operator 所需的任何 API 指定
olm.gvk
依赖项。例外情况是,指定olm.package
约束来替代。 - 设置最小版本
Kubernetes 文档中与 API 的改变相关的部分描述了 Kubernetes 风格的 Operator 允许进行哪些更改。只要 API 向后兼容,Operator 就允许 Operator 对 API 进行更新,而不需要更改 API 的版本。
对于 Operator 依赖项,这意味着了解依赖的 API 版本可能不足以确保依赖的 Operator 正常工作。
例如:
-
TestOperator v1.0.0 提供
MyObject
资源的 v1alpha1 API 版本。 -
TestOperator v1.0.1 为
MyObject
添加了一个新的spec.newfield
字段,但仍是 v1alpha1。
您的 Operator 可能需要将
spec.newfield
写入MyObject
资源。仅使用olm.gvk
约束还不足以让 OLM 决定您需要 TestOperator v1.0.1 而不是 TestOperator v1.0.0。如果事先知道提供 API 的特定 Operator,则指定额外的
olm.package
约束来设置最小值。-
TestOperator v1.0.0 提供
- 省略一个最大版本,或允许一个广泛的范围
因为 Operator 提供了集群范围的资源,如 API 服务和 CRD,所以如果一个 Operator 为依赖项指定了一个小的窗口,则可能会对依赖项的其他用户的更新产生不必要的约束。
在可能的情况下,尽量不要设置最大版本。或者,设置一个非常宽松的语义范围,以防止与其他 Operator 冲突。例如:
>1.0.0 <2.0.0
。与传统的软件包管理器不同,Operator 作者显性地对更新通过 OLM 中的频道进行编码。如果现有订阅有可用更新,则假定 Operator 作者表示它可以从上一版本更新。为依赖项设置最大版本会绕过作者的更新流,即不必要的将它截断到特定的上限。
注意集群管理员无法覆盖 Operator 作者设置的依赖项。
但是,如果已知有需要避免的不兼容问题,就应该设置最大版本。通过使用版本范围语法,可以省略特定的版本,如
> 1.0.0 !1.2.1
。
其他资源
- Kubernetes 文档: 更改 API