4.6. 管理 Operator 条件
作为集群管理员,您可以使用 Operator Lifecycle Manager(OLM)来管理 Operator 状况。
4.6.1. 覆盖 Operator 条件
作为集群管理员,您可能想要忽略由 Operator 报告的、支持的 Operator 条件。当存在时,Spec.Overrides
阵列中的 Operator 条件会覆盖 Spec.Conditions
阵列中的条件,以便集群管理员可以处理 Operator 向 Operator Lifecycle Manager(OLM)报告了不正确状态的情况。
默认情况下,OperatorCondition
对象中不存在 Spec.Overrides
数组,直到集群管理员添加为止。Spec.Conditions
数组还不存在,直到被用户添加或因为自定义 Operator 逻辑而添加为止。
例如,一个 Operator 的已知版本,它始终会告知它是不可升级的。在这种情况下,尽管报告是不可升级的,您仍然希望升级 Operator。这可以通过在 OperatorCondition
对象的 Spec.Overrides
阵列中添加 type
和 status
来覆盖 Operator 条件来实现。
先决条件
-
具有
OperatorCondition
对象的 Operator,使用 OLM 安装。
流程
编辑 Operator 的
OperatorCondition
对象:$ oc edit operatorcondition <name>
在对象中添加
Spec.Overrides
数组:Operator 条件覆盖示例
apiVersion: operators.coreos.com/v1 kind: OperatorCondition metadata: name: my-operator namespace: operators spec: overrides: - type: Upgradeable 1 status: "True" reason: "upgradeIsSafe" message: "This is a known issue with the Operator where it always reports that it cannot be upgraded." conditions: - type: Upgradeable status: "False" reason: "migration" message: "The operator is performing a migration." lastTransitionTime: "2020-08-24T23:15:55Z"
- 1
- 允许集群管理员将升级就绪状态更改为
True
。
4.6.2. 更新 Operator 以使用 Operator 条件
Operator Lifecycle Manager(OLM)会自动为每个它所协调的 ClusterServiceVersion
资源创建一个 OperatorCondition
资源。CSV 中的所有服务帐户都会被授予 RBAC,以便与 Operator 拥有的 OperatorCondition
交互。
Operator 作者可开发其自己的 Operator 来使用 operator-lib
库,以便在由 OLM 部署 Operator 后,它可以设置自己的条件。如需有关编写逻辑以将 Operator 条件设置为 Operator 作者的更多信息,请参阅 Operator SDK 文档。
4.6.2.1. 设置默认值
为了保持向后兼容,OLM 认为在没有 OperatorCondition
时代表不使用条件。因此,要使用 Operator 条件的 Operator,在将 pod 的就绪探测设置为 true
前应设置默认条件。这为 Operator 提供了一个宽限期,用于将条件更新为正确的状态。