×

要使用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。

  • 基于Ansible的Operator项目的基准镜像

  • 基于Helm的Operator项目的基准镜像

有关不受支持的社区维护的Operator SDK版本的信息,请参见Operator SDK (Operator Framework)

将Ansible与现有Kubernetes资源文件结合使用的最大好处之一是能够使用Jinja模板,以便您可以使用Ansible中的一些变量轻松自定义资源。

本节详细介绍了Kubernetes集合的使用。要开始使用,请在本地工作站上安装集合,并使用剧本进行测试,然后再在Operator中使用它。

安装适用于Ansible的Kubernetes集合

您可以在本地工作站上安装适用于Ansible的Kubernetes集合。

步骤
  1. 安装Ansible 2.15+

    $ sudo dnf install ansible
  2. 安装Python Kubernetes客户端

    $ pip install kubernetes
  3. 使用以下方法之一安装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

在本地测试Kubernetes集合

Operator开发人员可以从本地机器运行Ansible代码,而不是每次都运行和重建Operator。

先决条件
  • 使用Operator SDK初始化基于Ansible的Operator项目并创建一个具有生成的Ansible角色的API

  • 安装适用于Ansible的Kubernetes集合

步骤
  1. 在基于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可确保删除不存在的配置映射不会失败。
  2. 修改roles/<kind>/defaults/main.yml文件,将state默认设置为present

    ---
    state: present
  3. 通过在项目顶层目录中创建playbook.yml文件来创建Ansible剧本,并包含您的<kind>角色

    ---
    - hosts: localhost
      roles:
        - <kind>
  4. 运行剧本

    $ 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
  5. 验证是否已创建配置映射

    $ oc get configmaps
    示例输出
    NAME               DATA   AGE
    example-config     0      2m1s
  6. 重新运行剧本,将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
  7. 验证是否已删除配置映射

    $ oc get configmaps

后续步骤

  • 请参阅在Operator内部使用Ansible,了解有关在自定义资源 (CR) 更改时在Operator内部触发自定义Ansible逻辑的详细信息。