1、简介
ansible是什么?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具;其目标是:自动化部署APP;自动化管理配置项;自动化的持续交付;自动化的(AWS)云服务管理。
ansible基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
运维工具常见的工作模式
ansible工作在agentless模式下具有幂等性。ansible在控制端只需要告诉监控端的期望状态就可以实现批量部署。幂等性不会重复执行相同的指令。例如不会重复安装软件 ;期望状态只需要告诉被监控端的期望状态
2、总体架构
3、特性
4、优点
二、Ansible基础安装与配置
下载以下软件包准备编译安装
1、Ansible基础安装
控制服务器(Master)需要安装Python2.6/7,windows上无法使用ansible。被管理的服务器(Managed Node)需要安装Python2.4以上的版本,如果低于2.5,需要安装python-simplejson。
(1)python2.7安装
https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
将python头文件拷贝到标准目录,以避免编译ansible时,找不到所需的头文件
修改yum脚本,使其指向旧版本的python,已避免其无法运行
[root@DQ ~]# vim /usr/bin/yum
!/usr/bin/python --> #!/usr/bin/python2.6
(2)setuptools模块安装
https://pypi.python.org/packages/source/s/setuptools/setuptools-7.0.tar.gz
[root@DQ ansible]# tar xf setuptools-7.0.tar.gz -C /usr/src/
[root@DQ ansible]# cd /usr/src/setuptools-7.0/
[root@DQ setuptools-7.0]# python setup.py install
(3)pycrypto模块安装
https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz
[root@DQ ansible]# tar xf pycrypto-2.6.1.tar.gz -C /usr/src/
[root@DQ ansible]# cd /usr/src/pycrypto-2.6.1/
[root@DQ pycrypto-2.6.1]# python setup.py install
(4)PyYAML模块安装
http://pyyaml.org/download/libyaml/yaml-0.1.5.tar.gz
[root@DQ ansible]# tar xf yaml-0.1.5.tar.gz -C /usr/src/
[root@DQ ansible]# cd /usr/src/yaml-0.1.5/
[root@DQ yaml-0.1.5]# ./configure --prefix=/usr/local
[root@DQ yaml-0.1.5]# make
[root@DQ yaml-0.1.5]# make install
https://pypi.python.org/packages/source/P/PyYAML/PyYAML-3.11.tar.gz
[root@DQ ansible]# tar xf PyYAML-3.11.tar.gz -C /usr/src
[root@DQ ansible]# cd /usr/src/PyYAML-3.11/
[root@DQ PyYAML-3.11]# vim README
[root@DQ PyYAML-3.11]# python setup.py --with-libyaml install
(5)Jinja2模块安装
https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.9.3.tar.gz
https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.7.3.tar.gz
[root@DQ ansible]# tar xf MarkupSafe-0.9.3.tar.gz -C /usr/src
[root@DQ ansible]# cd /usr/src/MarkupSafe-0.9.3/
[root@DQ MarkupSafe-0.9.3]# vim README.rst
[root@DQ MarkupSafe-0.9.3]# python setup.py install
[root@DQ ansible]# tar xf Jinja2-2.7.3.tar.gz -C /usr/src
[root@DQ ansible]# cd /usr/src/Jinja2-2.7.3/
[root@DQ Jinja2-2.7.3]# vim README.rst
[root@DQ Jinja2-2.7.3]# python setup.py install
(6)paramiko模块安装
https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.11.tar.gz
https://pypi.python.org/packages/source/p/paramiko/paramiko-1.15.1.tar.gz
[root@DQ ansible]# tar xf ecdsa-0.11.tar.gz -C /usr/src
[root@DQ ansible]# cd /usr/src/ecdsa-0.11/
[root@DQ ecdsa-0.11]# vim README.md
[root@DQ ecdsa-0.11]# python setup.py install
[root@DQ ansible]# tar xf paramiko-1.15.1.tar.gz -C /usr/src/
[root@DQ ansible]# cd /usr/src/paramiko-1.15.1/
[root@DQ paramiko-1.15.1]# vim README
[root@DQ paramiko-1.15.1]# python setup.py install
(7)simplejson模块安装
https://pypi.python.org/packages/source/s/simplejson/simplejson-3.6.5.tar.gz
[root@DQ ansible]# tar xf simplejson-3.6.5.tar.gz -C /usr/src
[root@DQ ansible]# cd /usr/src/simplejson-3.6.5/
[root@DQ simplejson-3.6.5]# vim README.rst
[root@DQ simplejson-3.6.5]# python setup.py install
(8)ansible安装
https://github.com/ansible/ansible/archive/v1.7.2.tar.gz
[root@DQ ansible]# tar xf ansible-1.7.2.tar.gz -C /usr/src
[root@DQ ansible]# cd /usr/src/ansible-1.7.2/
[root@DQ ansible-1.7.2]# vim README.md
[root@DQ ansible-1.7.2]# python setup.py install
ad-hoc是ansible里的一个概念, 在命令中就是 -a,ad hoc——临时的,在ansible中是指需要快速执行,并且不需要保存的命令。说白了就是执行简单的命令——一条命令。对于复杂的命令需要使用ansible-playbook
在ansible中还有一个Module(模块)的概念,这个模块可以理解为一个库,所有的命令都需要通过模块来执行,可以通过各种模块来批量完成某个包的安装,或者其他需要的操作。
2、Ansible配置
(1)设置管理机ssh免密码登录集群节点机
集群节点机上执行如下命令,随后连敲两次空格键默认在/root/.ssh目录下生成密钥文件id_rsa和公钥文件id_rsa.pub,确保/root/.ssh/authorized_keys的权限为600
[root@Node1 ~]# ssh-keygen -t rsa
[root@Node2 ~]# ssh-keygen -t rsa
[root@Node3 ~]# ssh-keygen -t rsa
在管理机上将自己的公钥拷贝到集群节点机上
[root@DQ ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
[root@DQ ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
[root@DQ ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
(2)复制模板配置文件到/etc/ansible/下,并指定集群节点机的认证文件
(3)主机组定义:所有的远程主机需要在hosts中配置,可以分组;当然hosts也可以执行时指定
(4)简单测试
ansible命令最常用的用法:
[root@DQ ~]# ansible --help
Usage: ansible [options]
Options:
-a MODULE_ARGS, --args=MODULE_ARGS
-m MODULE_NAME, --module-name=MODULE_NAME
说明:第一次运行时,需要输入一下“yes”【进行公钥验证】,后续无需再次输入
ansible所支持的模块可以使用如下命令来查看
3、常用模块
(1)setup
(2)ping
(3)file
option:
示例: 远程文件符号链接创建
查看上一步创建的链接文件
远程文件符号链接删除
链接文件成功删除
(4)mount
option:
示例:挂载光盘到/mnt/cdrom
(5)yum
option:
示例:将本地文件“/tmp/test.sh”复制到远程服务器,将创建的脚本文件分发到远程
(7)command
option:
(8)shell
切换到某个shell执行指定的指令,参数与command相同
示例:远程执行上面copy到node上的脚本
示例:远程执行命令
与command不同的是,shell模块可以支持命令管道,同时另一个模块raw也具备此功能
(9)filesystem
option:
(10)service
option:
(11)cron
option: