$ sudo dnf install ansible
要使用 Ansible 管理 Kubernetes 上的应用程序生命周期,您可以使用适用于 Ansible 的 Kubernetes 集合。此 Ansible 模块集合允许开发人员利用他们用 YAML 编写的现有 Kubernetes 资源文件,或者以原生 Ansible 表达生命周期管理。
Red Hat 支持的 Operator SDK CLI 工具版本(包括与 Operator 项目相关的脚手架和测试工具)已弃用,并计划在未来版本的 OpenShift Dedicated 中移除。Red Hat 将在此版本的生命周期内为此功能提供错误修复和支持,但此功能将不再接收增强功能,并将从未来的 OpenShift Dedicated 版本中移除。 不建议使用 Red Hat 支持的 Operator SDK 版本创建新的 Operator 项目。拥有现有 Operator 项目的操作符作者可以使用 OpenShift Dedicated 发布的 Operator SDK CLI 工具版本来维护其项目并创建针对较新版本的 OpenShift Dedicated 的 Operator 版本。 以下与 Operator 项目相关的基础镜像_未_被弃用。这些基础镜像的运行时功能和配置 API 仍然支持错误修复和解决 CVE。
有关不受支持的、社区维护的 Operator SDK 版本的信息,请参阅Operator SDK (Operator Framework)。 |
结合使用 Ansible 和现有的 Kubernetes 资源文件的一大优势是能够使用 Jinja 模板,以便您可以通过 Ansible 中的几个变量轻松定制资源。
本节详细介绍 Kubernetes 集合的使用方法。要开始使用,请在本地工作站上安装该集合,并使用 playbook 测试它,然后再在 Operator 中使用它。
您可以在本地工作站上安装适用于 Ansible 的 Kubernetes 集合。
安装 Ansible 2.15+
$ sudo dnf install ansible
$ pip install kubernetes
使用以下方法之一安装 Kubernetes 集合
您可以直接从 Ansible Galaxy 安装该集合
$ ansible-galaxy collection install community.kubernetes
如果您已经初始化了 Operator,则项目顶层可能会有一个 `requirements.yml` 文件。此文件指定 Operator 正常运行必须安装的 Ansible 依赖项。默认情况下,此文件安装 `community.kubernetes` 集合以及 `operator_sdk.util` 集合,后者提供用于 Operator 特定功能的模块和插件。
要安装 `requirements.yml` 文件中的依赖模块
$ ansible-galaxy collection install -r requirements.yml
Operator 开发人员可以在本地机器上运行 Ansible 代码,而不是每次都运行和重新构建 Operator。
使用 Operator SDK 初始化基于 Ansible 的 Operator 项目并创建具有生成的 Ansible 角色的 API
安装适用于 Ansible 的 Kubernetes 集合
在基于 Ansible 的 Operator 项目目录中,使用所需的 Ansible 逻辑修改 `roles/
以下示例根据名为 `state` 的变量的值创建和删除配置映射
---
- name: set ConfigMap example-config to {{ state }}
community.kubernetes.k8s:
api_version: v1
kind: ConfigMap
name: example-config
namespace: <operator_namespace> (1)
state: "{{ state }}"
ignore_errors: true (2)
1 | 指定您想要创建 ConfigMap 的命名空间。 |
2 | 设置ignore_errors: true 可确保删除不存在的 ConfigMap 不会失败。 |
修改roles/<kind>/defaults/main.yml
文件,将state
默认设置为present
。
---
state: present
通过在项目目录的顶层创建一个playbook.yml
文件来创建 Ansible playbook,并包含您的<kind>
角色。
---
- hosts: localhost
roles:
- <kind>
运行 playbook。
$ ansible-playbook playbook.yml
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [localhost] ********************************************************************************
TASK [Gathering Facts] ********************************************************************************
ok: [localhost]
TASK [memcached : set ConfigMap example-config to present] ********************************************************************************
changed: [localhost]
PLAY RECAP ********************************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
验证 ConfigMap 是否已创建。
$ oc get configmaps
NAME DATA AGE
example-config 0 2m1s
重新运行 playbook 并将state
设置为absent
。
$ ansible-playbook playbook.yml --extra-vars state=absent
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [localhost] ********************************************************************************
TASK [Gathering Facts] ********************************************************************************
ok: [localhost]
TASK [memcached : set ConfigMap example-config to absent] ********************************************************************************
changed: [localhost]
PLAY RECAP ********************************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
验证 ConfigMap 是否已删除。
$ oc get configmaps
有关在自定义资源 (CR) 发生更改时在 Operator 内部触发自定义 Ansible 逻辑的详细信息,请参阅在 Operator 内部使用 Ansible。