Ansible 详细用法部署安装
摘要:absible部署安装
#一、概述
运维工具按需不需要有代理程序来划分的话分两类:
agent(需要有代理工具):基于专用的agent程序完成管理功能,puppet,func,zabbix
agentless(无须代理工具):基于ssh服务完成管理,ansible,fabric
#二、简介
Ansible是一个简单的自动化运维管理工具,基于Python语言实现,由Paramiko和PyYAML两个关键模块构建,可用于自动化部署应用、配置、编排task(持续交付、无宕机更新等)。主版本大概每2个月发布一次。
Ansible与Saltstack最大的区别是Ansible无需在被控主机部署任何客户端代理,默认直接通过SSH通道进行远程命令执行或下发配置:相同点是都具备功能强大、灵活的系统管理、状态配置,两者都提供丰富的模板及API,对云计算平台、大数据都有很好的支持。
1.特点
部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;默认使用SSH协议对设备进行管理;
主从集中化管理;
配置简单、功能强大、扩展性强;
支持API及自定义模块,可通过Python轻松扩展;
通过Playbooks来定制强大的配置、状态管理;
对云计算平台、大数据都有很好的支持;
提供一个功能强大、操作性强的Web管理界面和RESTAPI接口——AWX平台。
幂等性:一种操作重复多次结果相同
简评:
(1)、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
(2)、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
(3)、使用python编写,维护更简单,ruby语法过于复杂;
(4)、支持sudo。
2、Ansible架构图
QQ_20170524110419
Ansible核心组件说明:
Ansible:Ansible的核心程序
HostLnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载
Playbooks:YAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用那些模块来完成的功能.
CoreModules:Ansible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用coreModules中的模块,然后指明管理HostLnventory中的主机,就可以完成管理主机。
CustomModules:自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写。
ConnectionPlugins:连接插件,Ansible和Host通信使用
3、ansible执行过程,其中暖色调的代表已经模块化。
screenshot
三、基础环境的安装与配置
1、ssh免密登录配置一直回车
```ssh-keygen-N''
2、shell脚本复制到101-150服务器
```foriin`seq101150`
do
/usr/bin/expect<<EOF
expect{
"yes/no"{send"yes\r";exp_continue;}
"*password"{send"P@ssw0rd\r"}
}
expect"~$"
send"exit\r"
expecteof
EOF
done
3、安装Ansible环境及pssh环境包
sudosed-i-re's/\w+\.archive\.ubuntu\.com/archive.ubuntu.com/g'/etc/apt/sources.list
sudoapt-getupdate
sudowgethttp://www.theether.org/pssh/pssh-1.4.3.tar.gz#下载PSSH安装包
tarzxvfpssh-1.4.3.tar.gz
cdpssh-1.4.3
sudowget'http://peak.telecommunity.com/dist/ez_setup.py'
sudopythonez_setup.py
sudopythonsetup.pyinstall
sudoapt-getinstallsoftware-properties-common
sudoapt-add-repositoryppa:ansible/ansible
sudoapt-getinstallansible
4.配置文件
/etc/ansible/ansible.cfg
host_key_checking=False
5.主机清单
/etc/ansible/hosts
6.ansible命令的使用说明
常用选项
ansible-mMOD_NAME-aMOD_ARGS
表示调用什么模块,使用模块的那些参数
ansible-h
[root@localhost~]#ansible-h
Usage:ansible[options]
Options:
-aMODULE_ARGS,--args=MODULE_ARGS模块的参数,如果执行默认COMMAND的模块,即是命令参数,如:“date”,"pwd"等等
modulearguments模块参数
-k,--ask-passaskforSSHpassword登录密码,提示输入SSH密码而不是假设基于密钥的验证
--ask-su-passaskforsupasswordsu切换密码
-K,--ask-sudo-passaskforsudopassword提示密码使用sudo,sudo表示提权操作
--ask-vault-passaskforvaultpassword
-BSECONDS,--background=SECONDS后台运行超时时间
runasynchronously,failingafterXseconds
(default=N/A)
-C,--checkdon'tmakeanychanges;instead,trytopredictsome只是测试一下会改变什么内容,不会真正去执行;相反,试图预测一些可能发生的变化
ofthechangesthatmayoccur
-cCONNECTION,--connection=CONNECTION连接类型使用。可能的选项是paramiko(SSH),SSH和地方。当地主要是用于crontab或启动。
connectiontypetouse(default=smart)
-fFORKS,--forks=FORKS并行任务数。NUM被指定为一个整数,默认是5
specifynumberofparallelprocessestouse
(default=5)
-h,--helpshowthishelpmessageandexit打开帮助文档API
-iINVENTORY,--inventory-file=INVENTORY指定库存主机文件的路径,默认为/etc/ansible/hosts
specifyinventoryhostfile
(default=/etc/ansible/hosts)
-lSUBSET,--limit=SUBSET进一步限制所选主机/组模式--limit=192.168.91.135只对这个ip执行
furtherlimitselectedhoststoanadditionalpattern
--list-hostsoutputsalistofmatchinghosts;doesnotexecute
anythingelse
-mMODULE_NAME,--module-name=MODULE_NAME执行模块的名字,默认使用command模块,所以如果是只执行单一命令可以不用-m参数
modulenametoexecute(default=command)
-MMODULE_PATH,--module-path=MODULE_PATH要执行的模块的路径,默认为/usr/share/ansible/
specifypath(s)tomodulelibrary
(default=/usr/share/ansible/)
-o,--one-linecondenseoutput压缩输出,摘要输出.尝试一切都在一行上输出。
-PPOLL_INTERVAL,--poll=POLL_INTERVAL调查背景工作每隔数秒。需要-b
setthepollintervalifusing-B(default=15)
--private-key=PRIVATE_KEY_FILE私钥路径,使用这个文件来验证连接
usethisfiletoauthenticatetheconnection
-S,--surunoperationswithsu用su命令
-RSU_USER,--su-user=SU_USER指定SU的用户,默认是root用户
runoperationswithsuasthisuser(default=root)
-s,--sudorunoperationswithsudo(nopasswd)
-USUDO_USER,--sudo-user=SUDO_USERsudo到哪个用户,默认为root
desiredsudouser(default=root)
-TTIMEOUT,--timeout=TIMEOUT指定SSH默认超时时间,默认是10S
overridetheSSHtimeoutinseconds(default=10)
-tTREE,--tree=TREElogoutputtothisdirectory将日志内容保存在该输出目录,结果保存在一个文件中在每台主机上。
-uREMOTE_USER,--user=REMOTE_USER远程用户,默认是root用户
connectasthisuser(default=root)
--vault-password-file=VAULT_PASSWORD_FILE
vaultpasswordfile
-v,--verboseverbosemode(-vvvformore,-vvvvtoenable详细信息
connectiondebugging)
--versionshowprogram'sversionnumberandexit输出ansible的版本