声明:这是我在大学毕业后进入第一家互联网工作学习的内容
我从自动化运维入门开始,第一个学习的自动化工具就是ansible。
百度解释
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
- 连接插件connection plugins:负责和被监控端实现通信;
- host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
- 各种模块核心模块、command模块、自定义模块;
- 借助于插件完成记录日志邮件等功能;
- playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
个人理解
用通俗的话来解释,ansbile可以分组,每个组里添加目标机器ip,通过密钥或者密码连接成功组里的机器后,你就可以用ansbile命令操作每个组的机器了。对于大规模的机器群来说,ansbile是必不可少的运维工具。
ansbile的特点:
- 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
- 默认使用SSH协议对设备进行管理;
- 有大量常规运维操作模块,可实现日常绝大部分操作;
- 配置简单、功能强大、扩展性强;
- 支持API及自定义模块,可通过Python轻松扩展;
- 通过Playbooks来定制强大的配置、状态管理;
- 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
- 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。
当然你可能不需要用到ansbile所有功能,以下是我认为实战中ansbile用的最爽的几个点:
- 配置管理:将配置文件批量放到你指定组的机器某一目录下,或者指定路径后一次性修改指定组的机器该路径下的配置文件
- 应用部署:如java应用编译好成jar包,ansbile直接将jar包分发到指定组的机器某一目录下,执行启动命令
- 滚动发布:有人可能会问了,ansible也能滚动发布?其实只要了解滚动发布的原理,用ansbile一样可以做到。例如在生产环境利用负载均衡分发流量到底层存在多个运行java应用的实例中,那么滚动更新就是先控制一台组里的机器,杀进程,启动新的jar包,监控jar包启动成功等,如果这台组里的机器成功,则让后续组里的机器继续更新,否则终止。
开始ansible之旅
安装ansible
两种安装方式都行
- pip安装
yum install python-pip
pip install ansible
- yum安装
yum install epel-release -y
yum install ansible –y
安装完成后执行ansible --version
[root@localhost ~]# ansible --version
ansible 2.9.7
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
配置ansible
默认配置文件
配置文件路径在/etc/ansible
[root@localhost ansible]# pwd
/etc/ansible
[root@localhost ansible]# ll
total 24
-rw-r--r--. 1 root root 19985 Apr 19 05:24 ansible.cfg
-rw-r--r--. 1 root root 1016 Apr 19 05:24 hosts
drwxr-xr-x. 2 root root 6 Apr 19 05:24 roles
修改ansible.cfg
将以下几个参数的注释去掉并修改
host_key_checking= False
timeout = 30 增加ssh的超时时间
log_path = /var/log/ansible.log 存日志
主机清单
ansible有2种连接主机清单的方式
基于密码连接
[root@localhost ansible]# vim /etc/ansible/hosts
#添加两个组dev、test
[dev]
172.31.22.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
172.31.22.33 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
172.31.22.35 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
[test]
172.31.24.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
172.31.24.33 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
172.31.24.35 ansible_ssh_