$ sudo dnf install ansible
要使用 Ansible 管理 Kubernetes 上应用程序的生命周期,您可以使用适用于 Ansible 的 Kubernetes 集合。此 Ansible 模块集合允许开发人员利用他们现有的用 YAML 编写的 Kubernetes 资源文件,或以原生 Ansible 表达生命周期管理。
Red Hat 支持版本的 Operator SDK CLI 工具(包括相关的脚手架和 Operator 项目测试工具)已弃用,计划在未来版本的 OpenShift Container Platform 中移除。Red Hat 将在当前发行版生命周期内为此功能提供错误修复和支持,但此功能将不再接收增强功能,并将从未来的 OpenShift Container Platform 发行版中移除。 不建议将 Red Hat 支持版本的 Operator SDK 用于创建新的 Operator 项目。拥有现有 Operator 项目的操作员作者可以使用 OpenShift Container Platform 4.17 发布的 Operator SDK CLI 工具版本来维护他们的项目并创建针对较新版本的 OpenShift Container Platform 的 Operator 版本。 以下与 Operator 项目相关的基础镜像未被弃用。这些基础镜像的运行时功能和配置 API 仍然支持错误修复和解决 CVE。
有关 OpenShift Container Platform 中已弃用或移除的主要功能的最新列表,请参阅 OpenShift Container Platform 发行说明中的“已弃用和移除的功能”部分。 有关不受支持的社区维护版本的 Operator SDK 的信息,请参见Operator SDK (Operator Framework)。 |
将 Ansible 与现有的 Kubernetes 资源文件结合使用的最大好处之一是能够使用 Jinja 模板,这样您就可以使用 Ansible 中的几个变量轻松自定义资源。
本节详细介绍了 Kubernetes 集合的使用方法。要开始使用,请在本地工作站上安装该集合,并在继续在 Operator 中使用它之前使用 playbook 进行测试。
您可以在本地工作站上安装适用于 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/<kind>/tasks/main.yml
文件。roles/<kind>/
目录在创建 API 时使用--generate-role
标志创建。<kind>
可替换项与您为 API 指定的 kind 匹配。
以下示例根据名为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 | 指定要在其中创建配置映射的命名空间。 |
2 | 设置ignore_errors: true 可确保删除不存在的配置映射不会失败。 |
修改roles/<kind>/defaults/main.yml
文件以默认将state
设置为present
---
state: present
创建一个 Ansible playbook,方法是在项目顶层目录中创建一个playbook.yml
文件,并包含您的<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。