快速上手 AWX
简介
AWX 是一个 Ansible 任务执行引擎,它提供了一个 Web 页面和 REST API,可以更方便的管理和执行 Ansible 任务。 AWX 是开源的,贡献者大多来自 Red Hat,它的商业版是 Red Hat Ansible Automation Platform。
具体来讲,它可以按其他 常规软件 的开发部署流程来运行 Ansible 任务。比如从 Git 仓库中拉取 Ansible Playbook,灵活指定 任务的 目标机器 和 执行参数;可以 定时 执行任务;会 解析 并 保存 任务的 详细信息。
它除了提供人机友好的 Web UI 供用户使用外,还提供了 REST API,可以很方便地与其他系统集成。
运行时架构
从 18.0 版本开始,AWX 默认以容器化方式运行在 Kubernetes 上,目前开源版 不支持裸机部署;商业版 似乎 支持裸机部署,具体请参考官方文档。
AWX 运行时架构图如下:
NOTE
该示意图绘制于 AWX 24.6 版本,未来可能会改变。
各组件的作用如下:
- AWX-Web Pod:提供 Web UI 与 REST API。
- AWX-Task Pod:负责任务的调度。
- Worker Pod:实际执行任务,每个任务都会创建新的 Worker Pod,任务执行完成后 Worker Pod 会终止。
- Receptor:用于 AWX-Task Pod 与 Worker Pod 通信。
安装
AWX 默认通过 AWX Operator 来安装。
这里介绍以下使用 Helm 安装的大概步骤。
配置 values.yaml
AWX:
enabled: true
# 使用外部数据库
postgres:
enabled: true
host: postgresql
port: 5432
dbName: awx
username: awx
password: 'xxx'
sslmode: disable
type: unmanaged
spec:
# 默认的管理员用户名
admin_user: admin
# 配置 Ingress
ingress_type: ingress
ingress_class_name: nginx
hostname: your.domain.name
ingress_path: /
NOTE
Helm Chart 详细内容可参考:AWX Operator Helm Chart 。
部署 AWX Operator
helm repo add awx-operator https://ansible.github.io/awx-operator/
helm repo update
helm upgrade --install awx-operator awx-operator/awx-operator \
--version 2.19.1 \
-f values.yaml
等待部署完成后,可以查看 Pods 的状态:
kubectl get po
正常情况下,Pods 应为下面的样子:
NAME READY STATUS RESTARTS AGE
awx-operator-controller-manager-7f7899b45d-pnw57 2/2 Running 0 16h
awx-task-6dc9697d9b-nzb52 4/4 Running 0 16h
awx-web-778645c57-wn78w 3/3 Running 0 16h
获取初始密码
通过以下命令获取管理员用户的初始密码:
kubectl get secrets awx-admin-password -o jsonpath="{.data.password}" | base64 --decode ; echo
升级
在个人使用过程中,遇到过一些 AWX 自身的 Bug,因此对 AWX 进行过升级,在这里记录一下升级的流程。
关于升级的详细信息可以参考 Upgrading 。
备份 AWX
参考:Backup Roles
创建资源文件 backup-awx.yml
---
apiVersion: awx.ansible.com/v1beta1
kind: AWXBackup
metadata:
name: awxbackup-2024-07-30
spec:
deployment_name: awxbackup
并创建该资源:
kubectl apply -f backup-awx.yml
停止 AWX
helm uninstall awx-operator
NOTE
- 在停止 AWX 前最好先停止相关的应用。
- 若有需要,可以同时备份数据库中的数据。
更新 AWX
# 更新 AWX CRD
kubectl apply --server-side --force-conflicts -k github.com/ansible/awx-operator/config/crd?ref=${new_version}
# 部署新版本
helm upgrade --install awx-operator awx-operator/awx-operator \
--version ${new_version} \
-f values.yaml
NOTE
由于该过程会更新数据库表,所以时间可能会比较长。
Job 的执行环境
有时,我们需要为 Ansible Job 配置 特定的 执行环境,这就需要使用客制化的容器镜像。
我们回过头再看一下 AWX 的 运行时架构, 在 AWX-Task Pod 中,有一个名为 awx-ee 的容器,在这个容器中保存着 Job 需要的 Playbook。 而 Worker Pod 中的 worker 容器默认使用的是跟 awx-ee 同样的镜像,这个镜像默认为 quay.io/ansible/awx-ee:latest 。
AWX 提供了为 Job 指定容器镜像的功能,可以为 awx-ee 容器及 worker 容器配置私有镜像;并允许修改 Worker Pod 的 spec(规格),比如挂载额外的 Volumes。
TIP
相关指南可参考:
- 安装 AWX 时的高级配置:Advanced Configuration 。
- 配置 Execution Environments:Execution Environments 。
- 配置 Worker Pod spec:Customize the pod spec 。
总结
使用 AWX 可以实现 Ansible 任务的调度和管理,使 Ansible 更容易地应用于有 运维自动化 需求的系统中。
但实际使用过程中遇到了不少 AWX 自身的 Bug,开源社区对 Issue 的跟进也不是特别积极。
另外,与直接通过命令行执行 Ansible Playbook 相比,AWX 增加了更多的操作(比如创建 Pod,更新和持久化 Job 的状态等),这也导致 AWX 任务的 响应时间 要高于命令行。 尤其是对于本就简单的任务,这种延迟感会更加明显。