Ansible基本部署&&常用模块

1、简介
ansible是什么?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具;其目标是:自动化部署APP;自动化管理配置项;自动化的持续交付;自动化的(AWS)云服务管理。
ansible基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

  • 连接插件connection plugins:负责和被监控端实现通信;
  • host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
  • 各种模块核心模块、command模块、自定义模块;
  • 借助于插件完成记录日志邮件等功能;
  • playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

运维工具常见的工作模式

  • agent模式: 基于ssl实现,代理工作在被监控端,如:puppet
  • agentless模式: 基于ssh服务实现工作在被监控端,监控端是ssh的客户端。

ansible工作在agentless模式下具有幂等性。ansible在控制端只需要告诉监控端的期望状态就可以实现批量部署。幂等性不会重复执行相同的指令。例如不会重复安装软件 ;期望状态只需要告诉被监控端的期望状态
2、总体架构
Ansible基本部署&&常用模块_第1张图片
3、特性

  • no agents:不需要在被管控主机上安装任何客户端;
  • no server:无服务器端,使用时直接运行命令即可;
  • modules in any languages:基于模块工作,可使用任意语言开发模块;
  • yaml,not code:使用yaml语言定制剧本playbook;
  • ssh by default:基于SSH工作;
  • strong multi-tier solution:可实现多级指挥。

4、优点

  • 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
  • 批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
  • 使用python编写,维护更简单,ruby语法过于复杂;
  • 支持sudo。

5、任务执行流程
Ansible基本部署&&常用模块_第2张图片
说明:

  • 以上内容大多是基于他人分享的基础上总结而来,学习借鉴之用;
  • 本次安装基于 CentOS 6.4x86_64系统环境。

二、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
Ansible基本部署&&常用模块_第3张图片
将python头文件拷贝到标准目录,以避免编译ansible时,找不到所需的头文件
Ansible基本部署&&常用模块_第4张图片
修改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也可以执行时指定
Ansible基本部署&&常用模块_第5张图片
(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基本部署&&常用模块_第6张图片
ansible所支持的模块可以使用如下命令来查看
Ansible基本部署&&常用模块_第7张图片
3、常用模块
(1)setup
这里写图片描述
Ansible基本部署&&常用模块_第8张图片
(2)ping
Ansible基本部署&&常用模块_第9张图片
(3)file
这里写图片描述
option:

  • group:定义文件/目录的属组
  • mode:定义文件/目录的权限
  • owner:定义文件/目录的属主
  • path:必选项,定义文件/目录的路径
  • recurse:递归设置文件的属性,只对目录有效
  • src:被链接的源文件路径,只应用于state=link的情况
  • dest:被链接到的路径,只应用于state=link的情况
  • force:强制创建软链接有两种情况,一种是源文件不存在,但之后会建立的情况;另一种是要取消已创建的软链接,创建新的软链,有两个选项:【yes|no】
  • state:
    link:创建软链接
    hard:创建硬链接
    directory:如果目录不存在,就创建目录
    file:即使文件不存在,也不会被创建
    absent:删除目录、文件或者取消链接文件
    touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

示例: 远程文件符号链接创建
Ansible基本部署&&常用模块_第10张图片
查看上一步创建的链接文件
Ansible基本部署&&常用模块_第11张图片
远程文件符号链接删除
Ansible基本部署&&常用模块_第12张图片
链接文件成功删除
Ansible基本部署&&常用模块_第13张图片
(4)mount
这里写图片描述
option:

  • dump
  • passno
  • opts:传递给mount命令的参数
  • fstype:必选项,挂载文件的类型
  • name:必选项,挂载点
  • src:必选项,要挂载的文件
  • state:必选项
    present:只处理fstab中的配置
    absent:删除挂载点
    mounted:自动创建挂载点并挂载之
    umounted:卸载

示例:挂载光盘到/mnt/cdrom
Ansible基本部署&&常用模块_第14张图片
(5)yum
这里写图片描述
option:

  • list
  • config_file:yum的配置文件
  • disable_gpg_check:关闭gpg_check
  • disablerepo:不启用某个源
  • enablerepo:启用某个源
  • name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径
  • state:【present|absent|latest】

示例:
Ansible基本部署&&常用模块_第15张图片
(6)copy
这里写图片描述
option:

  • content:用于替代“src”,可以直接设定指定文件的值
  • directory_mode:递归设定目录的权限,默认为系统默认权限
  • others:所有的file模块里的选项都可以在这里使用
  • backup:在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:【yes|no】
  • dest:必选项,要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
  • force:如果目标主机包含该文件,但内容不同,设置为yes,则强制覆盖,设置为no,则只有当目标主机的目标位置不存在该文件时,才复制;默认为yes
  • src:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync。

示例:将本地文件“/tmp/test.sh”复制到远程服务器,将创建的脚本文件分发到远程
Ansible基本部署&&常用模块_第16张图片
(7)command
option:

  • free_form:要执行的linux指令
  • chdir:在执行指令之前,先切换到该目录
  • creates:一个文件名,当该文件存在,则该命令不执行
  • removes:一个文件名,当该文件不存在,则该选项不执行
  • executable:切换shell来执行指令,该执行路径必须是一个绝对路径

(8)shell
切换到某个shell执行指定的指令,参数与command相同
这里写图片描述
示例:远程执行上面copy到node上的脚本
Ansible基本部署&&常用模块_第17张图片
示例:远程执行命令
Ansible基本部署&&常用模块_第18张图片
与command不同的是,shell模块可以支持命令管道,同时另一个模块raw也具备此功能
Ansible基本部署&&常用模块_第19张图片
(9)filesystem
这里写图片描述
option:

  • dev:目标块设备
  • force:在一个已有文件系统的设备上强制创建
  • fstype:文件系统的类型
  • opts:传递给mkfs命令的选项

(10)service
这里写图片描述
option:

  • arguments:给命令行提供一些选项
  • enabled:是否开机启动 【yes|no】
  • name:必选项,服务名称
  • runlevel:运行级别
  • sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
  • state:对当前服务执行【started|stopped|restarted|reloaded】等操作
  • pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行

(11)cron
这里写图片描述
option:

  • backup:对远程主机上的原任务计划内容修改之前做备份【yes|no】
  • cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划
  • day:(1-31,/2,……)
  • hour:(0-23,/2,……)
  • minute:(0-59,/2,……)
  • month:(1-12,/2,……)
  • weekday:(0-7,*,……)
  • job:要执行的任务,依赖于state=present
  • name:任务描述 Description of a crontab entry
  • state:【present|absent】
  • user:以哪个用户的身份执行
  • special_time:指定执行时间参数:
    【reboot|yearly|annually|monthly|weekly|daily|hourly 】
    (11)group
    Ansible基本部署&&常用模块_第20张图片
    (12)user
    http://docs.ansible.com/ansible/user_module.html
    其他常用模块,就不一一例举,可以结合自身的系统环境进行测试。
    更多模块参考:
    http://www.ansible.cn/docs/
    http://docs.ansible.com/ansible/modules.html
    http://docs.ansible.com/ansible/modules_by_category.html

你可能感兴趣的:(automation)