apiVersion: "test1.example.com/v1alpha1"
kind: "Test1"
metadata:
name: "example"
annotations:
ansible.operator-sdk/reconcile-period: "30s"
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。
有关不受支持的社区维护的 Operator SDK 版本的信息,请参阅 Operator SDK (Operator Framework)。 |
Operators 使用 Kubernetes 扩展机制,自定义资源定义 (CRD),因此您的自定义资源 (CR) 看起来并像内置的原生 Kubernetes 对象一样运行。
CR 文件格式是一个 Kubernetes 资源文件。该对象具有必填字段和可选字段。
字段 | 描述 |
---|---|
|
要创建的 CR 的版本。 |
|
要创建的 CR 的种类。 |
|
要创建的 Kubernetes 特定元数据。 |
|
传递给 Ansible 的变量的键值列表。此字段默认为空。 |
|
总结对象的当前状态。对于基于 Ansible 的 Operators, |
|
要附加到 CR 的 Kubernetes 特定注释。 |
以下 CR 注释列表修改 Operator 的行为
注释 | 描述 |
---|---|
|
指定 CR 的协调间隔。此值使用标准 Golang 包 |
apiVersion: "test1.example.com/v1alpha1"
kind: "Test1"
metadata:
name: "example"
annotations:
ansible.operator-sdk/reconcile-period: "30s"
组/版本/种类 (GVK) 是 Kubernetes API 的唯一标识符。watches.yaml
文件包含从自定义资源 (CR)(由其 GVK 标识)到 Ansible 角色或剧本的映射列表。Operator 预期此映射文件位于预定义位置 /opt/ansible/watches.yaml
。
字段 | 描述 |
---|---|
|
要观察的 CR 的组。 |
|
要观察的 CR 的版本。 |
|
要观察的 CR 的种类 |
|
添加到容器的 Ansible 角色的路径。例如,如果您的 |
|
添加到容器的 Ansible 剧本的路径。此剧本应是调用角色的一种方式。此字段与 |
|
协调间隔,给定 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
文件中添加高级功能来启用它们。它们可以位于group
、version
、kind
和playbook
或role
字段之下。
某些功能可以使用CR上的注释在每个资源上进行覆盖。可以覆盖的选项在下面指定了注释。
功能 | YAML键 | 描述 | 覆盖注释 | 默认值 |
---|---|---|---|---|
协调周期 |
|
特定CR的协调运行之间的时间间隔。 |
|
|
管理状态 |
|
允许操作员管理每个CR |
|
|
监视依赖资源 |
|
允许操作员动态监视Ansible创建的资源。 |
|
|
监视集群范围资源 |
|
允许操作员监视Ansible创建的集群范围资源。 |
|
|
最大运行器工件 |
|
管理Ansible Runner为每个单独资源在操作员容器中保留的工件目录数量。 |
|
|
- version: v1alpha1
group: app.example.com
kind: AppService
playbook: /opt/ansible/playbook.yml
maxRunnerArtifacts: 30
reconcilePeriod: 5s
manageStatus: False
watchDependentResources: False
可以将额外变量发送到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>
},
}
message
和newParameter
字段作为额外变量设置在顶层,meta
提供操作员中定义的CR的相关元数据。可以使用点表示法在Ansible中访问meta
字段,例如
---
- debug:
msg: "name: {{ ansible_operator_meta.name }}, {{ ansible_operator_meta.namespace }}"
Ansible Runner将有关Ansible运行的信息保存在容器中。它位于/tmp/ansible-operator/runner/<group>/<version>/<kind>/<namespace>/<name>
。
要了解有关runner
目录的更多信息,请参阅Ansible Runner文档。