【Liunx进阶操作】搭建和使用Ansible自动化运维工具

提示:为保证文章的正确性和实用性,文章内容可能会不定时优化改进,若您有建议或者文章存在错误请私信留言或评论指正。下面以CentOS7.9操作系统为例,介绍具体的操作步骤,如果本文对你有帮助,记得关注加收藏。


1、文章前言

Ansible是基于Python开发的一款模块化工作的开源自动化配置管理平台,基于其拥有的各种功能模块,实现了批量系统配置、批量程序部署、批量运行命令等功能,大大简化了集群模式主机的重复配置动作。
Ansible批量化管理的操作实际都是基于ssh完成的,因此它不需要在被管理的主机上安装Agent等插件,仅需要选择一台主机安装Ansible软件,创建密钥对并将公钥复制到被管理的主机上,并和被管理的主机配置免交互登录即可。
如果离线环境安装Ansible可先在本地安装一个同操作系统版本联网的虚拟机,参考下面步骤,将Ansible及其依赖包保存至本地后拷出放到离线环境中安装。

2、操作步骤

2.1、配置epel仓库

Ansible软件包存放在epel仓库,默认不在yum仓库中,因此需要先部署epel-release连接epel仓库后再安装Ansible。
步骤一: 执行以下命令,查看系统当前是否有“Base.repo”的yum源配置,因为“epel-release”软件包默认存放在“Base.repo”yum源中。如果有,则执行步骤三,如果没有则参考步骤二获取相应系统版本的“.repo”文件。

ll /etc/yum.repos.d/

1
步骤二: 点此跳转阿里开源镜像站,根据自己实际的系统版本号下载对应的“.repo”文件到系统“/etc/yum.repos.d/”目录下。
【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第1张图片
步骤三: 执行以下命令,清理并重新建立元数据缓存。

yum clean all
yum makecache

【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第2张图片
步骤三: 执行以下命令,安装epel-release软件。

yum install -y epel-release.noarch

【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第3张图片
步骤四: 执行以下命令,查看“/etc/yum.repos.d/”目录下是否已经有epel仓库的配置文件,如果有,则说明epel-release软件安装完成并成功配置epel仓库。

ll /etc/yum.repos.d/

5

2.2、获取&安装Ansible软件包

步骤一: 若只是安装Ansible软件,则执行以下本步骤命令安装即可。若需要将Ansible及其依赖包保存到节点目录下,则执行步骤二及以后步骤 。

yum install -y ansible

【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第4张图片【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第5张图片【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第6张图片【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第7张图片【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第8张图片
步骤二: 执行以下命令,创建软件包保存目录。

mkdir -p /home/Ansible_pkg

11
步骤三: 执行以下命令,检查Ansible及其依赖包并下载保存到“/home/Ansible_pkg”目录中。(downloadonly是yum的插件,若无法使用downloadonly参数请先执行yum -y install yum-download安装downloadonly插件)

yum install --downloadonly --downloaddir=/home/Ansible_pkg/ ansible

【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第9张图片【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第10张图片【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第11张图片
步骤四: 执行以下命令,进入home目录,打包压缩所有软件包并赋予完全权限后,通过WinSCP等FTP工具拷出即可。

cd /home/
tar -cvf Ansible_pkg.tar Ansible_pkg/
chmod 777  Ansible_pkg.tar

【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第12张图片
步骤五: 软件包拷入离线环境解压后,进入Ansible及其依赖包所在目录,执行以下命令,在离线环境操作系统中安装Ansible。

rpm -ivh *.rpm

【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第13张图片【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第14张图片

2.3、配置Ansible服务端

步骤一: 执行以下命令,编辑“/etc/ansible/hosts”文件,输入“i”进入编辑模式,如下图添加被管理主机IP,然后按“Esc”键退出编辑模式,按“Shift”+“:”键进入末行模式,输入”wq!“保存并退出。(在配置文件中加入需要被Ansible管理的主机,主机支持分组管理,后续对主机组的配置会生效在主机组内所有主机上)

vim /etc/ansible/hosts

【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第15张图片
步骤二: 执行以下命令,在Ansible主机上创建自己的SSH密钥对。

ssh-keygen -t rsa -C "Ansible-key"

【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第16张图片
步骤三: 执行以下命令,将Ansible主机的公钥,上传到被管理的主机上。

ssh-copy-id root@被管理主机IP

【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第17张图片
步骤四: 执行以下命令,启动SSH密钥管理器,并托管私钥,实现免密码短语登录被管理的主机。(Ansible主机重启后失效,需重新启动)

