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 在这个示例中,
NewUpgradeableconstructor 被进一步使用来创建类型为Condition的一个变量cond。cond变量依次使用Get和Set方法,可用于处理 OLM 的Upgradeable条件。-
接受