当前位置: 首页 > news >正文

AWX配置持久化 Playbook 目录

引言

AWX 是 Ansible Tower 的开源版本,提供了强大的自动化任务管理和 Web 界面,特别适合网络设备管理、服务器运维等场景。在 Minikube 上部署 AWX 可以快速搭建一个轻量级的 Kubernetes 测试环境,方便开发和调试。本文详细介绍如何在 Ubuntu 22.04 上使用 Minikube(v1.35.0,Docker 驱动)和 AWX Operator 2.19.0 部署 AWX,通过 hostPath 卷实现 Playbook 目录的持久化存储,并指导如何新增 Playbook 目录以扩展自动化任务。

本文基于一个经过验证的 AWX 配置,确保 Playbook 目录(如 /var/lib/awx/projects/my_playbooks)能在 AWX 界面正确加载。

AWX部署链接:AWX+Ansible 自动化运维:快速部署_ansible awx-CSDN博客

前提条件

  • 操作系统:Ubuntu 22.04
  • Minikube:v1.35.0,配置为 Docker 驱动
  • kubectl:已安装并配置好,可与 Minikube 交互
  • AWX Operator:2.19.0 版本,已部署在 ansible-awx 命名空间
  • 硬件要求:Minikube 分配至少 6GB 内存和 5 个 CPU 核心
  • 权限:具有 sudo 权限,用于管理 Minikube 虚拟机和文件权限

部署步骤

步骤 1:启动 Minikube 集群

确保 Minikube 集群正常运行,为 AWX 部署提供 Kubernetes 环境。

minikube status

解释:此命令检查 Minikube 集群的运行状态。如果集群未启动,输出会提示集群已停止或未配置。

如果集群未运行,启动 Minikube 并分配足够资源:

minikube start --driver=docker --memory=6144 --cpus=5

解释:该命令使用 Docker 驱动启动 Minikube 集群,分配 6GB 内存和 5 个 CPU 核心,以满足 AWX 的资源需求。启动后,集群运行 Kubernetes v1.32.0,kubectl 自动配置为使用 Minikube 集群。

预期输出

步骤 2:配置 AWX 部署

使用 hostPath 卷配置 AWX,实现 Playbook 目录的持久化存储。

创建或编辑 AWX 配置文件:

nano ~/awx-operator-2.19.0/awx-ubuntu.yml

解释:此命令打开 nano 编辑器,用于创建或修改 AWX 自定义资源(CR)配置文件,定义 AWX 部署的详细参数。

确保文件内容如下:

---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:name: awx-ubuntunamespace: ansible-awx
spec:service_type: NodePortimage_pull_policy: IfNotPresentprojects_persistence: falseextra_volumes: |- name: projectshostPath:path: /var/lib/awx/projectstype: Directoryweb_extra_volume_mounts: |- mountPath: /var/lib/awx/projectsname: projectstask_extra_volume_mounts: |- mountPath: /var/lib/awx/projectsname: projectsweb_resource_requirements:requests:cpu: 50mmemory: 128Mitask_resource_requirements:requests:cpu: 150mmemory: 384Miee_resource_requirements:requests:cpu: 150mmemory: 192Mi

解释:此 YAML 文件定义了名为 awx-ubuntu 的 AWX 资源,位于 ansible-awx 命名空间。主要配置包括:

  • service_type: NodePort:通过 NodePort 暴露 AWX Web 界面。
  • image_pull_policy: IfNotPresent:优先使用本地缓存的容器镜像,减少拉取时间。
  • projects_persistence: false:禁用 PVC,使用 hostPath 存储 Playbook。
  • extra_volumes:定义名为 projects 的 hostPath 卷,映射到 Minikube 节点的 /var/lib/awx/projects 目录。
  • web_extra_volume_mounts 和 task_extra_volume_mounts:将 projects 卷挂载到 web 和 task pod 的 /var/lib/awx/projects 路径。
  • 资源请求为 web、task 和执行环境(EE) pod 设置最低 CPU 和内存需求。

保存并退出(Ctrl+O,Enter,Ctrl+X)。

检查 Playbook 目录权限:

minikube ssh
ls -ld /var/lib/awx/projects

解释:此命令进入 Minikube 虚拟机,检查 /var/lib/awx/projects 目录是否存在及其权限状态。

drwxrwxrwx 3 docker 1000 4096 Apr 25 07:52 /var/lib/awx/projects

如果目录不存在或权限不正确,创建并配置:

sudo mkdir -p /var/lib/awx/projects
sudo chmod 777 /var/lib/awx/projects
sudo chown 1000:1000 /var/lib/awx/projects
exit

解释

  • sudo mkdir -p /var/lib/awx/projects:创建 Playbook 目录(包括父目录),如果不存在。
  • sudo chmod 777 /var/lib/awx/projects:设置目录权限为所有人可读写执行,确保 AWX 访问无障碍。
  • sudo chown 1000:1000 /var/lib/awx/projects:将目录所有者设置为 UID 1000(AWX 的 awx 用户),确保 pod 能正常访问。
  • exit:退出 Minikube 虚拟机,返回主机。

