前言
常用的自动化工具有:
ansible
saltstack
puppet
这三款都是自动化工具,可以用来提高运维管理效率,在这三款运维工具中目前主流的是ansible和saltstack。ansible和saltstack的区别在于ansible无需安装客户端,这也成为了ansible的一大优势;而saltstack则需要安装客户端,也可以不用安装,他们的适用场景也不一样,ansible适用于小型企业,管理较少的服务器时适用,saltstack则用于中大型企业,因为ansible无法并行执行saltstack则可以并行执行。但是这三款运维工具并不存在优劣,只是适用的场景的不同。
一、Ansible概述
1.1 Ansible介绍
Ansible是一个基于 Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。
1.2 Ansible能做什么
Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个操作,使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作。
Ansible是 基于模块工作 的,它只是提供了一种运行框架,它本身没有完成任务的能力,真正执行操作的是Ansible的模块 ,比如copy模块用于拷贝文件到远程主机上,service模块用于管理服务的启动、停止、重启等。
1.3 为什么选择Ansible
Ansible自2012年发布以来,没多久便在美国开始流行。快速被IT人员接受的原因较大方面得益于Michael DeHaan在美国IT圈的名气和影响力。随后它逐步在各国流行。而笔者选择Ansible的原因主要有如下几个方面:
Ansible完全基于Python开发,而DevOps在国内已然是一种趋势,Python被逐步普及,运维人员自己开发工具的门槛逐步降低,得益于此,方便对Ansible二次开发;
Ansible丰富的内置模块,甚至还有专门为商业平台开发的功能模块,近600个模块完全可以满足日常功能所需;
在Ansible去中心化概念下,一个简单的复制操作即可完成管理配置中心的迁移;
Agentless(无客户端),客户端无需任何配置,由管理端配置好后即可使用,这点非常诱人。在第10章会介绍如何部署配置Windows系统的主机端,用后会有深切的感受。
自Ansible发布后,也陆续被AWS、Google CloudPlatform、Microsoft Azure、Cisco、HP、VMware、Twitter等大公司接纳并投入使用。
1.4 两大特性
agentless:不需要额外安装客户端软件,只要在一台主机上安装anaible即可通过ash控制远程主机ansib1c是通过模块来执行操作的
幂等性;ansible很多模块在执行时会判断远程主机是否已执行过这个任务,如果已执行且操作没有发生任何改变,则不会再去执行改变结果
1.5 Ansible架构
Ansible 管理节点和远程主机节点间通过SSH协议进行通信。所以配置Ansible的时候,只需保证从Ansible 管理节点通过SSH协议能够连接到被管理的远程节点即可。注意,SSH必须配置为公钥认证登录方式,而非密码认证。
Ansible可以同时管理Red Hat系的Linux、Debian系的Linux以及Windows 主机。Ansible的工作原理如图所示。
二、部署Ansible
服务器类型 |
IP地址 | 需要安装的软件 |
Ansible管理服务器 | 192.168.109.138 | Ansible |
被管理客户端 | 192.168.109.131 | ------ |
被管理客户端 | 192.168.109.132 | ------ |
2.1 安装ansible服务
[root@localhost ~]#yum install -y epel-release [root@localhost ~]#yum install -y ansible [root@localhost ~]# cd /etc/ansible/ [root@localhost ansible]# ls ansible.cfg hosts roles ---------------------------------------------------------------- ansible.cfg # ansible的配置文件,一般无需修改 hosts # ansible的主机清单,用于存储需要管理的远程主机的相关信息 roles # 公共角色目录
2.2 配置主机清单
vim /etc/ansible/hosts [webservers] #配置组名 192.168.109.131 #组里包含的被管理主机IP地址或主机名(主机名需要先修改/etc/hosts文件) [dbservers] 192.168.109.132
2.3 配置密钥对验证
#生成密钥对(一路回车) ssh-keygen -t rsa #导入对方主机 ssh-copy-id root@192.168.109.131 ssh-copy-id root@192.168.109.132
2.4 设置免交互免密登录
vim /etc/ssh/ssh_config 35 StrictHostKeyChecking no systemctl restart sshd