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

[email protected].$i

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的版本

相关推荐