使用AWX容器创建虚拟(venv)环境

首先

スクリーンショット 2020-10-21 22.57.23.png

当在Kubernetes集群上运行AWX时,如果想要创建一个预先包含多个版本Ansible的容器,该如何做呢?当我思考这个问题时,我在官方文档中找到了答案。

作为备忘录,我会留下试验的记录。

环境

k3s 版本为 v1.18.9+k3s1
AWX 版本为 15.0.0

方法 (yari-kata)

我将创建一个类似以下的YAML文件。

---
custom_venvs:
  - name: 2.9.12
    python: python3
    python_ansible_version: 2.9.12
  - name: pip
    python_ansible_version: 2.9.13
    python_modules:
      - pyvmomi

每个项目的内容如下所示。

key説明必須name仮想環境の名前(ディレクトリ名)Yespython_ansible_versionAnsibleのバージョンYespythonPythonのバージョン(指定のない場合は2系)
python_modules導入したいpipモジュール

只需在部署时的ansible-playbook命令中添加以下的extra-vars选项。

$ ansible-playbook -i inventory install.yml --extra-vars "@venv_vars.yaml"

在部署完成后,Pod要完成启动可能需要一些时间,处于以下状态。

$ kubectl get pod -n awx
NAME                          READY   STATUS     RESTARTS   AGE
awx-postgresql-postgresql-0   1/1     Running    0          2d19h
awx-64f65bbdc4-qcbtm          0/3     Init:0/1   0          66s

AWX的设置

スクリーンショット 2020-10-21 23.30.06.png
スクリーンショット 2020-10-21 23.59.34.png

尝试指定 Ansible 2.9.12 版本的环境,并创建并执行如下所示的 Playbook。

---
- name: Sample
  hosts: all
  tasks:
    - name: Show Ansible Version
      debug:
        msg: "{{ ansible_version }}"
スクリーンショット 2020-10-22 0.01.46.png

这是怎样一个机制?

我对如何设置虚拟环境很感兴趣,所以我进行了一番调查。在Kubernetes的Deployment.yml模板文件中,

    1. 如果custom_venvs变量定义存在,则在initContainers中启动CentOS7容器

 

    1. 将定义为custom_venv_dir的目录作为EmptyDir挂载

 

    1. 在其上构建虚拟环境,使用virtualenv命令

 

    在awx-web和awx-task容器中也挂载同一目录

根据这个流程,似乎正在执行安装。因此,即使Pod崩溃,虚拟环境也将在重新启动时创建,因此可以放心。

结束时

最初我认为需要重建容器,但是很幸运地有一种相对简单的方法可以实现。

另外,AWX的设置是参考以下网站的:
[Ansible/AWX] 如何使AWX能够识别自定义虚拟环境(venv)路径的方法。

广告
将在 10 秒后关闭
bannerAds