ansible安装部署及测试

(1)下载pip

进入https://pypi.python.org/pypi/pip,下载第二项。

(2)解压安装

解压下载的文件(windows下只用解压工具解压如RAR,Linux下终端输入tar -xf pip-9.0.1.tar.gz,即tar -xf 文件名),进入解压后的文件夹中,调出命令行窗口或者终端,windows下输入

python setup.py install
·         1

Linux下输入

sudo python setup.py install
·         1

安装成功后测试下,输入

pip -V
·         1

搞定!

 

一、Ansible工作机制

从图中可以看出ansible分为以下几个部份:

1> Control Node:控制机器
2> Inventory:主机清单,配置管理主机列表
3> Playbooks:剧本、任务编排。根据规则定义多个任务,模块组织结构清晰,由ansible自动执行。
4> Modules(Core | Custom):模块,用于执行某个具体的任务

5> connection plugin(连接插件):Ansible通过不同的协议连接到远程主机上,执行指定的命令。默认采用ssh协议连接远程主机。

二、Ansible执行流程


简单理解就是Ansible在运行时,首先读取ansible.cfg中的配置,根据规则获取Inventory中的管理主机列表,并行的在这些主机中执行配置的任务,最后等待执行返回的结果。

三、安装Ansible

一台控制主机:192.168.0.202

三台管理主机:

  • 192.168.0.200
  • 192.168.0.201
  • 192.168.0.203

安装要求:

  • 控制服务器:需要安装 Python2.6/2.7
  • 管理服务器:需要安装 Python2.4 以上版本,若低于 Python2.5 需要安装 pythonsimplejson; 若启用了 selinux,则需要安装 libselinux-python。

本次安装基于CentOS7系统环境、Python2.7.5、root用户。

3.1、yum安装(推荐)

yum install epel-release

yum install ansible

·        1

·        2

3.2、pip安装

pip install ansible

·        1

注:pip方式安装不会在/etc/ansible目录下生成默认的相关配置文件

四、配置

控制主机:用于控制其它机器的主机
管理主机:被控制主机管理的主机

4.1、配置管理主机

vim /etc/ansible/hosts


在hosts文件中添加管理主机的IP地址列表:

4.2、配置控制主机SSH密钥

4.2.1、在控制主机中生成ssh密钥对

ssh-keygen -t rsa

·        1

一路回车即可在$HOME/.ssh目录下生成id_rsa和id_rsa.put私钥和公钥两个文件。

注: 如果在生成密钥的时候设置了密码,ansible每次执行命令的时候,都会提示输入密钥密码,可通过下面的命令记住密码。

ssh-agent bsh

ssh-add ~/.ssh/id_rsa

·        1

·        2

4.2.2、将公钥拷贝到管理主机中.ssh/authorized_keys文件中,实现免密码登录远程管理主机

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

·        1

·        2

·        3

注:ssh-copy-id命令会自动将id_rsa.pub文件的内容追加到远程主机root用户下.ssh/authorized_keys文件中。

4.2.3、ansible配置

vim /etc/ansible/ansible.cfg

·        1

1> 禁用每次执行ansbile命令检查ssh key host
host_key_checking = False

2> 开启日志记录
log_path = /var/log/ansible.log

3> ansible连接加速配置

[accelerate]

#accelerate_port = 5099

accelerate_port = 10000

#accelerate_timeout = 30

#accelerate_connect_timeout = 5.0

 

# If set to yes, accelerate_multi_key will allow multiple

# private keys to be uploaded to it, though each usermust

# have access to the system via SSH to add a new key. Thedefault

# is "no".

accelerate_multi_key = yes


五、测试

最后测试下在三台管理机器批量执行一个ping命令

 ansible all -mping

结果如下:

五、实例

[root@localhost ~]# ansible 192.168.1.98  -a "touch /mnt/file3"
[DEPRECATION WARNING]: ACCELERATE_TIMEOUT option, Removing accelerate as a
connection method, settings not needed either. . This feature will be removed
in version 2.5. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
[DEPRECATION WARNING]: ACCELERATE_MULTI_KEY option, Removing accelerate as a
connection method, settings not needed either. . This feature will be removed
in version 2.5. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
 [WARNING]: Consider using file module with state=touch rather than running
touch
 
192.168.1.98 | SUCCESS | rc=0 >>
 
 

注意参数 -a 后面用双引号或者单引号“”将命令引起来,即

常用模块:
!所有示例以webserver为匹配目标主机。
1.ping
ansible all -m ping
!检测机器是否可登录,ping模块不需要传送参数
!注:这里的ping模块并非调用了系统的ping命令,而是类似于登录到远程机器再echo出一个信息。

2.command
!可以执行任意命令,但不接受管道命令和重定向符号,如果想使用这些,则需要使用Shell模块。
ansible all -m command -a "ls" #在所有匹配主机上执行ls命令

playbook:
- name: test for command
command: ls

3.copy
#复制一个文件到远程服务器

ansible all -m copy -a "src=/tmp/text.txt dest=/home/tmp/"
#将本地text.txt文件复制到所有匹配主机的/home/tmp/路径下。

playbook:
- name: test for copy
copy: src=/tmp/text.txt dest=/home/tmp/ force=yes

4.file
这个模块这次构建系统中并没有用到,官方的解释是用来设置文件、文件夹或快链的属性,或者删除文件、快链、文件夹。
创建一个文件夹,如果目标不存在
ansible webservers -m file -a "path=/tmp/tdir state=directory mode=0755"
playbook
- name: create a directory if it doesn't exist
- file:
path: /etc/some_directory
state: directory
mode: 0755


5.get_url
!从服务器上下载一个文件到远程主机指定的目录
ansible webservers -m get_url -a "url='http://baidu.com dest=/tmp/ba.html"

playbook
- name: download foo.conf
get_url:
url: http://example.com/path/file.conf
dest: /etc/foo.conf
mode: 0440

6.yum
特别适用于批量安装一些依赖包的时候

ansible webservers -m yum -a "name=httpd state=latest"
ansible webservers -m yum -a "name=httpd state=absent" !删除包

playbook
- name: install the latest version of Apache
yum:
name: httpd
state: latest

7.service
控制远程服务器上的服务
ansible webservers -m service -a "name=nginx state=restart"
playbook
- name: restart rmote nginx
service: name=nginx state=restart

8.setup
收集远程服务器信息
ansible all -m setup
在playbook中,这项任务默认是执行的,不需要列出。                 

猜你喜欢

转载自blog.csdn.net/yizhixiaocaiji26/article/details/79452867