×

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)

自定义资源文件

Operators 使用 Kubernetes 扩展机制,自定义资源定义 (CRD),因此您的自定义资源 (CR) 看起来并像内置的原生 Kubernetes 对象一样运行。

CR 文件格式是一个 Kubernetes 资源文件。该对象具有必填字段和可选字段。

表 1. 自定义资源字段
字段 描述

apiVersion

要创建的 CR 的版本。

kind

要创建的 CR 的种类。

metadata

要创建的 Kubernetes 特定元数据。

spec(可选)

传递给 Ansible 的变量的键值列表。此字段默认为空。

status

总结对象的当前状态。对于基于 Ansible 的 Operators,status 子资源 默认情况下由 operator_sdk.util.k8s_status Ansible 模块为 CRD 启用并由其管理,其中包括 condition 信息到 CR status

annotations

要附加到 CR 的 Kubernetes 特定注释。

以下 CR 注释列表修改 Operator 的行为

表 2. 基于 Ansible 的 Operator 注释
注释 描述

ansible.operator-sdk/reconcile-period

指定 CR 的协调间隔。此值使用标准 Golang 包 time 解析。具体来说,使用 ParseDuration,它应用默认后缀 s,以秒为单位提供值。

基于 Ansible 的 Operator 注释示例
apiVersion: "test1.example.com/v1alpha1"
kind: "Test1"
metadata:
  name: "example"
annotations:
  ansible.operator-sdk/reconcile-period: "30s"

watches.yaml 文件

组/版本/种类 (GVK) 是 Kubernetes API 的唯一标识符。watches.yaml 文件包含从自定义资源 (CR)(由其 GVK 标识)到 Ansible 角色或剧本的映射列表。Operator 预期此映射文件位于预定义位置 /opt/ansible/watches.yaml

表 3. watches.yaml 文件映射
字段 描述

group

要观察的 CR 的组。

version

要观察的 CR 的版本。

kind

要观察的 CR 的种类

role(默认)

添加到容器的 Ansible 角色的路径。例如,如果您的 roles 目录位于 /opt/ansible/roles/ 并且您的角色名为 busybox,则此值为 /opt/ansible/roles/busybox。此字段与 playbook 字段互斥。

playbook

添加到容器的 Ansible 剧本的路径。此剧本应是调用角色的一种方式。此字段与 role 字段互斥。

reconcilePeriod(可选)

协调间隔,给定 CR 的角色或剧本运行的频率。

manageStatus(可选)

设置为 true(默认)时,Operator 以通用方式管理 CR 的状态。设置为 false 时,CR 的状态由其他地方管理,由指定的角色或剧本或单独的控制器管理。

watches.yaml 文件示例
- version: v1alpha1 (1)
  group: test1.example.com
  kind: Test1
  role: /opt/ansible/roles/Test1

- version: v1alpha1 (2)
  group: test2.example.com
  kind: Test2
  playbook: /opt/ansible/playbook.yml

- version: v1alpha1 (3)
  group: test3.example.com
  kind: Test3
  playbook: /opt/ansible/test3.yml
  reconcilePeriod: 0
  manageStatus: false
1 Test1 简单映射到 test1 角色的示例。
2 Test2 简单映射到剧本的示例。
3 Test3类型的更复杂示例。此示例在剧本中禁用重新入队和CR状态管理。

高级选项

可以通过在每个GVK的watches.yaml文件中添加高级功能来启用它们。它们可以位于groupversionkindplaybookrole字段之下。

某些功能可以使用CR上的注释在每个资源上进行覆盖。可以覆盖的选项在下面指定了注释。

表4. 高级watches.yaml文件选项
功能 YAML键 描述 覆盖注释 默认值

协调周期

reconcilePeriod

特定CR的协调运行之间的时间间隔。

ansible.operator-sdk/reconcile-period

1m

管理状态

manageStatus

允许操作员管理每个CR status部分的conditions部分。

true

监视依赖资源

watchDependentResources

允许操作员动态监视Ansible创建的资源。

true

监视集群范围资源

watchClusterScopedResources

允许操作员监视Ansible创建的集群范围资源。

false

最大运行器工件

maxRunnerArtifacts

管理Ansible Runner为每个单独资源在操作员容器中保留的工件目录数量。

ansible.operator-sdk/max-runner-artifacts

20

包含高级选项的示例watches.yml文件
- version: v1alpha1
  group: app.example.com
  kind: AppService
  playbook: /opt/ansible/playbook.yml
  maxRunnerArtifacts: 30
  reconcilePeriod: 5s
  manageStatus: False
  watchDependentResources: False

发送到Ansible的额外变量

可以将额外变量发送到Ansible,然后由操作员进行管理。自定义资源(CR)的spec部分将键值对作为额外变量传递。这相当于传递到ansible-playbook命令中的额外变量。

操作员还在meta字段下传递CR的名称和CR的命名空间的附加变量。

对于以下CR示例

apiVersion: "app.example.com/v1alpha1"
kind: "Database"
metadata:
  name: "example"
spec:
  message: "Hello world 2"
  newParameter: "newParam"

传递给Ansible的额外变量结构为

{ "meta": {
        "name": "<cr_name>",
        "namespace": "<cr_namespace>",
  },
  "message": "Hello world 2",
  "new_parameter": "newParam",
  "_app_example_com_database": {
     <full_crd>
   },
}

messagenewParameter字段作为额外变量设置在顶层,meta提供操作员中定义的CR的相关元数据。可以使用点表示法在Ansible中访问meta字段,例如

---
- debug:
    msg: "name: {{ ansible_operator_meta.name }}, {{ ansible_operator_meta.namespace }}"

Ansible Runner目录

Ansible Runner将有关Ansible运行的信息保存在容器中。它位于/tmp/ansible-operator/runner/<group>/<version>/<kind>/<namespace>/<name>

其他资源