ssh-agent bash
ssh-add /root/.ssh/id_rsa

【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第18张图片

2.4、调用模块执行具体操作

如下介绍最常用到的几个模块的使用方法,若需了解所有模块和模块的使用方式,可参考下面两条命令,查看Ansible帮助文档。
列出ansible所有支持的模块:

ansible-doc -l

查看具体模块的详细帮助信息:

ansible-doc -s 模块名称

2.4.1、copy模块

功能: 从Ansible主机上复制文件到被管理的主机。

参数 说明
src 目录&文件 Ansible主机上的源目录或者文件
dest 目录&文件 源目录或者文件在被管理主机上的存放位置
owner 用户名 复制到被管理主机上的目录&文件的所属用户
group 用户组名 复制到被管理主机上的目录&文件的所属用户组
mode 644&755&777 复制到被管理主机上的文件的权限
backup yes&no 当被管理主机存放路径下存在数据不相同的同名文件时,是否备份该文件后再复制
content 文本&字符串 指定文本内容直接在受控主机中生成文件

使用方法: 如下:

ansible testservers -m copy -a 'src=/home/123.sh  dest=/home/123/ owner=test group=test mode=777 backup=yes'
ansible testservers -m copy -a 'dest=/home/123/321.sh content="你好 世界!!!" backup=yes'

【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第19张图片【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第20张图片

2.4.2、fetch模块

功能: 从被管理的主机上复制文件到Ansible主机。

参数 说明
src 文件 被管理主机上的文件
dest 目录 文件在Ansible主机上的存放位置
fail_on_missing yes&no 远程源文件缺失或因为某些原因导致不能读取时,是否将任务设置为失败状态
flat yes&no 改变文件的存放行为,默认为no。“dest”以“/”结尾时,flat=yes会直接将文件复制到“dest”所设置的目录,但当操作多个主机时,如果文件相同的话,则每个主机都会覆盖这个文件。

使用方法: 如下:

ansible testservers -m fetch -a 'src=/root/helloworld.sh  dest=/root/ fail_on_missing=yes flat=yes'
ansible testservers -m fetch -a 'src=/root/helloworld.sh  dest=/root/ fail_on_missing=yes flat=no'

【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第21张图片

2.4.3、command模块

功能: 在被管理的主机上执行命令,此模块为默认模块,但是不能识别“|”、“>”、“*”等特殊字符。

参数 说明
chdir 具体目录 执行命令前先进入到指定目录下
creates 目录&文件 如果存在指定目录或文件将不运行后面命令
removes 目录&文件 如果存在指定目录或文件将运行后面命令
free_form 命令 在远程主机中执行的命令,此参数可不加

使用方法: 如下:

ansible 172.22.30.14 -m command -a 'pwd'
ansible testservers -m command -a 'pwd'
ansible testservers -m command -a 'chdir=/home pwd'
ansible testservers -m command -a 'creates=/home hostname'
ansible testservers -m command -a 'removes=/home hostname'

【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第22张图片

2.4.4、shell模块

功能: 在被管理的主机上执行命令或远程主机上的shell脚本,能够识别“|”、“>”、“*”等特殊字符。

参数 说明
chdir 具体目录 执行命令前先进入到指定目录下
creates 目录&文件 如果存在指定目录或文件将不运行后面命令
removes 目录&文件 如果存在指定目录或文件将运行后面命令
free_form 命令 在远程主机中执行的命令,此参数可不加
executable sh&可执行文件的绝对路径 指定执行环境,默认为sh

使用方法: 如下:

ansible testservers -m shell -a 'ps -ef |grep -i ssh |grep -v grep'
ansible testservers -m shell -a 'chdir=/root sh helloworld.sh;ls /home'

26【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第23张图片

2.4.5、script模块

功能: 将Ansible主机中写好的脚本在受控主机中执行。
使用方法: 如下:

ansible testservers -m script -a '/root/helloworld.sh'

【Liunx进阶操作】搭建和使用Ansible自动化运维工具_第24张图片

3、总结

Ansible是一个在大规模主机或者集群模式下很好用的自动化执行工具,利用不同的模块实现不同的需求,诸如配置服务,修改配置文件,管理虚拟机、配置OpenStack 、docker管理等等,结合Python、Shell脚本完成批量配置。其安装配置并不复杂,但是若想更高效的利用起来,建议使用者有一定的编程基础,利用脚本结合Ansible完成更多复杂操作。

你可能感兴趣的:(Linux,运维,ansible,自动化)