Ansible是日常工作中经常用到的一款软件,尤其是一些命令需要同时在多台服务器上运行时,Ansible是必不可少的。准备写几篇文章对Ansible做一个系列的介绍,主要涵盖工作中常用的场景,力求简洁实用。这篇文章是开头。Ansible是一个配置管理工具,与Salt、Chef、Puppet具有相同的功能。对于系统管理员来说,通常有很多工作需要为服务器安装软件、更改配置等。如果有两台或三台服务器,可以单独登录并执行安装和配置命令。如果有几十台或几百台服务器,可能不够用。这时候就需要Ansible等配置管理工作的帮助。您可以像管理一台服务器一样管理数百或数千台服务器。想想都舒服。一、工作原理Ansible是基于Python的paramiko模块开发的(paramiko模块是一个纯Python的SSH协议实现),Ansible通过SSH协议将自己的模块推送到托管服务器,执行后自动删除退出。这些模块是实现特定功能的代码(不限于Python代码实现)。其实只要能够以json格式返回需要的格式即可,对实现模块的语言没有要求。一句话,Ansible依靠paramiko实现的SSH协议,将实现特定功能的模块推送到目标服务器执行,完成后删除退出。2、相关概念模块:实现具体功能的代码,ansible会安装,也可以自己实现。Plug-ins:模块功能的补充,包括连接插件、邮件插件等。Playbook:即脚本。对于一些复杂的安装和维护任务,比如有很多依赖的安装配置,可以使用Playbook脚本。Inventory:定义了Ansible管理的主机,Ansible只能感知配置到Inventory文件中的服务器。3、安装配置(1)安装Ansible很多Linux发行版的包管理工具中都内置了Ansible。我使用的系统是CentOS7.9(Python版本3.6.8)。可以使用“yuminstallansible”安装,但是包管理工具安装的版本一般都比较旧。这里使用pip命令安装。需要注意的一件事是不再维护Python2.7。这里使用Python3来安装Ansible。python3-mpipinstallansible这样就完成了管理主机的Ansible安装。虽然托管主机不需要像Salt一样安装agent,但是SSH和Python还是需要的。如果没有,记得安装它。(2)Configureansible.cfg:Ansible配置文件,可以在里面写入一些默认选项。inventory:包含需要管理的服务器信息,比如下面的。[db]192.168.52.128[web]192.168.52.131192.168.52.1324.命令使用Ansible主要有两个使用场景。简单的命令执行可以不用“playbook.yaml”文件直接运行“ansible”命令,比如Findservercurrentload。在执行命令之前,配置被管理主机的SSH免密码登录,可以省去很多工作。使用上面的清单文件。[aneirin@aansible]$ansible-iinventoryweb-mcommand-auptime192.168.52.131|改变|rc=0>>15:52:368:38,2个用户,平均负载:0.46、0.83、0.66192.168.52.132|改变|rc=0>>15:52:37up8:40,2users,loadaverage:0.14,0.43,0.35ansible命令参数包含两部分:“-iinventoryweb”指定要操作的对象是web清单文件中的主机组;“-mcommand-auptime”,使用命令模块,模块参数为“uptime”。这个一般在工作中使用,创建一个工作目录:ansible-tasks,在该目录下创建如下文件。[aneirin@hostansible-tasks]$tree.├──ansible.cfg└──hosts0目录,2个文件ansible.cfg:[aneirin@hostansible-tasks]$catansible.cfg[defaults]host_key_checking=Falseinventory=hosts上面的命令可以这样运行:“ansibleweb-auptime”,因为命令模块是ansible默认的模块,不用写,只写参数即可。最后用类似git的版本管理工具管理Ansible的工作目录“ansible-tasks”,方便回滚。
