$ sudo dnf install ansible
要使用Ansible管理您在Kubernetes上的应用程序的生命周期,您可以使用适用于Ansible的Kubernetes集合。此Ansible模块集合允许开发人员利用他们用YAML编写的现有Kubernetes资源文件,或以原生Ansible方式表达生命周期管理。
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)。 |
将Ansible与现有Kubernetes资源文件结合使用的最大好处之一是能够使用Jinja模板,以便您可以使用Ansible中的一些变量轻松自定义资源。
本节详细介绍了Kubernetes集合的使用。要开始使用,请在本地工作站上安装集合,并使用剧本进行测试,然后再在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/<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
通过在项目顶层目录中创建playbook.yml
文件来创建Ansible剧本,并包含您的<kind>
角色
---
- hosts: localhost
roles:
- <kind>
运行剧本
$ 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
验证是否已创建配置映射
$ oc get configmaps
NAME DATA AGE
example-config 0 2m1s
重新运行剧本,将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
验证是否已删除配置映射
$ oc get configmaps
请参阅在Operator内部使用Ansible,了解有关在自定义资源 (CR) 更改时在Operator内部触发自定义Ansible逻辑的详细信息。