验证 YAML 语法:

kubectl apply -f ~/awx-operator-2.19.0/awx-ubuntu.yml --dry-run=client

解释:此命令执行 kubectl apply 的客户端干运行,检查 YAML 文件语法是否正确,不实际应用更改。

预期输出

awx.awx.ansible.com/awx-ubuntu configured (dry run)

应用 AWX 配置:

kubectl apply -f ~/awx-operator-2.19.0/awx-ubuntu.yml -n ansible-awx

解释:此命令将 AWX 配置应用到 ansible-awx 命名空间,创建或更新 AWX 部署。

预期输出

awx.awx.ansible.com/awx-ubuntu configured

再次检查目录权限:

minikube ssh
ls -ld /var/lib/awx/projects
sudo chmod 777 /var/lib/awx/projects
sudo chown 1000:1000 /var/lib/awx/projects
exit

解释:此步骤确保应用配置后 /var/lib/awx/projects 目录权限未被重置,保持 AWX pod 的访问能力。

步骤 3:重启 AWX Pod

重启 AWX 的 task 和 web pod,确保新配置和 hostPath 卷挂载生效。

列出当前 pod:

kubectl get pods -n ansible-awx

解释:此命令列出 ansible-awx 命名空间中的所有 pod,方便识别 AWX 的 task 和 web pod(例如 awx-ubuntu-task-<hash> 和 awx-ubuntu-web-<hash>)。

预期输出

删除 task 和 web pod:

kubectl delete pod -n ansible-awx awx-ubuntu-task-6cf54bb9f7-<hash> awx-ubuntu-web-556774d489-<hash>

解释:此命令删除指定的 task 和 web pod,触发 Kubernetes 自动创建新 pod,应用最新配置。需将 <hash> 替换为实际 pod 名称(例如 k4wrh、p5cjj)。

预期输出

pod "awx-ubuntu-task-6cf54bb9f7-<hash>" deleted
pod "awx-ubuntu-web-556774d489-<hash>" deleted

等待新 pod 启动:

kubectl get pods -n ansible-awx

解释:此命令检查新 pod 是否已启动并运行,确保 task 和 web pod 状态为 Running。

预期输出

再次验证目录权限:

minikube ssh
ls -ld /var/lib/awx/projects
sudo chmod 777 /var/lib/awx/projects
sudo chown 1000:1000 /var/lib/awx/projects
exit

解释:此步骤确保 pod 重启后 /var/lib/awx/projects 目录权限正确,防止挂载失败。

步骤 4:配置端口转发

设置端口转发,以便通过浏览器访问 AWX Web 界面。

获取当前 web pod 名称:

kubectl get pods -n ansible-awx | grep awx-ubuntu-web

解释:此命令过滤 ansible-awx 命名空间中的 pod,显示最新的 awx-ubuntu-web pod 名称,用于端口转发。

预期输出

awx-ubuntu-web-556774d489-<new-hash>               3/3     Running   0             10s

配置端口转发:

nohup kubectl port-forward awx-ubuntu-web-556774d489-<new-hash> 8052:8052 -n ansible-awx --address 0.0.0.0 &

解释:此命令在后台运行 kubectl port-forward,将 web pod 的 8052 端口映射到主机的 8052 端口,允许外部访问 AWX 界面。nohup 确保进程在终端关闭后继续运行,--address 0.0.0.0 允许所有网络接口访问。需将 <new-hash> 替换为实际 pod 名称。

预期输出

[1] <进程ID>
nohup: ignoring input and appending output to 'nohup.out'

验证端口转发:

cat nohup.out

解释:此命令显示 nohup.out 文件内容,确认端口转发是否正常工作。输出应包含 Forwarding 信息。

预期输出

Forwarding from 0.0.0.0:8052 -> 8052

获取 AWX 管理员密码:

kubectl get secret awx-ubuntu-admin-password -n ansible-awx -o jsonpath="{.data.password}" | base64 -d

解释:此命令从 awx-ubuntu-admin-password Secret 中提取 AWX 管理员密码,解码后显示,用于登录 AWX 界面。

示例输出

praymwaE6t9I1Bh7kcGvqGxJ2JXlhy9Q

步骤 5:创建初始 Playbook 文件

在 Minikube 节点创建 Playbook 文件,通过 hostPath 卷挂载到 AWX pod。

进入 Minikube 虚拟机:

minikube ssh

解释:此命令登录 Minikube 虚拟机,允许直接操作节点上的文件系统。

创建 Playbook 目录和文件,这里已我写的获取交换机全部配置的文件举例:

