一、Ansible安装
1.1 yum使用EPEL源安装
1.2 编译安装
1.3 Git 源码安装
1.4 pip安装
二、Ansible相关文件说明
2.1 配置文件
2.2 主配置文件介绍
2.3 Inventory主机清单文件
三、实战演练
3.1 环境介绍
3.2 Ansible相关命令工具
一、Ansible安装
Ansible的安装方法主要有以下三种:
1.1 yum使用EPEL源安装
$ mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
$ mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
$ wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
$ yum clean all && yum makecache
1.2 编译安装
$ yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
1.3 Git 源码安装
$ git clone https://github.com/ansible/ansible.git
$ cd ansible
$ git checkout stable-2.9
Updating files: 100% (19674/19674), done.
Branch 'stable-2.9' set up to track remote branch 'stable-2.9' from 'origin'.
Switched to a new branch 'stable-2.9'
$ source ./hacking/env-setup
1.4 pip安装
$ yum install python-pip python-devel
$ yum install gcc glibc-devel zibl-devel rpm-bulid openss1-devel
$ pip install -U pip
$ pip install ansible --upgrade
二、Ansible相关文件说明
2.1 配置文件
/etc/ansible/ansible.cfg
:主配置文件,配置ansible工作特性;/etc/ansible/hosts
:主机清单文件,管理的目标主机地址清单;/etc/ansible/roles/
:存放角色的目录。
2.2 主配置文件介绍
[defaults]
以上只是一小部分关于default的相关配置,还有其他更多的配置这里暂时不一一列举。因为ansible的大部分参数都可以保持默认,无需更改。但是当你的被管理机器数量增加以后,建议将forks数量适当的调整。
温馨提示:由于Ansible不是一个服务,所以更改完配置后无无需进行重启操作(也没提供重启的操作方法),改完配置立即生效。
2.3 Inventory主机清单文件
主机清单文件,用大白话讲其实就是被整合在一个文件中的一组或者多组被管控的节点。默认情况下,该清单文件为:/etc/ansible/hosts
,通常我们可能会根据项目需求,起一个见名知意的其他名称,或者也会直接在每一套我们需要组织的项目根目录下存放一个hosts的清单文件。
Inventory主机清单文件可以有多个,在使用plyabook时可以手动通过-i
参数指定你需要使用的清单文件名称。
Inventory文件遵循了ini
配置文件的风格,一个 section 就表示一组隶属于同一个分组的被管理机器。目标被管理节点默认均被视为使用SSH的22端口,但是当部分节点使用非22端口号时,也可以在清单文件中进行指定。
被管理节点可以是以IP的形式写在清单文件中,也可以使用域名的形式。
[sites]
172.16.0.10
172.16.0.11
[appsrvs]
192.168.66.[1:30]
[nginx]
nginx1.ayunw.cn
nginx2.ayunw.cn
[apache]
apache1.ayunw.cn:2333
apache2.ayunw.cn
[nginxsrvs]
nginx[10:20].ayunw.cn
[dbservers]
redis1.ayunw.cn
redis2.ayunw.cn
[dbsrvs]
mysql-[a:z].ayunw.cn
三、实战演练
3.1 环境介绍
我这里包括ansible主控机和另外两个被管理机器。
[root@ansible-server ~]
3.2 Ansible相关命令工具
/usr/bin/ansible
:主提序,临时命令执行工具/usr/bin/ansible-doc
:查看配置文档,模块功能查看工具/us/bin/ansible-galaxy
:下载/上传优秀代码或Roles模块的自网平台/usr/bin/ansible-playbook
:定制自动化任务,编排剧本工具/usr/bin/ansible-pull
:远程执行命令的工具/usr/bin/ansible-vault
:文件加密工具/usr/bin/ansible-console
:基于Console界面与用户交互的执行工具
以上命令,最常用的两个:ansible
和ansible-playbook
,这两个命令就是ansible用来实现批量管里的关键。
- ansible命令通常用于一次性或者临时的任务,一般一条命令即可实现任务。通常我们称这种方式为:ad-hoc;
- ansible-playbook主要是应用于针对大型项目的部署,需要通过多个yaml格式的文件(以yaml或者yml结尾)组合使用,所以一般需要进行提前规划目录,整合yaml文件。
接下来介绍几个比较常用的命令。
3.2.1 ansible-doc
该命令主要用于显示针对某个模块的使用方法的帮助信息。如果忘记了模块或者模块的用法,可以通过该命令快速查看。
ansible-doc [options][module...]
注意: 在使用ansible批量管理操作之前,需要先对所有主机做一个免密认证,以确保每个被管理节点都能在ansible管理节点上通过ssh协议免密登录到被管理节点。
免密的三种实现方式:
- 基于ssh-keygen + shell + sshpass`方法实现
- 基于
expect
实现; - 基于
ansible-playbook
实现。
ad-hoc 方式常用参数说明:
--version
:显示版本-m module
:指定模块,默认为command-V
:详细过程-vv -vvv更详细--list-hosts
:显示主机列表,可简写–list-k,--ask-pass
:提示输入ssh连接密码,默认key验证-C,--check
:检查,并不执行-T,--timeout=TIMEOUT
:执行命令的超时时间,默认10s-u,--user=REMOTE_USER
:执行远程执行的用户-b,--become
:代替旧版的sudo切换--become-user=USERNAME
:指定sudo的runas用户,默认为root-K,--ask-become-pass
:提示输入sudo时的口令
通配符
ansible "*"-m ping
ansible 192.168.1.* -m ping
ansible "srvs" -m ping
[root@ansible-server ~]
逻辑或
ansible "websrvs:appsrvs" -m ping
ansible "192.168.66.151:192.168.66.152" -m ping
逻辑与
逻辑非
正则
ansible "webservers:&dbservers" -m ping
ansible "~(web|db)servers" -m ping
3.2.2 ansible执行命令过程
- 加载自己的配置文件默认
/etc/ansible/ansible.cfg
,如果指定了你自定义的清单文件,则从自己的清单文件中查找被管理主机 - 加载自己对应的模块文件,如:
command
- 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户
$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY
文件 - 给文件+x执行
- 执行并返回结果
- 删除临时py文件,退出
可以通过加参数 -v
或者 -vvv
列出详细的执行过程(可以多加几个v参数)。
[root@ansible-server ~]
3.2.3 ansible执行后颜色描述
默认情况下是以下三种颜色:
- 绿色:表示成功
- 黄色:修改了远程文件后并执行成功
- 红色:表示执行失败
但是在ansible配置文件中可以定义颜色,如下:
[root@ansible-server ~]
3.2.4 Ansible-playbook示例
[root@ansible-server ~]
3.2.5 ansible-vault
该工具用于对yaml文件进行加解密,格式如下:
ansible-vault [create|decrypt|edit|encrypt|rekey|view]
如:
ansible-vault encrypt echo-demo.yml
ansible是一个简单高效且很强大的工具,它的功能远不止于此。而那些不常用的命令工具,本文也暂不介绍,学习了不用也是在浪费自己的时间。如果有兴趣的话可以去官网或者其他站点查阅资料了解更多适合自己的信息。
送 · 书 · 福 · 利
● 赠书量:三本
● 书目介绍
● 赠书条件
关注微信公众号:运维开发故事
回复“1122”即可参与!以上三本书籍随机送给两位中奖者,每位一本,中奖者在开奖后6小时内未与本号主取得联系或者未留下邮寄地址信息视未自动放弃,解释权归本公众号所有!
开奖时间:
11月22日 上午12:00.
2022
温馨提示
一名常年穿梭于Google、阿里、百度、腾讯的一线运维从业者。是<<运维开发故事>>公众号的成员之一。不定期分享技术干货和对技术的理解与感悟。
如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我,期待与大家共同成长进步!
……………………
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/202590.html