使用AWX容器创建虚拟(venv)环境
首先
当在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モジュール
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的设置
尝试指定 Ansible 2.9.12 版本的环境,并创建并执行如下所示的 Playbook。
---
- name: Sample
hosts: all
tasks:
- name: Show Ansible Version
debug:
msg: "{{ ansible_version }}"
这是怎样一个机制?
我对如何设置虚拟环境很感兴趣,所以我进行了一番调查。在Kubernetes的Deployment.yml模板文件中,
-
- 如果custom_venvs变量定义存在,则在initContainers中启动CentOS7容器
-
- 将定义为custom_venv_dir的目录作为EmptyDir挂载
-
- 在其上构建虚拟环境,使用virtualenv命令
- 在awx-web和awx-task容器中也挂载同一目录
根据这个流程,似乎正在执行安装。因此,即使Pod崩溃,虚拟环境也将在重新启动时创建,因此可以放心。
结束时
最初我认为需要重建容器,但是很幸运地有一种相对简单的方法可以实现。
另外,AWX的设置是参考以下网站的:
[Ansible/AWX] 如何使AWX能够识别自定义虚拟环境(venv)路径的方法。