×

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

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

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

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

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

有关OpenShift Container Platform中已弃用或删除的主要功能的最新列表,请参阅OpenShift Container Platform发行说明中的“已弃用和已删除的功能”部分。

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

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

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

默认情况下,基于Ansible的Operators始终包含如上所示的通用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的Operators中

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

    k8s_status:
      ...
      status:
        key1: value1