Ansible AWX是商业版Ansible Tower 的开源版本,AWX提供了一个基于web的用户界面、REST API和构建在Ansible之上的任务引擎。
借助Ansible AWX,您可以通过可视化仪表板,基于角色的访问控制,作业计划,集成通知和图形化inventory管理来集中控制IT基础架构。
借助图形化的AWX,能够更方便的编排和部署 Ansible Playbook,并提供集中的日志记录、审计和系统跟踪,通过REST API和CLI轻松将Ansible AWX嵌入现有工具和流程中。
项目地址:https://github.com/ansible/awx
参考:https://github.com/ansible/awx/blob/devel/INSTALL.md
准备一台服务器,在本地使用docker方式部署awx。
安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl enable --now docker
安装docker-compose
version=1.26.2
curl -L https://get.daocloud.io/docker/compose/releases/download/${version}/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
安装docker-compose python模块
yum install -y python3
pip3 install docker-compose -i https://mirrors.aliyun.com/pypi/simple/
下载awx
wget https://github.com/ansible/awx/archive/16.0.0.tar.gz
tar -zxvf 16.0.0.tar.gz
部署awx
yum install -y ansible
cd awx-16.0.0/installer/
ansible-playbook -i inventory install.yml
查看运行的docker
[root@jenkins ~]# cd /root/.awx/awxcompose
[root@jenkins awxcompose]# docker-compose ps -a
Name Command State Ports
----------------------------------------------------------------------------
awx_postgres docker-entrypoint.sh postgres Up 5432/tcp
awx_redis docker-entrypoint.sh /usr/ ... Up 6379/tcp
awx_task /usr/bin/tini -- /usr/bin/ ... Up 8052/tcp
awx_web /usr/bin/tini -- /bin/sh - ... Up 0.0.0.0:80->8052/tcp
浏览器访问awx:http://10.39.140.196,默认用户名admin,密码password。
基本配置流程:
首先需要为主机创建凭证,选择Machine类型,可创建用户密码方式或ssh-key方式。
2、创建基于主机ssh-key类型凭证:
在本机对被管理主机执行ssh免密:
ssh-keygen
ssh-copy-id 10.39.140.248
ssh-copy-id 10.39.140.249
获取ssh private key
# cat /root/.ssh/id_rsa
创建inventory
在inventory中选择主机,直接使用IP地址添加主机
或者以别名方式添加主机
查看添加的主机
也可以使用导入方式批量添加主机,选择Sources,配置以下信息,注意需要提前添加Projects
playbooks/hosts示例
[all]
node1 ansible_host=95.54.0.12
node2 ansible_host=95.54.0.13
node3 ansible_host=95.54.0.14
node4 ansible_host=95.54.0.15
node5 ansible_host=95.54.0.16
node6 ansible_host=95.54.0.17
[kube-master]
node1
node2
[etcd]
node1
node2
node3
[kube-node]
node2
node3
node4
node5
node6
[calico-rr]
[k8s-cluster:children]
kube-master
kube-node
calico-rr
创建主机组
将主机加入组
勾选2个主机,点击右侧Run Command,选择ping模块,下一步指定ssh-pass或ssh-key,然后点击launch执行命令,等待任务成功执行:
projects定义了一组playbooks的来源,指定了templates执行任务时从哪里引用playbook,常用的有以下几种选择:
示例git仓库playbooks:https://github.com/ansible/ansible-examples
您可以参照以上链接的示例仓库组织自己的playbooks项目:
[root@jenkins ansible-examples]# tree -L 2
.
├── jboss-standalone
│ ├── demo-aws-launch.yml
│ ├── deploy-application.yml
│ ├── group_vars
│ ├── hosts
│ ├── LICENSE.md
│ ├── README.md
│ ├── roles
│ └── site.yml
├── lamp_haproxy
│ ├── aws
│ ├── group_vars
│ ├── hosts
│ ├── LICENSE.md
│ ├── provision.yml
│ ├── README.md
│ ├── roles
│ ├── rolling_update.yml
│ └── site.yml
├── lamp_simple
│ ├── group_vars
│ ├── hosts
│ ├── LICENSE.md
│ ├── README.md
│ ├── roles
│ └── site.yml
├── lamp_simple_rhel7
│ ├── group_vars
│ ├── hosts
│ ├── LICENSE.md
│ ├── README.md
│ ├── roles
│ └── site.yml
创建projects,可选的Source Control Credential Type:
基于docker部署的awx推荐使用git仓库方式:
点击Sync Project进行同步:
创建templates以执行playbook任务。
注意,必须提前在awx中定义好与git仓库playbook匹配的inventory:
运行templates,执行jobs任务
AWX不推荐引用本地目录的playbooks,建议使用git仓库统一管理playbooks,使用docker部署awx时,如果创建projects想要使用Manual方式运行本地目录的playbook,需要按照以下步骤重新部署awx.
创建本地目录,并将容器中projects复制到本地:
mkdir /var/lib/awx/
docker cp awx_task:/var/lib/awx/projects/ /var/lib/awx/projects/
修改docker-compose.yml ,在web和task容器中挂载相同的卷
# cd /root/.awx/awxcompose/
# vim docker-compose.yml
web:
volumes:
- /var/lib/awx/projects/:/var/lib/awx/projects/
task:
volumes:
- /var/lib/awx/projects/:/var/lib/awx/projects/
修改inventory配置文件,取消project_data_dir注释
# cd awx-16.0.0/installer/
# cat inventory |grep project_data_dir
project_data_dir=/var/lib/awx/projects
重新部署awx
ansible-playbook -i inventory install.yml
在主机/var/lib/awx/projects目录下创建自己的playbooks项目
[root@jenkins ~]# cat /var/lib/awx/projects/helloworld/helloworld.yml
---
- name: Hello World!
hosts: all
tasks:
- name: Hello World!
shell: echo "Hi! Tower is working!"
创建项目选择Manual类型,即可在Playbook Directory选择本地的playbooks执行:
然后创建templates直接执行即可:
任务执行完成如下: