Ansible

2022-10-27 15:39:28 浏览数 (1)

安装

ansible需要epel源,需要先安装epel源

代码语言:javascript复制
yum install epel-release
yum install ansible

配置

配置ansible的主机清单列表,把受控主机的IP加入到清单中

代码语言:javascript复制
vim /etc/ansible/hosts

172.10.0.18

完成上面的配置后,使用下面的命令,去ping对应的主机,发现会报错。

172.10.0.18主机不可达,ansible是基于ssh的,ansible不知道172.10.0.18这台主机的用户名和密码,所以ansible无法连接到它。 我们可以在清单文件中加入对应主机的用户名和密码,也可以基于密钥的方式

  • 以用户名和密码的方式
代码语言:javascript复制
vim /etc/ansible/ansible.cfg
	host_key_checking = False	# 取消注释,关闭ssh key验证

vim /etc/ansible/hosts			# 配置服务器密码
172.10.0.18 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=22

受控主机的信息已经配置完毕,在执行下刚才的命令

命令成功执行

  • 以密钥的方式
代码语言:javascript复制
ssh-keygen			# 先在ansible主机上生成密钥
ssh-copy-id 172.10.0.18		# 在把公钥复制到受控主机上

在清单文件中,删除刚才配置的ssh信息,只保留IP地址即可,如果端口不是默认的22,还需要保留并修改端口配置。

优化

关闭gathering_facts

ansible-playbook的第一个步骤总是执行gathering facts,关闭之后,可以加快playbook的执行效率

代码语言:javascript复制
vim ansible-playbook.yml
---
- hosts: HOST
  gather_facts: no 		# 在playbook中添加此行

ssh pipelining

ssh pipelining是一个加速ansible执行速度的插件,ssh pipelining默认是关闭的,之所以默认关闭是为了兼容不同的sudo配置,主要是requiretty选项,如果不使用sudo,建议开启,打开此选项,可以减少ansible执行没有传输时ssh在被控机器上执行任务的连接数,不过,如果使用sudo,就必须关闭requiretty选项

代码语言:javascript复制
vim /etc/ansible/ansible.cfg
	pipelining = True 	# 改为True

显示playbook执行每一步所花费的时间

代码语言:javascript复制
1. 下载插件
https://github.com/jlafon/ansible-profile

2. 创建目录
在playbook目录下创建一个callback_plugins的目录,然后把下载的profile_tasks.py放到该目录下

3. 执行playbook
在执行playbook命令就会看到每一个tasks的执行时间

0 人点赞