×

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

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

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

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

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

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

关于基于 Ansible 的 Operator 中的自定义资源状态

基于 Ansible 的 Operator 会自动使用有关先前 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 还允许 Operator 作者使用包含在 operator_sdk.util 集合 中的 k8s_status Ansible 模块提供自定义状态值。这允许作者根据需要使用任何键值对从 Ansible 内部更新status

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

手动跟踪自定义资源状态

您可以使用 operator_sdk.util 集合修改基于 Ansible 的 Operator 以从您的应用程序手动跟踪自定义资源 (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 的 Operator 中

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

    k8s_status:
      ...
      status:
        key1: value1