解锁 AWX+Ansible 自动化运维新体验:快速部署实战
Ansible 和 AWX 是自动化运维领域的强大工具组合。Ansible 是一个简单高效的 IT 自动化工具,而 AWX 则是 Ansible 的开源 Web 管理平台,提供图形化界面来管理 Ansible 任务。本指南将带你一步步在 Ubuntu 22.04 上安装 Ansible 和 AWX,使用 Minikube 搭建单节点 Kubernetes 集群,并适配网络不稳定的环境。无论你是初学者还是有经验的运维工程师,这篇超详细指南都能帮你成功部署 AWX 并运行你的第一个任务!
环境说明
- 操作系统:Ubuntu 22.04
- 主节点:IP 192.168.85.132,主机名 leo
- Kubernetes 环境:Minikube(单节点集群)
- 容器运行时:Docker
- Ansible 版本:最新稳定版(通过 apt 安装)
- AWX 版本:2.19.0(通过 AWX Operator 部署)
- 目标:安装 Ansible 和 AWX,搭建单节点 Kubernetes 集群并运行 AWX,适配网络不稳定环境。
组件作用
- Ansible:一个开源的自动化工具,用于配置管理、应用部署和任务自动化,支持通过 SSH 管理远程主机,无需安装客户端。
- AWX:Ansible 的官方 Web 管理平台,提供图形化界面,支持任务调度、库存管理、权限控制和日志查看,是企业级 Ansible 管理的首选工具。
- Docker:容器运行时,用于运行 Minikube 和 AWX 的容器化组件。
- Minikube:一个轻量级的 Kubernetes 实现工具,用于在本地快速搭建单节点 Kubernetes 集群,适合开发和测试环境。
- kubectl:Kubernetes 的命令行工具,用于管理 Kubernetes 集群资源。
- Kustomize:一个 Kubernetes 原生配置管理工具,AWX Operator 的部署依赖它来处理 YAML 文件。
- make:构建工具,用于执行 AWX Operator 的部署脚本。
软件介绍
Ansible 是一个简单而强大的 IT 自动化平台,允许用户通过 YAML 格式的 Playbook 定义任务,支持配置管理、应用部署、编排等功能。AWX 是 Ansible Tower 的开源版本,提供了一个 Web 界面来管理 Ansible 任务,支持多用户协作、任务调度和权限管理。通过在 Kubernetes 上部署 AWX,可以实现更高的可扩展性和灵活性。本指南将使用 Minikube 在 Ubuntu 22.04 上部署 AWX,确保即使在网络不稳定的环境下也能成功安装。
本次安装需要的镜像如下:
软件如下
集群镜像如下
虚拟机信息如下
本次安装通过Vmware虚拟机进行安装,配置资源如下,但是实际使用的话8G内存+8CPU+50GB磁盘就够用,我的资源多我就对此忽略不计了,我本次安装也是遇到了很多问题,才整理出这个完整的步骤,本次的步骤包括在线安装和离线部署,还有就是这里面的镜像大家拉取后可以打包保存起来,下次安装的话可以省下来很多时间。
安装步骤
第一部分:安装 Ansible
1. 更新系统并安装 Ansible
# 更新系统软件包索引,确保获取最新的软件包信息
sudo apt update -y# 安装 software-properties-common,提供管理 PPA 源的工具
sudo apt install -y software-properties-common# 添加 Ansible 官方 PPA 源,以便安装最新版本的 Ansible
sudo add-apt-repository --yes --update ppa:ansible/ansible# 安装 Ansible 以及依赖工具 curl 和 git
sudo apt install -y ansible curl git
离线安装(可选):
如果网络不稳定,可以离线下载 Ansible 的 .deb 包:
- 访问 Debian 软件包页面 或 Ansible 官方 GitHub 发布页面,下载最新 .deb 文件(如 ansible_2.16.x_all.deb)。
- 使用 MobaXterm 连接到 leo@192.168.85.132,将文件拖放到 /home/leo/ 目录。
- 安装:
# 安装下载的 .deb 包 sudo dpkg -i /home/leo/ansible_2.16.x_all.deb# 解决可能的依赖问题 sudo apt install -f -y
2. 验证 Ansible 安装
# 检查 Ansible 版本,验证是否安装成功
ansible --version
期望输出:
ansible [core 2.16.x]
第二部分:准备 Kubernetes 环境
1. 安装 Docker
# 安装 Docker 容器运行时
sudo apt install -y docker.io# 启用并启动 Docker 服务
sudo systemctl enable docker --now
离线安装(可选):
如果网络不稳定,可以离线下载 Docker 的 .deb 包:
- 从 Docker 官网 下载最新 .deb 包(如 docker.io_20.10.21-0ubuntu1~22.04.3_amd64.deb)。
- 使用 MobaXterm 连接到 leo@192.168.85.132,将文件拖放到 /home/leo/ 目录。
- 安装:
# 安装下载的 .deb 包 sudo dpkg -i /home/leo/docker.io_*.deb# 解决可能的依赖问题 sudo apt install -f -y# 启用并启动 Docker 服务 sudo systemctl enable docker --now
2. 配置用户权限
# 将当前用户添加到 docker 组,避免每次运行 Docker 命令都需要 sudo
sudo usermod -aG docker $USER && newgrp docker
3. 验证 Docker 安装
# 检查 Docker 版本,验证是否安装成功
docker --version
期望输出:
Docker version 26.1.3, build 26.1.3-0ubuntu1~22.04.1
4. 安装 Minikube
# 下载 Minikube 的最新版本二进制文件
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64# 安装 Minikube 到系统路径
sudo install minikube-linux-amd64 /usr/local/bin/minikube
离线安装(可选):
- 从 Minikube GitHub Releases 下载 minikube-linux-amd64(直接链接:minikube-linux-amd64)。
- 使用 MobaXterm 连接到 leo@192.168.85.132,将文件拖放到 /home/leo/ 目录。
- 安装:
# 安装 Minikube 到系统路径 sudo install /home/leo/minikube-linux-amd64 /usr/local/bin/minikube
5. 验证 Minikube 安装
# 检查 Minikube 版本,验证是否安装成功
minikube version
期望输出:
minikube version: v1.35.0
6. 安装 kubectl
# 下载 kubectl v1.32.0 的二进制文件
curl -LO "https://dl.k8s.io/release/v1.32.0/bin/linux/amd64/kubectl"# 赋予执行权限
chmod +x kubectl# 移动到系统路径
sudo mv kubectl /usr/local/bin/
离线安装(可选):
- 从 Kubernetes GitHub Releases 下载 kubectl 的 Linux AMD64 二进制文件(直接链接:kubectl)。
- 使用 MobaXterm 连接到 leo@192.168.85.132,将文件拖放到 /home/leo/ 目录。
- 安装:
# 赋予执行权限 chmod +x /home/leo/kubectl# 移动到系统路径 sudo mv /home/leo/kubectl /usr/local/bin/
7. 验证 kubectl 安装
# 检查 kubectl 版本,验证是否安装成功
kubectl version --client
期望输出:
Client Version: v1.32.0
8. 安装 make
# 安装 make 工具,用于执行 AWX Operator 的部署脚本
sudo apt install -y make
离线安装(可选):
- 从 Ubuntu 软件源 下载最新 .deb 包(如 make_4.3-4.1build1_amd64.deb)。
- 使用 MobaXterm 连接到 leo@192.168.85.132,将文件拖放到 /home/leo/ 目录。
- 安装:
# 安装下载的 .deb 包 sudo dpkg -i /home/leo/make_*.deb# 解决可能的依赖问题 sudo apt install -f -y
9. 验证 make 安装
# 检查 make 版本,验证是否安装成功
make --version
期望输出:
GNU Make 4.3
10. 启动 Minikube
# 清理现有 Minikube 集群(如果存在)
minikube delete
拉取 Minikube 镜像:
# 在线拉取 Minikube 所需的 kicbase 镜像
docker pull gcr.io/k8s-minikube/kicbase:v0.0.46
如果拉取失败,使用华为云镜像源:
# 从华为云镜像源拉取 kicbase 镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/gcr.io/k8s-minikube/kicbase:v0.0.46# 打标签为原始镜像名称
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/gcr.io/k8s-minikube/kicbase:v0.0.46 gcr.io/k8s-minikube/kicbase:v0.0.46
打包镜像:
# 将 kicbase 镜像打包为 tar 文件,以便离线使用
docker save -o /home/leo/kicbase-v0.0.46-amd64.tar gcr.io/k8s-minikube/kicbase:v0.0.46
加载镜像(验证打包是否可用):
# 加载打包的镜像,验证是否可用
docker load -i /home/leo/kicbase-v0.0.46-amd64.tar
期望输出:
Loaded image: gcr.io/k8s-minikube/kicbase:v0.0.46
启动 Minikube:
# 启动 Minikube,指定 Docker 驱动,分配 6144Mi 内存和 4 个 CPU
minikube start --driver=docker --memory=6144 --cpus=4
11. 验证 Minikube 状态
# 检查 Minikube 状态,验证是否启动成功
minikube status
期望输出:
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
第三部分:安装 AWX
1. 下载并解压 AWX Operator
# 下载 AWX Operator 2.19.0 的源码包
curl -LO https://github.com/ansible/awx-operator/archive/refs/tags/2.19.0.tar.gz# 重命名为更清晰的文件名
mv 2.19.0.tar.gz awx-operator-2.19.0.tar.gz# 解压源码包
tar -xzf awx-operator-2.19.0.tar.gz
离线安装(可选):
- 从 AWX Operator GitHub Releases 下载 awx-operator-2.19.0.tar.gz(直接链接:awx-operator-2.19.0.tar.gz)。
- 使用 MobaXterm 连接到 leo@192.168.85.132,将文件拖放到 /home/leo/ 目录。
- 解压:
# 解压下载的源码包 tar -xzf /home/leo/awx-operator-2.19.0.tar.gz
2. 安装 Kustomize(make deploy 依赖)
# 下载 Kustomize v5.6.0 的二进制文件
curl -LO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv5.6.0/kustomize_v5.6.0_linux_amd64.tar.gz# 解压 Kustomize
tar -xzf kustomize_v5.6.0_linux_amd64.tar.gz# 移动到系统路径
sudo mv kustomize /usr/local/bin/
离线安装(可选):
- 从 Kustomize GitHub Releases 下载 kustomize_v5.6.0_linux_amd64.tar.gz(直接链接:kustomize_v5.6.0_linux_amd64.tar.gz)。
- 使用 MobaXterm 连接到 leo@192.168.85.132,将文件拖放到 /home/leo/ 目录。
- 安装:
# 解压 Kustomize tar -xzf /home/leo/kustomize_v5.6.0_linux_amd64.tar.gz# 移动到系统路径 sudo mv kustomize /usr/local/bin/
3. 拉取并加载所有必要镜像
修复 DNS 解析(确保镜像源可访问):
# 检查当前 DNS 配置
cat /etc/resolv.conf
如果显示 nameserver 127.0.0.53,说明使用的是本地 DNS 代理,可能导致解析失败。永久修改 DNS:
# 编辑 systemd-resolved 配置文件
sudo nano /etc/systemd/resolved.conf
- 在 [Resolve] 部分添加:
[Resolve] DNS=8.8.8.8 8.8.4.4 FallbackDNS=223.5.5.5 223.6.6.6
- 8.8.8.8 和 8.8.4.4 是 Google DNS。
- 223.5.5.5 和 223.6.6.6 是阿里公共 DNS。
- 保存并退出:Ctrl+O,Enter,Ctrl+X。
重启 DNS 服务:
# 重启 systemd-resolved 服务以应用 DNS 配置
sudo systemctl restart systemd-resolved# 确保 /etc/resolv.conf 指向正确的文件
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
验证 DNS 解析:
# 测试是否能解析镜像源域名
ping docker.m.daocloud.io
ping docker.mirrors.ustc.edu.cn
如果仍然失败,临时修改 /etc/resolv.conf:
# 临时修改 DNS 配置
sudo nano /etc/resolv.conf
- 修改为:
nameserver 8.8.8.8 nameserver 8.8.4.4
- 保存并退出:Ctrl+O,Enter,Ctrl+X。
拉取镜像:
- 拉取 gcr.io/kubebuilder/kube-rbac-proxy:v0.15.0(AWX Operator 依赖):
# 首选:从华为云镜像源拉取 docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/gcr.io/kubebuilder/kube-rbac-proxy:v0.15.0# 如果失败,尝试 DaoCloud 镜像源 docker pull docker.m.daocloud.io/kubebuilder/kube-rbac-proxy:v0.15.0 docker tag docker.m.daocloud.io/kubebuilder/kube-rbac-proxy:v0.15.0 gcr.io/kubebuilder/kube-rbac-proxy:v0.15.0# 打标签(如果使用华为云镜像源) docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/gcr.io/kubebuilder/kube-rbac-proxy:v0.15.0 gcr.io/kubebuilder/kube-rbac-proxy:v0.15.0# 加载到 Minikube minikube image load gcr.io/kubebuilder/kube-rbac-proxy:v0.15.0# 打包镜像 docker save -o /home/leo/kube-rbac-proxy-v0.15.0.tar gcr.io/kubebuilder/kube-rbac-proxy:v0.15.0# 验证打包是否可用 docker rmi gcr.io/kubebuilder/kube-rbac-proxy:v0.15.0 docker load -i /home/leo/kube-rbac-proxy-v0.15.0.tar minikube image load gcr.io/kubebuilder/kube-rbac-proxy:v0.15.0
- 拉取 quay.io/ansible/awx-operator:2.19.0(AWX Operator 镜像):
# 首选:直接拉取 docker pull quay.io/ansible/awx-operator:2.19.0# 如果失败,尝试 DaoCloud 镜像源 docker pull docker.m.daocloud.io/ansible/awx-operator:2.19.0 docker tag docker.m.daocloud.io/ansible/awx-operator:2.19.0 quay.io/ansible/awx-operator:2.19.0# 加载到 Minikube minikube image load quay.io/ansible/awx-operator:2.19.0# 打包镜像 docker save -o /home/leo/awx-operator-2.19.0.tar quay.io/ansible/awx-operator:2.19.0# 验证打包是否可用 docker rmi quay.io/ansible/awx-operator:2.19.0 docker load -i /home/leo/awx-operator-2.19.0.tar minikube image load quay.io/ansible/awx-operator:2.19.0
- 拉取 redis:7(AWX 依赖,修正为成功环境中的标签):
# 首选:从 AWS 镜像源拉取 docker pull public.ecr.aws/docker/library/redis:7.0# 如果失败,尝试 DaoCloud 镜像源 docker pull docker.m.daocloud.io/library/redis:7.0 docker tag docker.m.daocloud.io/library/redis:7.0 public.ecr.aws/docker/library/redis:7.0# 打标签为 redis:7(与成功环境一致) docker tag public.ecr.aws/docker/library/redis:7.0 redis:7# 加载到 Minikube minikube image load redis:7# 打包镜像 docker save -o /home/leo/redis-7.tar redis:7# 验证打包是否可用 docker rmi redis:7 docker load -i /home/leo/redis-7.tar minikube image load redis:7
- 拉取 quay.io/ansible/awx:24.6.0(AWX 镜像,与 AWX Operator 2.19.0 兼容):
# 首选:直接拉取 docker pull quay.io/ansible/awx:24.6.0# 如果失败,尝试 DaoCloud 镜像源 docker pull docker.m.daocloud.io/ansible/awx:24.6.0 docker tag docker.m.daocloud.io/ansible/awx:24.6.0 quay.io/ansible/awx:24.6.0# 如果已加载 quay.io/ansible/awx:24.6.1,打标签为 24.6.0 docker tag quay.io/ansible/awx:24.6.1 quay.io/ansible/awx:24.6.0# 加载到 Minikube minikube image load quay.io/ansible/awx:24.6.0# 打包镜像 docker save -o /home/leo/awx-24.6.0.tar quay.io/ansible/awx:24.6.0# 验证打包是否可用 docker rmi quay.io/ansible/awx:24.6.0 docker load -i /home/leo/awx-24.6.0.tar minikube image load quay.io/ansible/awx:24.6.0
- 拉取 quay.io/ansible/awx-ee:24.6.0(AWX Execution Environment 镜像):
# 首选:从 DaoCloud 镜像源拉取 docker pull docker.m.daocloud.io/ansible/awx-ee:24.6.0# 备选 1:从中国科学技术大学镜像源拉取 docker pull docker.mirrors.ustc.edu.cn/ansible/awx-ee:24.6.0# 备选 2:直接从 quay.io 拉取(可能需要代理) docker pull quay.io/ansible/awx-ee:24.6.0# 打标签(如果使用 DaoCloud 或中科大镜像源) docker tag docker.m.daocloud.io/ansible/awx-ee:24.6.0 quay.io/ansible/awx-ee:24.6.0 # 或 docker tag docker.mirrors.ustc.edu.cn/ansible/awx-ee:24.6.0 quay.io/ansible/awx-ee:24.6.0# 如果已加载 quay.io/ansible/awx-ee:24.6.1,打标签为 24.6.0 docker tag quay.io/ansible/awx-ee:24.6.1 quay.io/ansible/awx-ee:24.6.0# 加载到 Minikube minikube image load quay.io/ansible/awx-ee:24.6.0# 打包镜像 docker save -o /home/leo/awx-ee-24.6.0.tar quay.io/ansible/awx-ee:24.6.0# 验证打包是否可用 docker rmi quay.io/ansible/awx-ee:24.6.0 docker load -i /home/leo/awx-ee-24.6.0.tar minikube image load quay.io/ansible/awx-ee:24.6.0
- 拉取 postgres:15(AWX 数据库):
# 首选:从 DaoCloud 镜像源拉取 docker pull docker.m.daocloud.io/library/postgres:15# 备选 1:从中国科学技术大学镜像源拉取 docker pull docker.mirrors.ustc.edu.cn/library/postgres:15# 备选 2:直接从 Docker Hub 拉取(可能需要代理) docker pull postgres:15# 打标签(如果使用 DaoCloud 或中科大镜像源) docker tag docker.m.daocloud.io/library/postgres:15 postgres:15 # 或 docker tag docker.mirrors.ustc.edu.cn/library/postgres:15 postgres:15# 加载到 Minikube minikube image load postgres:15# 打包镜像 docker save -o /home/leo/postgres-15.tar postgres:15# 验证打包是否可用 docker rmi postgres:15 docker load -i /home/leo/postgres-15.tar minikube image load postgres:15
- 拉取 quay.io/sclorg/postgresql-15-c9s:latest(AWX 数据库,成功环境中使用的镜像):
# 首选:从 DaoCloud 镜像源拉取 docker pull docker.m.daocloud.io/quay.io/sclorg/postgresql-15-c9s:latest# 备选 1:从中国科学技术大学镜像源拉取 docker pull docker.mirrors.ustc.edu.cn/quay.io/sclorg/postgresql-15-c9s:latest# 备选 2:直接从 Quay.io 拉取(可能需要代理) docker pull quay.io/sclorg/postgresql-15-c9s:latest# 打标签(如果使用 DaoCloud 或中科大镜像源) docker tag docker.m.daocloud.io/quay.io/sclorg/postgresql-15-c9s:latest quay.io/sclorg/postgresql-15-c9s:latest # 或 docker tag docker.mirrors.ustc.edu.cn/quay.io/sclorg/postgresql-15-c9s:latest quay.io/sclorg/postgresql-15-c9s:latest# 加载到 Minikube minikube image load quay.io/sclorg/postgresql-15-c9s:latest# 打包镜像 docker save -o /home/leo/postgresql-15-c9s.tar quay.io/sclorg/postgresql-15-c9s:latest# 验证打包是否可用 docker rmi quay.io/sclorg/postgresql-15-c9s:latest docker load -i /home/leo/postgresql-15-c9s.tar minikube image load quay.io/sclorg/postgresql-15-c9s:latest
离线加载镜像(如果在线拉取失败):
# 加载之前打包的镜像
docker load -i /home/leo/kube-rbac-proxy-v0.15.0.tar
docker load -i /home/leo/awx-operator-2.19.0.tar
docker load -i /home/leo/redis-7.tar
docker load -i /home/leo/awx-24.6.1.tar
docker load -i /home/leo/awx-ee-24.6.1.tar
docker load -i /home/leo/postgres-15.tar
docker load -i /home/leo/postgresql-15-c9s.tar# 加载到 Minikube
minikube image load gcr.io/kubebuilder/kube-rbac-proxy:v0.15.0
minikube image load quay.io/ansible/awx-operator:2.19.0
minikube image load redis:7
minikube image load quay.io/ansible/awx:24.6.1
minikube image load quay.io/ansible/awx-ee:24.6.1
minikube image load postgres:15
minikube image load quay.io/sclorg/postgresql-15-c9s:latest
验证镜像是否加载:
# 检查 Minikube 中的镜像,验证是否加载成功
minikube ssh -- docker images | grep -E "kube-rbac-proxy|redis|awx-operator|awx|awx-ee|postgres"
期望输出:
quay.io/sclorg/postgresql-15-c9s latest 7cf012c03d6e 5 days ago 373MB
quay.io/ansible/awx-operator 2.19.0 a60201718711 9 months ago 552MB
quay.io/ansible/awx 24.6.1 87ab0ba4bf68 8 months ago 980MB
quay.io/ansible/awx-ee 24.6.1 f5df180d3d59 8 months ago 1.75GB
redis 7 7705dd2858c1 10 months ago 109MB
gcr.io/kubebuilder/kube-rbac-proxy v0.15.0 7ebda747308b 17 months ago 55.9M
4. 修改 AWX Operator 镜像版本
# 进入 AWX Operator 目录
cd ~/awx-operator-2.19.0# 编辑 manager.yaml 文件
nano config/manager/manager.yaml
- 找到 image 字段,将:
修改为:image: quay.io/ansible/awx-operator:latest
image: quay.io/ansible/awx-operator:2.19.0
- 保存并退出:Ctrl+O,Enter,Ctrl+X。
5. 部署 AWX Operator
# 进入 AWX Operator 目录
cd ~/awx-operator-2.19.0# 设置命名空间环境变量
export NAMESPACE=ansible-awx# 创建命名空间
kubectl create namespace $NAMESPACE# 部署 AWX Operator
make deploy
验证:
# 实时查看 Pod 状态,验证 AWX Operator 是否运行
kubectl get pods -n ansible-awx -w
期望输出:
NAME READY STATUS RESTARTS AGE
awx-operator-controller-manager-xxx 2/2 Running 0 Xm
6. 部署 AWX 实例
# 进入 AWX Operator 目录
cd ~/awx-operator-2.19.0# 复制示例配置文件
cp config/samples/awx_v1beta1_awx.yaml awx-ubuntu.yml# 编辑配置文件
nano awx-ubuntu.yml
- 修改为以下内容:
--- apiVersion: awx.ansible.com/v1beta1 kind: AWX metadata:name: awx-ubuntunamespace: ansible-awx spec:service_type: NodePortimage_pull_policy: IfNotPresent # 确保使用本地镜像web_resource_requirements:requests:cpu: 50mmemory: 128Mitask_resource_requirements:requests:cpu: 150mmemory: 384Miee_resource_requirements:requests:cpu: 150mmemory: 192Mi
- 保存并退出:Ctrl+O,Enter,Ctrl+X。
应用配置:
# 部署 AWX 实例
kubectl apply -f awx-ubuntu.yml -n ansible-awx
验证 AWX 实例:
# 实时查看 Pod 状态,验证 AWX 实例是否运行
kubectl get pods -n ansible-awx -w
期望输出:
NAME READY STATUS RESTARTS AGE
awx-operator-controller-manager-xxx 2/2 Running 0 Xm
awx-ubuntu-postgres-15-0 1/1 Running 0 Xs
awx-ubuntu-task-<hash> 4/4 Running 0 Xs
awx-ubuntu-web-<hash> 3/3 Running 0 Xs
7. 访问 AWX
端口转发:
# 查看 AWX 相关 Pod
kubectl get pods -n ansible-awx# 端口转发,将 AWX Web 服务映射到本地 8052 端口
nohup kubectl port-forward awx-ubuntu-web-<hash> 8052:8052 -n ansible-awx --address 0.0.0.0 &
直接通过 Minikube 获取服务 URL:
# 获取 AWX 服务的访问 URL
minikube service awx-ubuntu-service -n ansible-awx --url
期望输出:
http://192.168.49.2:30080
获取管理员密码:
# 获取 AWX 管理员密码
kubectl get secret awx-ubuntu-admin-password -n ansible-awx -o jsonpath="{.data.password}" | base64 --decode; echo
登录 AWX:
- URL:http://192.168.85.132:8052
- 用户名:admin
- 密码:上一步输出的密码
因为我是NAT模式,所以需要使用端口转发来做映射
接着打开登入页面
输入账号:admin
输入密码:praymwaE6t9I1Bh7kcGvqGxJ2JXlhy9Q
这个地方需要注意
这两个字段是通过hash得出来的,每次重启服务都会变化,在做映射服务的时候需要将hash字段替换到命令中的<hash>部分
希望这个文章能对大家带来便利,如果需要离线镜像的朋友,可以私信我,免费提供
相关文章:
解锁 AWX+Ansible 自动化运维新体验:快速部署实战
Ansible 和 AWX 是自动化运维领域的强大工具组合。Ansible 是一个简单高效的 IT 自动化工具,而 AWX 则是 Ansible 的开源 Web 管理平台,提供图形化界面来管理 Ansible 任务。本指南将带你一步步在 Ubuntu 22.04 上安装 Ansible 和 AWX,使用 M…...
简洁、实用、无插件和更安全为特点的WordPress主题
简站WordPress主题是一款以简洁、实用、无插件和更安全为特点的WordPress主题,自2013年创立以来,凭借其设计理念和功能优势,深受用户喜爱。以下是对简站WordPress主题的详细介绍: 1. 设计理念 简站WordPress主题的核心理念是“崇…...
区块链学习总结
Hardhat 是一个用于 Ethereum 智能合约开发 的开发环境,专为 Solidity 语言编写的智能合约提供工具支持。它能够帮助开发者 编译、部署、测试和调试 智能合约,并提供一个本地的以太坊测试网络。 Hardhat 的核心功能 本地开发网络(Hardhat Ne…...
可发1区的超级创新思路(python\matlab实现):基于周期注意力机制的TCN-Informer时间序列预测模型
首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 一、应用场景 该模型主要用于时间序列数据预测问题,包含功率预测、电池寿命预测、电机故障检测等等 二、模型整体介绍(本文以光伏功率预测为例) 1.1 核心创新点 本模型通过三阶段…...
案例4:鸢尾花分类(pytorch)
一、引言 鸢尾花分类是机器学习领域的经典案例,常用于演示分类算法的基本原理和应用。本案例使用 PyTorch 构建一个简单的神经网络模型,对鸢尾花进行分类。通过该案例,我们可以学习如何使用 PyTorch 进行数据处理、模型构建、训练和评估&…...
本地部署Stable Diffusion生成爆火的AI图片
直接上代码 Mapping("/send") Post public Object send(Body String promptBody) { JSONObject postSend new JSONObject(); System.out.println(promptBody); JSONObject body JSONObject.parseObject(promptBody); List<S…...
CCF-CSP历年真题答案1,2
本文代码主要来自up主圣斗士-DS-ALGO对历年真题的讲解,在此特别感谢。 侵权则删。 10.1_分蛋糕_2017_03 #include <iostream> using namespace std;int main() {int a[1000], n, k; // 定义数组a用于存储蛋糕的重量,整数n表示蛋糕的数量…...
【MySQL】一篇讲懂什么是聚簇索引和非聚簇索引(二级索引)以及什么是回表?
1.聚簇索引: 叶子节点直接存储了完整的数据行。 每个表只能有一个聚簇索引,通常是主键(Primary Key)。如果没有定义主键,则MySQL会选择一个唯一且非空索引作为聚簇索引。 特点: 数据存储:叶子结点存储完整的数据行…...
炫酷的HTML5粒子动画特效实现详解
炫酷的HTML5粒子动画特效实现详解 这里写目录标题 炫酷的HTML5粒子动画特效实现详解项目介绍技术栈项目架构1. HTML结构2. 样式设计 核心实现1. 粒子类设计2. 动画效果实现星空效果烟花效果雨滴效果 3. 鼠标交互 性能优化效果展示总结 项目介绍 本文将详细介绍如何使用HTML5 C…...
go-zero学习笔记
内容不多,只有部分笔记,剩下的没有继续学下去,包括路由与处理器、日志中间件、请求上下文 文章目录 1、go-zero核心库1.1 路由与处理器1.2 日志中间件1.3 请求上下文 1、go-zero核心库 1.1 路由与处理器 package mainimport ("github…...
QuecPython 网络协议之TCP/UDP协议最祥解析
概述 IP 地址与域名 IP 地址是网络中的主机地址,用于两台网络主机能够互相找到彼此,这也是网络通信能够成功进行的基础。IP 地址一般以点分十进制的字符串来表示,如192.168.1.1。 我们日常访问的网站,其所在的服务器主机都有…...
FPGA_YOLO(二)
上述对cnn卷积神经网络进行介绍,接下来对YOLO进行总结,并研究下怎么在FPGA怎么实现的方案。 对于一个7*7*30的输出 拥有49个cell 每一个cell都有两个bbox两个框,并且两个框所包含的信息拥有30个 4个坐标信息和一个置信度5个,剩下就是20个类别。 FPGA关于YOLO的部署 1…...
Camera2 与 CameraX 闲谈
目录 📂 前言 1. 🔱 Camera2 2. 🔱 CameraX 3. 🔱 Camera2 与 CameraX 1)使用复杂度与开发效率 2)控制能力与应用场景 3)设备兼容性与稳定性 4)更新与维护 4. 💠…...
【零基础入门unity游戏开发——2D篇】2D物理系统 —— 2D刚体组件(Rigidbody 2d)
考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…...
【论文#目标检测】YOLO9000: Better, Faster, Stronger
目录 摘要1.引言2.更好(Better)3.更快(Faster)4.更健壮(Stronger)使用 WordTree 组合数据集联合分类和检测评估 YOLO9000 5.结论 Author: Joseph Redmon; Ali Farhadi Published in: 2017 IEEE Conference …...
C++异常处理时的异常类型抛出选择
在 C 中选择抛出哪种异常类型,主要取决于错误的性质以及希望传达的语义信息。以下是一些指导原则,帮助在可能发生异常的地方选择合适的异常类型进行抛出: 1. std::exception 适用场景:作为所有标准异常的基类,std::e…...
centos 7 搭建FTP user-list用户列表
在 CentOS 7 上搭建基于 user_list 的 FTP 用户列表,你可以按以下步骤操作: 1. 安装 vsftpd 服务 若还未安装 vsftpd,可以使用以下命令进行安装: bash yum install -y vsftpd2. 启动并设置开机自启 vsftpd 服务 bash systemctl…...
vulnhub-Tr0ll ssh爆破、wireshark流量分析,exp、寻找flag。思维导图带你清晰拿到所以flag
vulnhub-Tr0ll ssh爆破、wireshark流量分析,exp、寻找flag。思维导图带你清晰拿到所以flag 1、主机发现 arp-scan -l 2、端口扫描 nmap -sS -sV 192.168.66.185 nmap -sS -A -T4 -p- 192.168.66.185 nmap --scriptvuln 192.168.66.185经典扫描三件套,…...
k8s中service概述(二)NodePort
NodePort 是 Kubernetes 中一种用于对外暴露服务的 Service 类型。它通过在集群的每个节点上开放一个静态端口(NodePort),使得外部用户可以通过节点的 IP 地址和该端口访问集群内部的服务。以下是关于 NodePort Service 的详细说明࿱…...
搭建Redis哨兵集群
停掉现有的redis集群 因为这篇文章我是在 搭建完redis主从集群之后写的,如果要是没有搭建过这些,可以直接略过。要是从我上一篇 搭建redis主从集群过来的,可以执行下。 docker compose down 查找下redis相关进程 ps -ef | grep redis 可以看…...
.Net SSO 单点登录方式
SSO单点登录目的 之前一般来讲系统简单,登录后 本地 cookie 加服务器 session 存储用户身份信息,以此为依据来判断用户再次登录时免验证 但随着互联网发展,很多应用 部署在不同的服务器上,而用户体系是一套,那么按照原…...
SQL 基础 BETWEEN 的常见用法
在SQL中,BETWEEN是一个操作符,用于选取介于两个值之间的数据。 它包含这两个边界值。BETWEEN操作符常用于WHERE子句中,以便选取某个范围内的值。 以下是BETWEEN的一些常见用法: 选取介于两个值之间的值: 使用 BETWE…...
ngx_http_add_location
声明在 src\http\ngx_http_core_module.c ngx_int_t ngx_http_add_location(ngx_conf_t *cf, ngx_queue_t **locations,ngx_http_core_loc_conf_t *clcf); 定义在 src\http\ngx_http.c ngx_int_t ngx_http_add_location(ngx_conf_t *cf, ngx_queue_t **locations,ngx_http…...
深入探索ArkUI中的@LocalBuilder装饰器:构建高效可维护的UI组件
在ArkUI框架中,组件化开发是提升代码复用性和维护性的关键手段。随着项目复杂度的增加,开发者常常面临如何在保持组件封装性的同时,灵活处理组件内部逻辑的问题。传统的Builder装饰器虽然提供了强大的自定义构建能力,但在某些场景…...
视频知识库初步设想
将视频字幕提取出来作为知识库来源定位,下一步设想:把视频上的图片信息也精简出来作为定位。 下面是测试例子: 入参: {"model":"deepseek-ai/DeepSeek-R1-Distill-Llama-8B","messages":[{"role":"system","cont…...
微信小程序中使用Less样式方法
在微信小程序中使用Less样式,可以通过以下步骤实现。主要原理是借助Visual Studio Code(VSCode)的插件将Less文件自动编译为小程序支持的.wxss文件,或通过微信开发者工具的扩展功能直接集成Less编译环境。以下是具体方法ÿ…...
2024年MathorCup数学建模A题移动通信网络中PCI规划问题解题全过程文档加程序
2024年第十四届MathorCup高校数学建模挑战赛 A题 移动通信网络中PCI规划问题 原题再现: 物理小区识别码(PCI)规划是移动通信网络中下行链路层上,对各覆盖小区编号进行合理配置,以避免PCI冲突、PCI混淆以及PCI模3干扰等现象。PCI规划对于减少…...
本周安全速报(2025.3.18~3.24)
合规速递 01 2025欧洲网络安全报告:DDoS攻击同比增长137%,企业应如何应对? 原文: https://hackread.com/european-cyber-report-2025-137-more-ddos-attacks/ 最新的Link11《欧洲网络安全报告》揭示了一个令人担忧的趋势:DDo…...
力扣刷题-热题100题-第23题(c++、python)
206. 反转链表 - 力扣(LeetCode)https://leetcode.cn/problems/reverse-linked-list/solutions/551596/fan-zhuan-lian-biao-by-leetcode-solution-d1k2/?envTypestudy-plan-v2&envIdtop-100-liked 常规法 记录前一个指针,当前指针&am…...
YAML是什么?
YAML(YAML Ain’t Markup Language)是一种以数据为中心、高度可读的序列化语言,广泛应用于配置文件、数据交换和自动化工具中。以下从多个维度对其进行全面解析: 1. 定义与历史演变 全称与定位: YAML的全称最初为“Yet…...
期权交易投资怎么操作?新手期权操作指南
期权就是股票,唯一区别标的物上证指数,会看大盘吧,新手做期权交易两个方向认购做多,认沽做空,双向t0交易没了,跟期货一样,对的,玩的也是合约,唯一区别没有保证金不会爆仓…...
音视频学习(三十):fmp4
FMP4(Fragmented MP4)是 MP4(MPEG-4 Part 14)的扩展版本,它支持流式传输,并被广泛应用于DASH(Dynamic Adaptive Streaming over HTTP)和HLS(HTTP Live Streaming…...
破局AI落地困局 亚信科技“四位一体手术刀“切开产业智能三重枷锁
当全球进入以AI为核心竞争力的新经济周期,政企机构的数字化转型正面临关键转折点:IDC数据显示,2023年超过67%的中国企业在AI落地环节遭遇"技术断层",高昂的试错成本与碎片化解决方案让智能转型陷入僵局。在此背景下&…...
android 去掉状态栏的方法汇总
在 Android 开发中,隐藏或去除状态栏(Status Bar)有多种方法,具体实现方式取决于应用场景和目标 Android 版本。以下是常用的 6 种方法及其代码示例: 在 Android 开发中,隐藏或去除状态栏(Sta…...
jenkins+1panel面板java运行环境自动化部署java项目
本文章不包含1panel面板安装、jenkins部署、jenkins连接git服务器等操作教程,如有需要可以抽空后期补上 jenkins安装插件Publish Over SSH 在系统配置添加服务器 查看项目的工作空间 项目Configure->构Post Steps选择Send files or execute commands over SSH…...
VLAN综合实验报告
一、实验拓扑 网络拓扑结构包括三台交换机(LSW1、LSW2、LSW3)、一台路由器(AR1)以及六台PC(PC1-PC6)。交换机之间通过Trunk链路相连,交换机与PC、路由器通过Access或Hybrid链路连接。 二、实验…...
雷军从 6 楼扔涂有防弹涂层西瓜,西瓜完好无损,这种防弹涂层是什么材质?用在车上效果怎么样?
雷军展示的“防弹涂层”是一种基于第四代高分子材料聚脲(Polyurea)的升级技术,其核心特性是通过纳米级交联结构形成弹性防护层,兼具柔韧性与刚性,能够有效吸收冲击能量并抵御尖锐物体的穿刺。以下是关于该涂层材质及在…...
信奥赛CSP-J复赛集训(模拟算法专题)(31):P2692 覆盖
信奥赛CSP-J复赛集训(模拟算法专题)(31):P2692 覆盖 题目背景 WSR 的学校有 B B B 个男生和 G G G 个女生都来到一个巨大的操场上扫地。 题目描述 操场可以看成是 N N N 行 M M M 列的方格矩阵,如下…...
数据库联表Sql语句建一个新表(MySQL,Postgresql,SQL server)
数据库联表Sql语句建一个新表(MySQL,Postgresql,SQL server) 如果你想基于 SELECT USERS.ID,USERS.NAME,USERS.EMAIL,USERS.ID_CARD,USERS.V_CARD,USERS.ADDRESS,v_card.type,v_card.amount FROM USERS JOIN v_card on USERS.V_CARDv_card.v_card 这个查询结果创建一个新表&am…...
【Go】结构体的基本使用
go语言不是面向对象的语言 但是结构体类似于面向对象 结构体的定义 package mainimport "fmt"type Student struct {id intname stringage intschool string }func main() {s : Student{1, "luobozi", 18, "znl"}fmt.Println(s) }结构…...
统计可重复列表中的TOP N
文章目录 方案1:HashMap统计 全排序实现步骤:代码实现:优缺点: 方案2:HashMap统计 最小堆(优先队列)实现步骤:代码实现:优缺点: 方案3:Java Str…...
《jQuery Mobile 页面:深入解析与优化实践》
《jQuery Mobile 页面:深入解析与优化实践》 引言 jQuery Mobile 是一个流行的前端框架,专为移动设备设计,提供了丰富的UI组件和简洁的API,使得开发者可以快速构建出美观且响应式的移动页面。本文将深入解析jQuery Mobile的页面构建方法,并探讨一些优化实践,以帮助开发…...
C#中 String类API(函数)
字符串属性 string str "打工人";Console.WriteLine(str);char s str[0];Console.WriteLine(s); 字符串内置API(函数) 1. Concat 拼接字符串 string s1 "打";string s2 "工";string s3 "人";string sthstring.Concat(s1, s2, s…...
【Linux 维测专栏 5 -- linux pstore 使用介绍】
文章目录 Linux pstore 功能简介1. pstore 概述2. pstore 的核心功能3. pstore 的工作原理4. pstore 的使用示例5. pstore 的优势6. 典型应用场景配置示例1)DTS配置2)config配置运行测试及log问题小结Linux pstore 功能简介 1. pstore 概述 pstore(Persistent Storage)是…...
AI赋能:科技写作的革新之路
在当今数字化时代,人工智能(AI)技术正以惊人的速度渗透到各个领域,科技写作也不例外。AI不仅改变了写作的方式,还极大地提升了写作的效率和质量。本文将探讨AI技术在科技写作中的应用,并分享一些实用的AI工…...
如何为你的github开源项目选择合适的开源协议?
如何为你的github开源项目选择合适的开源协议? 导言 在github开源世界中,选择一个合适的开源协议是至关重要的。它不仅定义了他人如何使用你的代码,还决定了你的项目能否被广泛接受和传播,还能避免侵权问题。 然而,面…...
struts2漏洞攻略
S2-057远程执行代码漏洞 靶场: /struts2/s2-057 1,搭建好环境后访问 http://47.108.150.249:8081/struts2-showcase/ 2,在url处进行输⼊ 在url输入http://47.108.150.249:8081/struts2-showcase/${(123123)}/actionChain1.action 后刷新可…...
LVGL学习1
LVGL知识点 架构图 参考:Getting Started — LVGL documentation display、screen、widget的关系 参考: Widget Basics — LVGL documentation Overview — LVGL documentation 简单说,display就是硬件的显示设备,也就是一个一…...
【SpringCloud】微服务的治理以及服务间的远程调用
目录 一、微服务的诞生 二、服务注册和发现 2.1 需求的产生 2.2 注册中心原理 2.3 Nacos注册中心 2.4 Nacos安装部署教程 2.5 配置Nacos 三、OpenFeign 3.1 认识OpenFeign 3.2 快速入门 3.2.1 引入依赖 3.2.2 启动OpenFeign 3.2.3 编写OpenFeign客户端 3.2.4 使…...
钞票准备好了吗?鸿蒙电脑 5 月见
3月20日,在华为 Pura 先锋盛典及鸿蒙智行新品发布会上,华为常务董事、终端BG董事长、智能汽车解决方案BU董事长余承东表示,华为终端全面进入鸿蒙时代,今年5月将推出鸿蒙电脑。 在3月20日的华为Pura先锋盛典及鸿蒙智行新品发布会上…...