liujjun 发表于 2018-7-30 11:04:45

自动化批量部署工具Ansible笔记之ansible安装与Inventory文件

  自动化批量部署工具Ansible笔记之ansible安装与Inventory文件
  一、ansible简介
  ansible是一款自动化运维部署工具,与saltstack,pupet等不同的是,ansible没有采用C/S的架构,即没有客户端与服务端之分。这也就意味着,ansible的安装更加方便,管理节点更加灵活(任何一台安装了ansible的机器都可以充当管理节点)。
  ansible提供了丰富的模块来方便的完成管理任务,对于复杂的管理任务来说,ansible通过编写playbook的方式来批量执行。而且ansible也可以并发的执行操作,可以同时在多台机器上执行playbook中的各个任务。
  对了,顺便说一句,ansible是基于ssh协议来实现的。
  二、ansible安装部署
  你可以访问ansible的github来找到ansible的源码,地址:https://github.com/ansible/ansible
  安装ansible时,并不会在你的机器上安装一个数据库或者任何的守护程序,你只需要很方便的在一台可以远程管理你的主机的机器上安装ansible就可以了,甚至可以是一台笔记本电脑。
  ansible管理节点的主机要求:
  1、python2.6或python2.7
  2、管理节点不支持windows系统
  3、适用系统包括Red Hat,CentOS,Debian,OS X,以及BSD系列的系统
  ansible被管理节点的主机要求:
  被管理节点需要安装python2.4以上的版本,但是如果python的版本低于python2.5的话需要安装依赖包python-simplejson(试用yum方式安装即可)
  注意:
  1、ansible的“raw”模块和“script”模块不需要python-simplejson,所以你可以使用这两个模块来安装这个文件;
  2、如果你在远程管理节点上开启了SElinux,那么在你使用“copy/file/template”功能前,要安装libselinux-python包,你可以用ansible的yum模块来安装这个包;
  3、在默认没有安装python2.X而是安装了python3.X的系统上,你可以自己安装python2.X版本,然后通过设置ansible_python_interpreter环境变量来指定你安装的python2.6的路径。
  在管理节点上安装ansible:
  本文在CentOS 6.5系统上通过yum方式安装ansible且机器上已经安装了epel源,其他系统安装方式请参照官方文档。
    # yum -y install ansible  ansible配置文件中常用的配置项:
  
inventory      = /etc/ansible/hosts    //指定hosts文件路径,文件中记录了被管理节点以及其分组
  
sudo_user      = root      //指定sudo用户为root
  
timeout = 10      //指定ssh的超时时间,该值适当改大一些,避免ssh超时引起的错误
  三、ansible命令常用选项
  ansible命令格式:
  ansible <主机组> [选项] [-m 模块名称] [-a 参数]
常用选项如下:  
-v, --verbose
  冗长模式,输出更多的成功任务信息
  

  
-i PATH, --inventory=PATH
  指定默认的inventory文件路径,默认为/etc/ansible/hosts
  

  
-f NUM, --forks=NUM
  并发数,此处的NUM应该被设定为一个整数,默认为5
  

  
--private-key=PRIVATE_KEY_FILE
  设置默认的ssh链接认证的文件
  

  
-m NAME, --module-name=NAME
  指定模块名称
  

  
-M DIRECTORY, --module-path=DIRECTORY
  指定寻找模块的路径,默认路径在/usr/share/ansible。这个功能也可以通过设置环境变量ANSIBLE_LIBRARY来实现
  

  
-a 'ARGUMENTS', --args='ARGUMENTS'
  传递给模块的参数
  

  
-k, --ask-pass
  提示输入ssh登录密码
  

  
-K, --ask-sudo-pass
  提示输入sudo密码
  

  
-o, --one-line
  单行输出
  

  
-s, --sudo
  使用-u选项指定的用户执行命令和sudo到root用户(翻译的有点问题)
  

  
-t DIRECTORY, --tree=DIRECTORY
  将输出的内容保存到指定的目录下,文件以主机地址的形式被保存在该目录下
  

  
-T SECONDS, --timeout=SECONDS
  连接主机的超时时间
  

  
-B NUM, --background=NUM
  在后台运行命了,超过该选项设置的时间后杀死任务
  

  
-P NUM, --poll=NUM
  每NUM秒检查后台运行的任务,需要-B选项
  

  
-u USERNAME, --user=USERNAME
  使用该远程用户名替换当前的用户名
  

  
-U SUDO_USERNAME, --sudo-user=SUDO_USERNAME
  从root用户sudo到该选项指定的用户
  

  
-c CONNECTION, --connection=CONNECTION
  连接类型,可选的类型有paramiko(SSH),ssh和local。local最常用于crontab和kickstarts
  

  
-l SUBSET, --limit=SUBSET
  进一步限制被选择的主机/主机组模式
  

  
-l ~REGEX, --limit=~REGEX
  使用正则表达式进一步限制主机
  

  
--list-hosts
  列出匹配到的所有主机,不执行任何操作
  四、Inventory文件
  ansible通过inventory文件来获取操作的主机,默认情况下,该文件被存储在/etc/ansible/hosts。而且可以同时使用多个inventory文件,或者动态的获取inventory文件。
  1、主机和主机组
  如下是一个inventory文件的内容,内容具有INI风格:
  
192.168.1.125
  
192.168.1.126
  

  

  
192.168.1.10
  
www.example.com
  
192.168.1.12:3300
  其中,“[]”内的内容是组名,其下为各主机的IP或域名,同一主机可以同时放在不同的组中,其后可以指定端口号。
  当有大量的主机名类似的主机时,可以不用一条一条添加,可以如下所示来添加:
  
www.example.com
  上述方法可以一次添加50台机器。除了使用数字范围外,还可以使用字母范围。比如:
  
db-.example.com
  在inventory文件中可以指定每台主机的链接类型和链接用户:
  
10.1.1.1ansible_connection=local
  
10.1.1.2ansible_connection=sshansible_ssh_user=test
  2、主机变量
  在inventory文件中可以为每台主机指定变量,变量可以用于playbook中:
  
host1http_port=80
  
host2http_port=8088
  3、主机组变量
  如果某个主机组中所有主机都需要指定相同的变量,即可使用主机组变量,使用:vars后缀可以使变量生效:
  
host1
  
host2
  

  

  
ntp_server=ntp.example.com
  
proxy=proxy.example.com
  4、主机组的组,和组变量
  可以将主机组再放入另一个组中使用:children后缀来组成新的组,也可以使用变量:
  
host1
  
host2
  

  

  
host2
  
host3
  

  

  
testserver
  
webserver
  

  

  
system_timeout=30
  (本文部分翻译自ansible官方文档,如有翻译不准的地方烦请指正!)
页: [1]
查看完整版本: 自动化批量部署工具Ansible笔记之ansible安装与Inventory文件