任务目标:
1.linux使用ansible框架写一个示例脚本
2.ansibleui界面调用第一步的脚本执行
本文档主要讲述如何使用ansible以及Tower完成服务器集群的最基础的管理工作。本文基于测试学习环境下使用,所以关闭防火墙等,不配置安全证书等。
**ansible:**是一款运维管理框架,用于操作集群服务使用,方便集群的管理;其最大的特点就是只需要在主操作服务器上安装既可,不需要对被操作服务器进行安装操作。
**tower:**是ansible框架的一个可视化界面,方便运维管理人员安装使用;它的安装,仅仅在安装了ansible的主操作服务器上安装即可,同样不需要对被操作服务器进行安装操作。
我这里是单节点集群,所以这里仅有一台虚拟机用于操作,主要的服务器与被操作服务器都是一台机器;
ansible版本
ansible tower版本
注意:
- 全程使用root账户操作;
- tower仅支持Centos7.4及以上版本;
- 因为ansible是使用python编写的,所以需要python环境才可以运行,不过本机没有也没关系,因为安装ansible的时候会自动安装。
# 安装epel-release扩展源
yum install epel-release -y
# 正式下载ansible框架,默认下载了最新版本
yum install -y ansible
# 检查是否安装成功,查看ansible版本:
ansible --version
此时代表安装成功!
进入主要的操作目录:
root账号登录ansible机器(也就是主要的机器,操作其它机器的机器),并且进入到ansible目录;
# 进入目录
cd /etc/ansible
2、配置要操作主机的地址:
(配置主机的地址有很多操作,比如按组划分主机等等,这里仅仅以最简单的单主机为例)
进入hosts的文件
# 进入hosts文件添加内容
vim hosts
进行内容编辑,内容如下,添加;
cdh002 ansible_host=192.168.43.19 ansible_port=22 ansible_user=root ansible_password=123456
chd002是主机名称、ansible_host是被操作主机的IP地址,ansible_port是SSH端口,后面两个参数依次为SSH账号和密码:
(我虚拟机的ip=192.168.43.19,所以ansible_host=192.168.43.19
)
3.其它配置
进入ansible.cfg的文件,这是个ansible的配置文件,执行ansible命令时用到,这里面指定了主机信息在hosts文件中查找:
# 进入hosts文件添加内容
vim ansible.cfg
# 添加了以下内容,可以关闭安全证书验证;同时将默认注释的inventory内容的注释取消,后面的路径修改为hosts(刚才修改的ansible自己的hosts文件)的路径
[defaults]
host_key_checking = False
1、使用ansible执行脚本命令
直接执行脚本,成功则证明ansible运行脚本是可行的
# 成功会打印输出hello world
ansible all -i "localhost," -c local -m shell -a 'echo hello world'
成功!
2、编写了一个shell脚本,并且测试用Linux自身运行这个脚本
# 创建脚本命令
vim test.sh
# 下面是测试脚本的内容,内容为输出一个hello world
echo hello world
# 运行test脚本
./test.sh
提示运行权限不够
运行权限不够,提升权限
# 提升权限命令
chmod 777 test.sh
# 运行test脚本
./test.sh
3、现在尝试用ansible来运行test.sh脚本文件
# 执行shell命令
ansible cdh002 -m shell -a './test.sh'
成功,如下图:
playbook是ansible可操控的文件,用于操控集群,这里编写的palybook将会用于下面tower的测试使用;
1、写一个playbook文件
# 创建hello.playbook文件
vim hello.playbook
# 以下为这个文件中的内容,会生成一个日志文件
- hosts: cdh002
tasks:
- name: say hello task
shell: echo hello world `date` by `hostname` >/tmp/hello.log
刚刚创建的文件:
# 使用ansible运行刚才的playbook文件
ansible-playbook hello.playbook
输出内容如下:
# 查看日志文件
ll /tmp/hello.log
# 打印日志文件
cat /tmp/hello.log
成功!
(正常下载可能出现网速问题等等不好用,可以直接用下载软件下载到本地,然后放到虚拟机中)
# 安装一些相关的软件
yum -y install vim curl postgresql
# 创建下载目录
mkdir /tmp/tower && cd /tmp/tower
# 下载安装包 (我由于网络问题,手动下载了ansible-tower-setup-3.4.3-1版本,以下命令默认下载最新版本)
curl -k -O https://releases.ansible.com/ansible-tower/setup/ansible-tower-setup-latest.tar.gz
# 解压
tar xvf ansible-tower-setup-latest.tar.gz
# 进入到安装目录
cd ansible-tower-setup*/
如果无法下载ansible tower,已经在本人上传资源中提供ansible tower-3.4.3-1版本,也是本文档使用版本。
# 这个是密码,可以自己设定,我这里是123456
sed -i "s#password=''#password='123456'#g" inventory
# 这里就是127.0.0.1,不写这个的话还会报错
sed -i "s#host=''#host='127.0.0.1'#g" inventory
sed -i "s#port=''#port='5432'#g" inventory
# 添加tower的日志目录否则报错
mkdir -p /var/log/tower
# 在解压后的文件夹中,运行安装命令
./setup.sh
# 开始正常安装,安装时间比较长,如果网络较快,速度会相对快点
报错
安装出现了错误(很长)
关键部分摘要:
根据提示知道,最前部分提示了连接超时,最后部分提示提示许可证有问题,了解到这个软件安装是需要校验许可证了,我这里没有校验成功,所以需要手动关闭校验;
解决:
进入这个文件
这里由原本的1置为0就不再检查证书了(?可以检索,set nu 可以显示行号)
然后又有新bug:
# 问题详情如下
fatal: [localhost]: FAILED! => {
"msg": "The conditional check 'memcached_conf|changed or memcached_conf_debian|changed' failed.
The error was: template error while templating string: no filter named 'changed'. String: {% if memcached_conf|changed or memcached_conf_debian|changed %} True {% else %} False {% endif %}
The error appears to be in '/root/ansible-tower-setup-3.4.3-1/roles/memcached/tasks/main.yml': line 37, column 7, but may be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- name: restart memcached when bind settings changed
^ here
"}
# 进入对应文件,注释掉了相关信息:(图中蓝色部分原本是有的,此时我注释掉了)
vim /root/ansible-tower-setup-3.4.3-1/roles/memcached/tasks/main.yml
(蓝色的部分是被我自己手动注销的)
然后再次运行./setip.sh命令安装;
然后安装成功了!
在浏览器地址栏输入虚拟机ip,回车即可(已经默认端口80);
账户密码:admin 123456
成功进入:
有什么用?经过一次创建, 以后就可以一键快速让指定主机做指定的事情;
先看一下tower的工程目录,towet默认工程目录(tower以前叫awx),其中project目录是tower的主要工作区域
cd /var/lib/awx
要想让我们刚才在本地写的hello.playbook文件可以通过tower操作,我们需要现在本地创建对应的本地工程,接下来讲解!
由于tower默认的工程工作目录是
所以我们的工程要全部放置在这个目录下/var/lib/awx/projects
;
hello.playbook
文件移动到我们创建的myplaybook
目录下,并且将其名字由hello.playbook
修改为hello.yml
(因为tower不能识别.playbook文件,所以需要改为tower可以识别的.yml文件)这里是添加我们要运行的工程文件所在;
+
号创建工程点击绿色的save
按钮进行保存
这是我们要执行命令的服务器列表
+
号创建工程点击绿色的save
按钮进行保存
模板可以由前面的工程和主机清单任意组合,可以帮助我们快速的让指定的服务器(主机清单里面的服务器)运行指定的工程;
点击绿色的save
按钮进行保存
直接依据模板创建job任务(也就是我们的正式的工程)
目标达成!
在主机清单部分,还可以在终端使用命令行进行主机列表的导入;
# 将本地 /etc/ansible下hosts中的主机信息同步tower中
awx-manage inventory_import --exclude-empty-groups --overwrite --overwrite-vars -v 3 --source=/etc/ansible/hosts --inventory-name=host_list
--source
是指ansible的hosts文件。
--inventory-name
是指tower中创建的主机清单。
对awx-manage命令的解释
导入不同主机,上面的命令还需要根据具体需求进行修改
--source 指定inventory文件
--group-filter 从文件中通过组名过滤
--host-filter 通过host name过滤
--inventory-name 导入到指定名称资产清单
--inventory-id 导入到指定ID的资产清单
# name 和 id 选一个
--overwrite 覆盖主机和组,默认不覆盖
--overwrite-vars 覆盖主机变量
--keep-vars 保持主机变量
--enabled-value 导入的主机状态是否激活默认激活
结束!
参考链接:
ansible安装:
https://www.cnblogs.com/fusheng11711/p/12220932.html
ansible安装以及脚本调用
https://blog.csdn.net/boling_cavalry/article/details/105342744
ansible-tower官方安装指南:
https://docs.ansible.com/ansible-tower/3.6.3/html_zh/quickinstall/index.html
tower基本使用:
https://www.jianshu.com/p/804832965259
tower实战
https://kionf.com/2018/11/21/tower-useage/