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 阵列中添加 typestatus 来覆盖 Operator 条件来实现。

先决条件

  • 具有 OperatorCondition 对象的 Operator,使用 OLM 安装。

流程

  1. 编辑 Operator 的 OperatorCondition 对象:

    $ oc edit operatorcondition <name>
  2. 在对象中添加 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 条件页面。

4.6.2.1. 设置默认值

为了保持向后兼容,OLM 认为在没有 OperatorCondition 时代表不使用条件。因此,要使用 Operator 条件的 Operator,在将 pod 的就绪探测设置为 true 前应设置默认条件。这为 Operator 提供了一个宽限期,用于将条件更新为正确的状态。

4.6.3. 其他资源