ansible基础

简介

ansible是一个简单的it自动化工具,可以实现批量进行系统配置,软件部署和运行命令等功能。基于python语言实现,由于paramiko和PyYaml两个模块构成。

Ansible与Saltstack最大的区别是Ansible无需在被控主机部署任何客户端代理,默认直接通过SSH通道进行远程命令执行或下发配置

ansible架构图

ansible基础_第1张图片
模块 功能
connection plugins 远程连接插件
hosts 定义管理主机或主机组
modules 包含各个核心模块及自定义模块
Plugin 完成模块功能的补充,如日志插件、邮件插件等
Playbook ansible的任务配置文件,将多个任务定义在剧本中进行管理

安装ansible

默认ansible在epel源中

yum install ansible -y

[root@localhost ~]# ansible --version  #查看ansible版本
ansible 2.2.1.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides

生成文件

可以查看生成的文件

rpm -ql ansible 

由于文件太多可以只看前20行的

程序文件

/etc/ansible #ansible主程序

/usr/bin/ansible-doc #ansible文档查看器

/usr/bin/ansible-galaxy #你可以把他理解成ansible的pip,可以从galaxy.ansible.com下载官方收录的playbooks

/usr/bin/ansible-playbook#playbook就是 用这个跑的

/usr/bin/ansible-pull #支持直接从git下载playbook执行,需要遵循其规定的目录格式。

/usr/bin/ansible-vault # 如果你的配置文件中含有敏感信息,你可能并不希望他能被人看到,vault可以帮你加密/解密这个配置文件

配置文件

/etc/ansible/ansible.cfg #ansible主配置文件

/etc/ansible/hosts # ansible主机列表

ansible配置文件加载顺序:

Ansible配置文件是以ini格式存储配置数据的,在Ansible中,几乎所有的配置项都可以通过Ansible的playbook或环境变量来重新赋值。在运行Ansible命令时,命令将会按照预先设定的顺序查找配置文件,如下所示:

  1. ANSIBLE_CONFIG:首先,Ansible命令会检查环境变量,及这个环境变量将指向的配置文件。
  2. /ansible.cfg:接着ansible会检查当前目录下的./ansible.cfg文件
  3. ~/.ansible.cfg:接着检查当前用户home目录下的.ansible.cfg文件
  4. /etc/ansible/ansible.cfg:最后会检查/etc/ansible/ansible.cfg
    注意:如果你通过发行版的提供的软件包管理工具(yum之类的)或者pip安装的ansible,那么在你的/etc/ansible目录下已经有了ansible.cfg配置文件,如果你是通过GitHub仓库安装的,在你复制的仓库中examples目录下可以找到ansible.cfg,你可以把它拷贝到/etc/ansible目录下。

配置选项

可以使用环境变量的方式来进行配置:
大多数的ansible参数都可以通过使用带有ANSIBLE_开头的环境变量进行配置,参数名称必须都是大写字母。比如:

 export ANSIBLE_SUDO_USER=root 

设置了环境变量之后,ANSIBLE_SUDO_USER就可以在playbook中直接引用。

ansible.cfg配置参数

inventory

这个参数表示资源清单inventory文件的位置,资源清单就是一些Ansible需要连接管理的主机列表。这个参数的配置实例如下:

inventory = /etc/ansible/hosts

library

Ansible的操作动作,无论是本地或远程,都使用一小段代码来执行,这小段代码称为模块,这个library参数就是指向存放Ansible模块的目录。配置实例如下:

library = /usr/share/ansible

Ansible支持多个目录方式,只要用冒号(:)隔开就可以,同时也会检查当前执行playbook位置下的./library目录。

forks

设置默认情况下Ansible最多能有多少个进程同时工作,从Ansible 1.3开始,fork数量默认自动设置为主机数量或者潜在的主机数量,默认设置最多5个进程并行处理。具体需要设置多少个,可以根据控制主机的性能和被管节点的数量来确定,可能是50或100。默认值5是非常保守的值,配置实例如下:

forks = 5

sudo_user

这是设置默认执行命令的用户,也可以在playbook中重新设置这个参数。配置实例如下:

sudo_user = root

remote_port

这是指定连接被管节点的管理端口,默认是22。除非设置了特殊的SSH端口,不然这个参数一般是不需要修改的。配置实例如下:

remote_port = 22

host_key_checking

