×

Red Hat 支持的 Operator SDK CLI 工具版本(包括与 Operator 项目相关的脚手架和测试工具)已弃用,计划在未来版本的 OpenShift Dedicated 中移除。Red Hat 将在此版本的生命周期内为此功能提供错误修复和支持,但此功能将不再接收增强功能,并将从未来的 OpenShift Dedicated 版本中移除。

不建议使用 Red Hat 支持的 Operator SDK 版本创建新的 Operator 项目。拥有现有 Operator 项目的 Operator 作者可以使用 OpenShift Dedicated 发布的 Operator SDK CLI 工具版本来维护其项目并创建针对较新版本的 OpenShift Dedicated 的 Operator 版本。

以下与 Operator 项目相关的基本镜像 *未* 弃用。这些基本镜像的运行时功能和配置 API 仍然支持错误修复和解决 CVE。

  • 基于 Ansible 的 Operator 项目的基本镜像

  • 基于 Helm 的 Operator 项目的基本镜像

有关不受支持的社区维护的 Operator SDK 版本的信息,请参见 Operator SDK (Operator Framework)

关于基于 Ansible 的运算符中的自定义资源状态

基于 Ansible 的运算符会自动使用关于先前 Ansible 运行的通用信息更新自定义资源 (CR) status 子资源。这包括成功和失败的任务数量以及相关的错误消息,如下所示

status:
  conditions:
  - ansibleResult:
      changed: 3
      completion: 2018-12-03T13:45:57.13329
      failures: 1
      ok: 6
      skipped: 0
    lastTransitionTime: 2018-12-03T13:45:57Z
    message: 'Status code was -1 and not [200]: Request failed: <urlopen error [Errno
      113] No route to host>'
    reason: Failed
    status: "True"
    type: Failure
  - lastTransitionTime: 2018-12-03T13:46:13Z
    message: Running reconciliation
    reason: Running
    status: "True"
    type: Running

基于 Ansible 的运算符还允许 Operator 作者使用 k8s_status Ansible 模块提供自定义状态值,该模块包含在 operator_sdk.util 集合 中。这允许作者根据需要使用任何键值对从 Ansible 中更新 status

默认情况下,基于 Ansible 的运算符始终包含如上所示的通用 Ansible 运行输出。如果您希望您的应用程序 *不* 使用 Ansible 输出更新状态,您可以从您的应用程序手动跟踪状态。

手动跟踪自定义资源状态

您可以使用 operator_sdk.util 集合修改基于 Ansible 的运算符,以便从您的应用程序手动跟踪自定义资源 (CR) 状态。

前提条件
  • 使用 Operator SDK 创建的基于 Ansible 的 Operator 项目

步骤
  1. 使用设置为 falsemanageStatus 字段更新 watches.yaml 文件

    - version: v1
      group: api.example.com
      kind: <kind>
      role: <role>
      manageStatus: false
  2. 使用 operator_sdk.util.k8s_status Ansible 模块更新子资源。例如,要使用键 test 和值 data 更新,可以使用 operator_sdk.util,如下所示

    - operator_sdk.util.k8s_status:
        api_version: app.example.com/v1
        kind: <kind>
        name: "{{ ansible_operator_meta.name }}"
        namespace: "{{ ansible_operator_meta.namespace }}"
        status:
          test: data
  3. 您可以在角色的 meta/main.yml 文件中声明集合,该文件包含在基于 Ansible 的脚手架化运算符中

    collections:
      - operator_sdk.util
  4. 在角色元数据中声明集合后,您可以直接调用 k8s_status 模块

    k8s_status:
      ...
      status:
        key1: value1