This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.5.6.6. 启用 Operator 条件
Operator Lifecycle Manager(OLM)为 Operator 提供一个频道来交流影响 Operator 在管理 Operator 的复杂状态。默认情况下,OLM 在安装 Operator 时会创建一个 OperatorCondition
自定义资源定义(CRD)。根据 OperatorCondition
自定义资源(CR)中设置的条件,OLM 的行为会相应更改。
要支持 Operator 条件,Operator 必须能够读取由 OLM 创建的 OperatorCondition
CR,并具有完成以下任务的能力:
- 获取特定条件。
- 设置特定条件的状态。
这可以通过使用 operator-lib
库来实现。Operator 作者可在 Operator 中提供 controller-runtime
客户端,以便该程序库访问集群中 Operator 拥有的 OperatorCondition
CR。
该程序库提供了一个通用的 Conditions
接口,它使以下方法在 OperatorCondition
CR 中 Get
和 Set
一个 conditionType
:
Get
-
要获得特定条件,程序库使用来自
controller-runtime
的client.Get
函数,它需要在conditionAccessor
中存在类型type.NamespacedName
的ObjectKey
。 Set
-
要更新特定条件的状态,程序库使用来自
controller-runtime
的client.Update
功能。如果 CRD 中不存在conditionType
,则会出现错误。
Operator 只允许修改 CR 的 status
子资源。operator 可以删除或更新 status.conditions
数组,使其包含条件。有关条件中字段的格式和描述的详情,请查看上游的条件 GoDocs。
Operator SDK v1.3.0 支持 operator-lib
v0.3.0。
先决条件
- 使用 Operator SDK 生成一个 Operator 项目。
流程
在 Operator 项目中启用 Operator 条件:
在 Operator 项目的
go.mod
文件中,将operator-framework/operator-lib
添加为所需的库:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Operator 逻辑中编写自己的构造器,会导致以下结果:
-
接受
controller-runtime
客户端。 -
接受
conditionType
。 -
返回一个
Condition
接口以更新或添加条件。
由于 OLM 目前支持
Upgradeable
条件,因此可以创建一个接口,它具有访问Upgradeable
条件的方法。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个示例中,
NewUpgradeable
constructor 被进一步使用来创建类型为Condition
的一个变量cond
。cond
变量依次使用Get
和Set
方法,可用于处理 OLM 的Upgradeable
条件。-
接受