- 首页
- 正文
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模式