一、Ansible基础
1、ansible简介
2、Ansible优点
* Ansible柔和了众多其他运维工具的优先,比如pubbet和saltstack能实现的功能,Ansible的都能实现
* Ansible是一款轻量级,无需再客户端安装agent
* Ansibe其实只是一个工具,Ansible不需要启动服务,仅仅是一个工具,可以轻松的实现分布式扩展
* 批量任何执行可以写成脚本,而且不用分发到远程就可以执行
* Ansible是一款高可靠性,轻量级的自动化工具
* Ansible使用python语言开发
3、Ansible特性:
* no agents 不需要再被管控知己上安装任何客户端
* no server 无服务端
* modules in any languages 基于模块工作,可以使用任意语言开发
* yaml 使用yaml语言定制剧本playbook
* ssh by default 基于ssh工作(默认)
4、Ansible的基本框架
![](https://box.kancloud.cn/1269092a2e12f539b3835704484435c5_539x273.png)
![](https://box.kancloud.cn/537e6f3a89241e65f4b267a1a09ebbd1_717x475.png)
二、Ansible的安装
1)centos系统上安装
* 直接yum安装即可
安装之前先查看系统自带的ansible版本,看是否满足需求,如果满足需求,就没必要安装最新版本,直接执行yum -y install ansible即可
~~~
[admin@node1 ~]$ sudo yum info ansible
Loaded plugins: fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Determining fastest mirrors
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.163.com
Available Packages
Name : ansible
Arch : noarch
Version : 2.4.1.0
Release : 1.el7
Size : 7.6 M
Repo : extras/7/x86_64
Summary : SSH-based configuration management, deployment, and task execution system
URL : http://ansible.com
License : GPLv3+
Description :
: Ansible is a radically simple model-driven configuration management,
: multi-node deployment, and remote task execution system. Ansible works
: over SSH and does not require any software or daemons to be installed
: on remote nodes. Extension modules can be written in any language and
: are transferred to managed machines automatically.
[admin@node1 ~]$ sudo yum -y install ansible
~~~
2、ubunt16.04系统上安装
~~~
www@u-node1:~$ sudo apt-get update
[sudo] password for www:
www@u-node1:~$ sudo apt-get -y install software-properties-common
www@u-node1:~$ sudo add-apt-repository ppa:ansible/ansible
www@u-node1:~$ sudo add-apt update
www@u-node1:~$ sudo add-apt -y install ansible
~~~
三、配置基于密钥的认证
1、在centos7系统上操作
~~~
* 在管理端,指定用户下,生成密钥对,然后把公钥发送到被管理端
[admin@node1 ~]$ ssh-keygen -t rsa
然后把公钥发到各客户端相应用户的家目录下
[admin@node1 ~]$ for i in 130 131 132 135;do ssh-copy-id -i ~/.ssh/id_rsa.pub admin@192.168.20.$i;done
~~~
2、在ubuntu16.04-server系统上
~~~
www@u-node1:~$ ssh-keygen -t rsa -P ''
发送公钥到对应客户端上
www@u-node1:~$ ssh-copy-id -i .ssh/id_rsa.pub www@192.168.20.157
www@u-node1:~$ ssh-copy-id -i .ssh/id_rsa.pub www@192.168.20.156
www@u-node1:~$ ssh-copy-id -i .ssh/id_rsa.pub www@192.168.20.155
测试:
www@u-node1:~$ ssh www@192.168.20.157 'ifconfig'
www@u-node1:~$ ssh www@192.168.20.157 'uptime'
21:21:20 up 9 min, 2 users, load average: 0.00, 0.06, 0.06
www@u-node1:~$ ssh www@192.168.20.156 'uptime'
21:21:24 up 9 min, 2 users, load average: 0.00, 0.07, 0.07
www@u-node1:~$ ssh www@192.168.20.155 'uptime'
21:21:27 up 28 min, 2 users, load average: 0.08, 0.06, 0.05
~~~
四、命令
1、简单定义主机清单(详细见第二章)
* 在centos7上
~~~
[admin@node2 ~]$ cd /etc/ansible/
[admin@node2 ansible]$ cp hosts{,.ori}
[admin@node2 ansible]$> hosts
[admin@node2 ansible]$ sudo vim hosts
先把原先的所有的先删掉,然后填写如下,案例
[admin@node2 ansible]$ sudo vim hosts
[websrvs]
192.168.20.153
192.168.20.154
[nosqlsrvs]
192.168.20.152
[dbsrvs]
192.168.20.139
192.168.20.154
~~~
* 在ubuntu16.04server上操作
~~~
www@u-node1:~$ cd /etc/ansible/
www@u-node1:/etc/ansible$ sudo cp hosts{,.ori}
[sudo] password for www:
www@u-node1:/etc/ansible$ sudo vim hosts
[websrvs]
192.168.20.155
192.168.20.156
[dbsrvs]
192.168.20.156
192.168.20.157
~~~
2、ansible命令
查看帮助
ansible -h 常用选项如下
~~~
-m module 选择执行的模块
-a args 相应模块的参数
-f FORKS 指定并行进程数 默认为5
-e EXTRA_VARS 设置额外的变量
-b, --become run operations with become
-K, --ask-become-pass ask for privilege escalation password
~~~
案例:批量执行命令,查看各管理端的硬盘使用情况
~~~
[admin@node1 ~]$ ansible 192.168.20.131 -m command -a 'df -h'
192.168.20.131 | SUCCESS | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 13G 1.5G 12G 12% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.6M 490M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/vda1 1014M 121M 894M 12% /boot
tmpfs 100M 0 100M 0% /run/user/0
tmpfs 100M 0 100M 0% /run/user/1010
~~~
[admin@node1 ansible]$ ansible webserver -a "wget -O /tmp/EasyRSA-2.2.2.tgz http://soft.51yuki.cn/EasyRSA-2.2.2.tgz"
- 第一章:Ansible基础入门
- 第二章:Ansible系列手册
- 第一节:Ansible系列之主机清单
- 第二节:Ansible系列之变量
- 第三节:Ansible系列之YAML
- 第四节:Ansible系列之条件判断
- 第五节:Ansible系列之循环
- 第六节: Ansible系列之tags
- 第七节:Ansible系列之Jinja2
- 第三章:Ansible系列之模块
- 第一节:user模块
- 第二节:group模块
- 第三节:cron模块
- 第四节:copy模块
- 第五节: file模块
- 第六节:yum模块
- 第七节:service模块
- 第八节:shell模块
- 第九节:script模块
- 第十节:setup模块
- 第十一节:filesystem和mount模块
- 第十二节:synchronize模块
- 第十三节: get_url模块
- 第十四节: package模块
- 第十五节:stat模块
- 第十六节:unarchive模块
- 第十七节: commang模块
- 第四章:Ansible-playbook介绍
- 第五章:Ansible系统环境
- 第一节:Ansible Role 系统环境之epel设置