设为首页 收藏本站
查看: 1581|回复: 0

[经验分享] Ansible基本部署&&常用模块

[复制链接]

尚未签到

发表于 2015-11-25 15:22:59 | 显示全部楼层 |阅读模式
  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、总体架构

DSC0000.jpg

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、任务执行流程

DSC0001.jpg

说明:

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

下载以下软件包准备编译安装

DSC0002.jpg

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

DSC0003.jpg

将python头文件拷贝到标准目录,以避免编译ansible时,找不到所需的头文件

DSC0004.jpg

修改yum脚本,使其指向旧版本的python,已避免其无法运行


[iyunv@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


[iyunv@DQ ansible]# tar xf setuptools-7.0.tar.gz -C /usr/src/
[iyunv@DQ ansible]# cd /usr/src/setuptools-7.0/
[iyunv@DQ setuptools-7.0]# python setup.py install
  (3)pycrypto模块安装

https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz


[iyunv@DQ ansible]# tar xf pycrypto-2.6.1.tar.gz -C /usr/src/
[iyunv@DQ ansible]# cd /usr/src/pycrypto-2.6.1/   
[iyunv@DQ pycrypto-2.6.1]# python setup.py install
  (4)PyYAML模块安装

http://pyyaml.org/download/libyaml/yaml-0.1.5.tar.gz


[iyunv@DQ ansible]# tar xf yaml-0.1.5.tar.gz -C /usr/src/
[iyunv@DQ ansible]# cd /usr/src/yaml-0.1.5/
[iyunv@DQ yaml-0.1.5]# ./configure --prefix=/usr/local   
[iyunv@DQ yaml-0.1.5]# make        
[iyunv@DQ yaml-0.1.5]# make install
  https://pypi.python.org/packages/source/P/PyYAML/PyYAML-3.11.tar.gz


[iyunv@DQ ansible]# tar xf PyYAML-3.11.tar.gz -C /usr/src
[iyunv@DQ ansible]# cd /usr/src/PyYAML-3.11/
[iyunv@DQ PyYAML-3.11]# vim README
[iyunv@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


[iyunv@DQ ansible]# tar xf MarkupSafe-0.9.3.tar.gz -C /usr/src
[iyunv@DQ ansible]# cd /usr/src/MarkupSafe-0.9.3/
[iyunv@DQ MarkupSafe-0.9.3]# vim README.rst
[iyunv@DQ MarkupSafe-0.9.3]# python setup.py install
[iyunv@DQ ansible]# tar xf Jinja2-2.7.3.tar.gz -C /usr/src
[iyunv@DQ ansible]# cd /usr/src/Jinja2-2.7.3/
[iyunv@DQ Jinja2-2.7.3]# vim README.rst
[iyunv@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


[iyunv@DQ ansible]# tar xf ecdsa-0.11.tar.gz -C /usr/src
[iyunv@DQ ansible]# cd /usr/src/ecdsa-0.11/
[iyunv@DQ ecdsa-0.11]# vim README.md
[iyunv@DQ ecdsa-0.11]# python setup.py install
[iyunv@DQ ansible]# tar xf paramiko-1.15.1.tar.gz -C /usr/src/
[iyunv@DQ ansible]# cd /usr/src/paramiko-1.15.1/
[iyunv@DQ paramiko-1.15.1]# vim README
[iyunv@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


[iyunv@DQ ansible]# tar xf simplejson-3.6.5.tar.gz -C /usr/src
[iyunv@DQ ansible]# cd /usr/src/simplejson-3.6.5/
[iyunv@DQ simplejson-3.6.5]# vim README.rst
[iyunv@DQ simplejson-3.6.5]# python setup.py install  
  (8)ansible安装

https://github.com/ansible/ansible/archive/v1.7.2.tar.gz


[iyunv@DQ ansible]# tar xf ansible-1.7.2.tar.gz -C /usr/src
[iyunv@DQ ansible]# cd /usr/src/ansible-1.7.2/
[iyunv@DQ ansible-1.7.2]# vim README.md
[iyunv@DQ ansible-1.7.2]# python setup.py install
DSC0005.jpg

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


[iyunv@Node1 ~]# ssh-keygen -t rsa
[iyunv@Node2 ~]# ssh-keygen -t rsa
[iyunv@Node3 ~]# ssh-keygen -t rsa
  在管理机上将自己的公钥拷贝到集群节点机上


[iyunv@DQ ~]# ssh-copy-id -i .ssh/id_rsa.pub root@10.33.100.77
[iyunv@DQ ~]# ssh-copy-id -i .ssh/id_rsa.pub root@10.33.100.88
[iyunv@DQ ~]# ssh-copy-id -i .ssh/id_rsa.pub root@10.33.100.99
  (2)复制模板配置文件到/etc/ansible/下,并指定集群节点机的认证文件

DSC0006.jpg

DSC0007.jpg

(3)主机组定义:所有的远程主机需要在hosts中配置,可以分组;当然hosts也可以执行时指定

DSC0008.jpg

(4)简单测试

ansible命令最常用的用法:


[iyunv@DQ ~]# ansible --help
Usage: ansible <host-pattern> [options]
Options:
-a MODULE_ARGS, --args=MODULE_ARGS
  -m MODULE_NAME, --module-name=MODULE_NAME
  说明:第一次运行时,需要输入一下“yes”【进行公钥验证】,后续无需再次输入

DSC0009.jpg

ansible所支持的模块可以使用如下命令来查看  

DSC00010.jpg

3、常用模块

(1)setup

DSC00011.jpg

DSC00012.jpg

(2)ping  

DSC00013.jpg

(3)file

DSC00014.jpg

option:

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

DSC00015.jpg

查看上一步创建的链接文件

DSC00016.jpg

远程文件符号链接删除

DSC00017.jpg

链接文件成功删除

DSC00018.jpg

(4)mount

DSC00019.jpg

option:

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

DSC00020.jpg

(5)yum

DSC00021.jpg

option:

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

(6)copy

DSC00023.jpg

option:

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

DSC00024.jpg

(7)command

option:

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

切换到某个shell执行指定的指令,参数与command相同

DSC00025.jpg

示例:远程执行上面copy到node上的脚本

DSC00026.jpg

示例:远程执行命令

DSC00027.jpg

与command不同的是,shell模块可以支持命令管道,同时另一个模块raw也具备此功能

DSC00028.jpg

(9)filesystem

DSC00029.jpg

option:

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

DSC00030.jpg

option:

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

DSC00031.jpg

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

    DSC00032.jpg

    (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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-143524-1-1.html 上篇帖子: ansible 自动化安装apache 下篇帖子: ansible的安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表