这是设置是否检查SSH主机的密钥。可以设置为True或False,配置实例如下:

host_key_checking = False

timeout

这是设置SSH连接的超时间隔,单位是秒。配置实例如下:

timeout = 60

log_path

Ansible系统默认是不记录日志的,如果想把Ansible系统的输出记录到日志文件中,需要设置log_path来指定一个存储Ansible日志的文件。配置实例如下:

log_path = /var/log/ansible.log

另外需要注意,执行Ansible的用户需要有写入日志的权限,模块将会调用被管节点的syslog来记录,口令是不会出现在日志中的。

ansible命令参数

ansible [options]

-m MODULE_NAME, --module-name=MODULE_NAME     要执行的模块,默认为 command  
-a MODULE_ARGS, --args=MODULE_ARGS      模块的参数  
-u REMOTE_USER, --user=REMOTE_USER ssh      连接的用户名,默认用 root,ansible.cfg 中可以配置
-k, --ask-pass      提示输入 ssh 登录密码,当使用密码验证登录的时候用     
-s, --sudo      sudo 运行
-U SUDO_USER, --sudo-user=SUDO_USER     sudo 到哪个用户,默认为 root
-K, --ask-sudo-pass     提示输入 sudo 密码,当不是 NOPASSWD 模式时使用
-B SECONDS, --background=SECONDS       run asynchronously, failing after X seconds(default=N/A)
-P POLL_INTERVAL, --poll=POLL_INTERVAL      set the poll interval if using
-B (default=15)
-C, --check     只是测试一下会改变什么内容,不会真正去执行
-c CONNECTION   连接类型(default=smart)
-f FORKS, --forks=FORKS     fork 多少个进程并发处理,默认 5
-i INVENTORY, --inventory-file=INVENTORY      指定hosts文件路径默认 default =/etc/ansible/hosts
-l SUBSET, --limit=SUBSET       指定一个 pattern,对已经匹配的主机中再过滤一次
--list-hosts        只打印有哪些主机会执行这个 playbook 文件:不是实际执行该 playbook
-M MODULE_PATH, --module-path=MODULE_PATH       要执行的模块的路径,默认为/usr/share/ansible/
-o, --one-line      压缩输出,摘要输出
--private-key=PRIVATE_KEY_FILE      私钥路径
-T TIMEOUT, --timeout=TIMEOUT   ssh 连接超时时间,默认 10 秒
-t TREE, --tree=TREE            日志输出到该目录,日志文件名会以主机名命名
-v, --verbose   verbose mode (-vvv for more, -vvvv to enable connection debugging)

配置登录

ansible使用ssh登录,所以要在两者之间配置秘钥登录,这样才能开始正常的工作

免密登录

ssh-keygen -t rsa -P ""#生成秘钥/root/.ssh/id_rsa.pub

ssh-copy-id -i ./.ssh/id_rsa.pub [email protected] #将公钥传到172.16.254.105上

实现了master与其他节点之间的连接

定义ansible节点

[testgroup]  #服务器组名,统一管理用
172.16.254.103 # 节点地址

执行who查看信息

[root@localhost ~]# ansible testgroup -m command -a 'who' #组
172.16.254.103 | SUCCESS | rc=0 >>
root :0 2017-09-10 13:40 (:0)
root pts/0 2017-09-10 13:41 (:0)
root pts/1 2017-09-19 10:58 (gateway)
root pts/2 2017-09-19 14:48 (172.16.254.105)

[root@localhost ~]# ansible all -m command -a 'who'  #所有
172.16.254.103 | SUCCESS | rc=0 >>
root     :0           2017-09-10 13:40 (:0)
root     pts/0        2017-09-10 13:41 (:0)
root     pts/1        2017-09-19 10:58 (gateway)
root     pts/2        2017-09-19 14:49 (172.16.254.105)

[root@localhost ~]# ansible 172.168.x.x -m command -a 'who' #单个ip的

为更好的规范定义的主机与组变量,我们实际是不会在hosts里直接写的,将定义的主机名与组变量单独剥离出来放到指定的文件中,将采用YAML格式存放,存放位置规定:"/etc/ansible/group_vars/名"和"/etc/ansible/host_vars/主机名"分别存放指定组名或主机名定义的变量,如/etc/ansible/group_vars/mysql.yml

你可能感兴趣的:(ansible基础)