- 首页
- 正文
ansible的安装和基本用法
如果你使用过 fabric
或者 paramiko
这些自动化工具,对于机器很少的时候,还是很方便的,但对于上百台以上机器来说,这些工具已经力不从心了,特别是对于机器的批量系统配置、批量程序部署、批量运行命令等等功能。这时就可以选择 ansible
、puppet
、chef
、salt
这些工具,下面来说一下 ansible
的一些原理及安装使用:
准备工作
控制主机 mac 10.13.3, ansible 安装的版本 2.4.1.0,python 的版本 Python 2.7.10
被管节点两台 Centos 7,第一台的 ip 为 11.11.11.11,第二台的 ip 为 22.22.22.22
Ansible、Puppet、Salt、Chef的区别
Chef
和 Puppet
是使用代理模式的,它们默认基于拉( pull
)方式。被管节点上安装代理后,代理服务将周期性检查中心控制主机的服务,并从控制主机上取来配置信息,Salt
和 Ansible
默认是基于推(push
) 方式的,Ansible
可以不用在被管节点上安装代理,Salt
则可以安装或者不用安装被管节点代理。这四个工具都具有各自的优缺点,而 Ansible
则是后起之秀,集其它几家的优点,并有自己的特点,如果想了解更多它们,可以点击 这里
原理
Ansible
管理系统由 控制主机
和 一组被管节点
组成。控制主机直接通过 SSH
控制被管节点,被管节点通过 Ansible
的资源清单(inventory
)来进行分组管理,Ansible
采用paramiko
协议库,通过 SSH
或者 ZeroMQ
等连接主机
Ansible
在控制主机将 Ansible模块
通过 SSH
协议推送到被管节点执行,执行完之后自动删除, 控制主机与被管节点之间支持 local
、SSH
、ZeroMQ
三种连接方式,默认
使用基于SSH
的连接
安装
Centos 7
sudo yum install epel-release
sudo yum install ansible
Ubuntu 14.04
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible
Mac 10.13.3
用 brew 安装
brew update
brew install Ansible
用 pip 安装
sudo easy_install pip
sudo pip install ansible
源码安装
下载 ansible-2.4.1.0-1 的 源码
解压 tar -zxvf v2.4.1.0-1
cd ansible-2.4.1.0-1
sudo python setup.py install
遇到的问题
build/temp.macosx-10.13-intel-2.7/_openssl.c:493:10: fatal error: 'openssl/opensslv.h' file not found
#include <openssl/opensslv.h>
^~~~~~~~~~~~~~~~~~~~
1 error generated.
error: Setup script exited with error: command 'cc' failed with exit status 1
这是上网找到的解决方案,在命令行上运行:
sudo brew install openssl
sudo env LDFLAGS="-L$(brew --prefix openssl)/lib" CFLAGS="-I$(brew --prefix openssl)/include" pip install cryptography
sudo pip install --upgrade pip
ansible.cfg 的简单配置
ansible 的配置将从下面这四个地方依次地去搜索:
ANSIBLE_CONFIG
:首先,Ansible命令会检查环境变量,及这个环境变量将指向的配置文件./ansible.cfg
:其次,将会检查当前目录下的ansible.cfg配置文件~/.ansible.cfg
:再次,将会检查当前用户home目录下的.ansible.cfg配置文件/etc/ansible/ansible.cfg
:最后,将会检查在用软件包管理工具安装Ansible时自动产生的配置文件
下面说一下几个常用的配置:
inventory = /etc/ansible/hosts
# 资源清单inventory文件的位置,也可以指向一个目录forks = 5
# 设置多少个进程同时工作sudo_user = root
# 设置默认执行命令的用户remote_port = 22
# 连接被管节点的管理端口host_key_checking = False
#这是设置是否检查SSH主机的密钥roles_path = /etc/ansible/roles
# 角色的文件搜索路径log_path = /var/log/ansible.log
# 日志文件timeout = 10
# 设置SSH连接的超时间隔private_key_file=~/.ssh/id.rsa
# 设置 ssh 的私钥
说明:
如果是用源码安装的,可以在源码的 example 目录找到 ansible.cfg
和 hosts
等等配置,可以把 ansible.cfg 复制到上面四个路径的其中一个
资源清单inventory
几个常用的参数:
ansible_ssh_host
# 代表 ssh 的地址ansible_ssh_user
# 代表 ssh 的认证用户ansible_ssh_pass
# 代表 ssh 的认证密码ansible_sudo
# 代表 ssh sudo 的用户ansible_sudo_pass
# 代表 ssh sudo 的密码ansible_ssh_private_key_file
# 代表 ssh 私钥
/etc/ansible/hosts 的简单例子:
常用参数
[test_group]
11.11.11.11 ansible_ssh_user=user1 ansible_ssh_pass=password
22.22.22.22
定义别名和常用参数
[test_group]
test ansible_ssh_host=11.11.11.11 ansible_ssh_user=user1 ansible_ssh_pass=password
22.22.22.22
分组包含分组
[test_group1]
11.11.11.11 ansible_ssh_user=user1 ansible_ssh_pass=password
[test_group2]
22.22.22.22
[dbserver:children]
test_group1
test_group2
说明:
如果使用 ansible_ssh_pass
,要安装 sshpass
测试能否显示上面两台被管节点的home目录的文件
复制 ansible 源码下 example 目录的 ansible.cfg
文件 到 /etc/ansible
cp ansible.cfg /etc/ansible/
修改 /etc/ansible/ansible.cfg
文件的内容,把下面内容前面的 # 去掉
inventory = /etc/ansible/hosts
forks = 5
remote_port = 22
timeout = 10
在 /etc/ansible/
目录添加 hosts
文件,内容如下:
[webserver]
11.11.11.11
22.22.22.22
显示被管节点的 home
目录的文件
ansible -m shell -a "ls /home" webserver -u test
说明:
-m 代表模块,-a 代表模块参数,webserver 代表资源清单的一个组,-u 代表用哪个用户登录,我这里是使用密钥无密码登录的方式,我们也可以使用 -i
来指定资源清单的路径
【上一篇】sed进阶
【下一篇】ansible的ad-hoc模式