sudo mkdir -p /var/lib/awx/projects/my_playbooks/outputs
sudo tee /var/lib/awx/projects/my_playbooks/get_h3c_config.yml > /dev/null <<EOF
---
- name: Get H3C device configurationhosts: h3c_devicegather_facts: notasks:- name: Run display current-configuration commandansible.builtin.command: "display current-configuration"register: config_outputdelegate_to: "{{ inventory_hostname }}"connection: network_clivars:ansible_network_os: h3c- name: Save configuration to fileansible.builtin.copy:content: "{{ config_output.stdout }}"dest: "/var/lib/awx/projects/my_playbooks/outputs/h3c_config_{{ inventory_hostname }}.txt"delegate_to: localhost
EOF
sudo chown -R 1000:1000 /var/lib/awx/projects
sudo chmod -R 755 /var/lib/awx/projects

解释

  • sudo mkdir -p /var/lib/awx/projects/my_playbooks/outputs:创建 Playbook 目录及其子目录 outputs,用于存储输出文件。
  • sudo tee ... > /dev/null:创建 get_h3c_config.yml Playbook 文件,配置华三设备的配置获取任务。
  • sudo chown -R 1000:1000 /var/lib/awx/projects:设置目录及文件的所有者为 UID 1000(AWX 用户)。
  • sudo chmod -R 755 /var/lib/awx/projects:设置目录权限为所有者可读写执行,其他用户可读执行。

创建另一个 Playbook 文件:

sudo tee /var/lib/awx/projects/my_playbooks/new_playbook.yml > /dev/null <<EOF
---
- name: New Playbookhosts: localhosttasks:- name: Print messageansible.builtin.debug:msg: "This is a new playbook"
EOF
sudo chown -R 1000:1000 /var/lib/awx/projects
sudo chmod -R 755 /var/lib/awx/projects

解释:创建 new_playbook.yml,一个简单的 Playbook 用于调试,输出一条消息。权限和所有者设置与上一步相同。

验证文件:

ls -l /var/lib/awx/projects/my_playbooks

解释:列出 my_playbooks 目录内容,确认 Playbook 文件及其权限正确。

预期输出

退出 Minikube 虚拟机:

exit

解释:退出 Minikube 虚拟机,返回主机终端。

步骤 6:验证 AWX Pod 中的 Playbook 文件

确认 AWX 的 task pod 能通过 hostPath 卷访问 Playbook 文件。

获取 task pod 名称:

kubectl get pods -n ansible-awx

解释:列出 ansible-awx 命名空间中的 pod,找出 awx-ubuntu-task-<hash> 的名称。

检查 pod 内 Playbook 目录:

kubectl exec -n ansible-awx awx-ubuntu-task-6cf54bb9f7-<new-hash> -- ls -l /var/lib/awx/projects/my_playbooks

解释:此命令在 task pod 中执行 ls -l,列出 /var/lib/awx/projects/my_playbooks 目录内容,验证 hostPath 挂载是否生效。需将 <new-hash> 替换为实际 pod 名称。

预期输出

验证 pod 挂载配置:

kubectl describe pod -n ansible-awx awx-ubuntu-task-6cf54bb9f7-<new-hash>

解释:此命令显示 task pod 的详细信息,检查 awx-ubuntu-projects 卷是否为 hostPath 类型,确认挂载正确。

预期输出(部分)

awx-ubuntu-projects:Type:          HostPath (bare host directory volume)Path:          /var/lib/awx/projectsHostPathType:  Directory

步骤 7: AWX查看效果

 

相关文章:

  • WebUI可视化:第4章:Streamlit数据可视化实战
  • Git基本使用(很详细)
  • OceanBase 复合索引指南
  • 计算机组成原理 课后练习
  • 蓝桥杯 3. 密码脱落
  • 深度学习--循环神经网络RNN
  • 线程怎么创建?Java 四种方式一网打尽
  • 洛谷 B3647:【模板】Floyd 算法
  • 系统测试的技术要求
  • 404了怎么办快把路由给我断掉(React配置路由)
  • 信创时代开发工具选择指南:国产替代背景下的技术生态与实践路径
  • Ollama 是什么
  • POLARIS土壤相关数据集
  • 基于CATIA参数化管道建模的自动化插件开发实践——NX建模之管道命令的参考与移植
  • 企业级AI开发利器:Spring AI框架深度解析与实战
  • 传感器模块有助于加速嵌入式视觉开发
  • Infortrend普安存储 KS 私有云方案,构建生产线AOI光学检测数据的高速处理平台
  • OpenCv高阶(十)——光流估计
  • 第六章 进阶06 读书群第一次团建
  • 五一去荣昌吃卤鹅?基于Java和天地图的寻找荣昌卤鹅店实践
  • 全球首台环形CT直线加速器在沪正式开机,系我国自主研发
  • 为国出征指纹却无法识别?他刷新了我军在这一项目的最好成绩
  • 《卿本著者》译后记等内容被指表述不当,江苏人民出版社:即日下架
  • 研究|和去年相比,人们使用AI的需求发生了哪些变化?
  • 我国成年国民综合阅读率82.1%,数字化阅读接触率首超80%
  • 预订假期酒店却被告知无法入住,去哪儿:对违规酒店予以处罚