韩佳辰 白君芬
摘要:分析研究了Ansible技术的工作原理、体系架构以及在网络系统运维中的应用优势。同时,通过实例阐述了如何在Linux内核下合理使用Ansible技术对企业网络进行自动化运维管理,为大数据下的自动化运维技术的进一步发展提供了研究思路并起到了一定的借鉴作用。
关键词:Ansible;架构;脚本;Linux;自动化运维
中图分类号:TP393 文献标识码:A
文章编号:1009-3044(2022)31-0071-03
随着大数据时代的来临,企业网络中的应用系统慢慢增大,不同的应用系统需要的运行环境、Web服务器、数据库以及运行维护方式等都会不同,网络系统异构性大。另外,随着虚拟化技术的成熟[1],企业内的IT建设速度激增,需要运维的网络设备也越来越多,这都加大了企业网络系统运行和维护工作的难度,因此原有的依靠人力或者脚本进行网络系统运维的方式已无法满足企业需求,而自动化运维技术Ansible不仅可以批量完成网络系统运维任务,降低人力成本,而且运维的效率和可靠性极高,因此Ansible技术在网络系统建设与运维中具有独特的优势和潜力[2-3]。
1 Ansible技术概述
Ansible是基于Python语言开发的一款轻量级自动化运维工具,它默认采用SSH(Secure Shell) 安全外壳协议的方式管理客户端,在主控端部署Ansible环境,通过SSH远程管理被控主机(节点)。Ansible提供了各种模块对客户端进行批量管理,包括执行命令、安装软件、执行特定任务等。与其他运维软件相比,Ansible具有以下应用优势:
1) 部署简单,只需在主控端部署Ansible环境,被控端无须做任何操作。默认通过SSH协议对设备进行管理,配置简单,功能强大,扩展性强。
2) 支持API及自定义模块,可通过Python轻松扩展,通过Playbook(脚本)来定制强大的配置、状态管理。
3) 对云计算平台、大数据有很好的支持。提供一个功能强大、可操作性强的Web管理界面和REST API接口—AWX接口。
4) Ansible中的配置文件和脚本都是使用YAML语言编写的,作为专门用来编写配置文件的YAML语言,其功能强大,方便读写。
1.1 Ansible技术原理
Ansible技术是基于模块工作的,真正具有批量部署能力的是它所运行的模块。Ansible架构主要包括核心引擎、主机清单、核心模块、自定义模块、脚本、插件、连接插件模块[4-5]。Ansible架构如图1所示。
其中:主机清单模块负责定义Ansible的主机策略;核心模块负责执行特定任务或匹配一个特定状态;自定义模块负责对Ansible进行扩展;脚本模块定义Ansible任务的文件,可以将多个任务定义在一个脚本文件中,由Ansible执行;插件模块用于补充模块功能,完成记录日志、邮件等功能;连接插件模块负责实现各个主机的连接,实现与被管节点通信[3,6]。
1.2 Ansible对各种类型主机的管理
Ansible可以同时管理搭建了Red Hat系列Linux系统、Debian系列Linux系统与Windows系统的主机,如图2所示。
2 Ansible技术运用
2.1 Ansible安装
1) 安装前的准备工作
在安装之前准备3台主机,主机信息如表1所示。
在表1示例中,localhost主機是Ansible的管理机,Ansible1与Ansible2是被管理的远程主机(节点),安装Ansible时只在管理机(192.168.175.141) 安装即可,需要注意的是在安装之前需要关闭防火墙与SELinux(强制访问控制系统)。
2) 使用yum install命令安装Ansible
①主机中安装包含Ansible软件包的EPEL源,命令如下:
[root@localhost~]# yum install epel-release
②安装Ansible,命令如下:
[root@localhost~]# yum-y install ansible
2.2 配置SSH无密码登录
使用ssh-keygen与ssh-copy-id两个命令来设置Linux主机SSH无密码登录,其中,ssh-keygen生成一对密钥(公钥和密钥);ssh-copy-id把本地主机的公钥复制到目标主机上,并对远程的用户目录设置合适的权限。
1) 生成一对密钥。在localhost主机,使用ssh-keygen命令生成一对密钥,命令如下:
[root@localhost~]# ssh-keygen -t rsa
2) 将公钥下发到远程主机。使用ssh-copy-id命令将公钥下发到节点,命令如下:
[root@localhost~]# ssh-copy-id root@192.168.175.135
3) 保管私钥。公钥下发完毕后,使用ssh-add命令将私钥交由192.168.175.135管理,命令如下所示:
[root@localhost~]# ssh-add.ssh/id_rsa
再执行命令[root@localhost~]# ssh 192.168.175.135,验证配置是否成功,如果能直接无密码进入目标主机,就说明SSH无密码登录配置成功,再以同样的方式配置另一台192.168.175.136主机。
2.3 Ansible应用实例
编写ansible脚本(playbook) ,实现httpd(代理服务器) 角色,代码如下:
#创建角色相关的目录
mkdir -pv /data/ansible/roles/httpd/{tasks,handlers,files}
#创建角色相关的文件
cd /data/ansible/roles/httpd/
vim tasks/main.yml
- include: group.yml
- include: user.yml
- include: install.yml
- include: config.yml
- include: index.yml
- include: service.yml
vim tasks/user.yml
- name: create apache user
user: name=apache system=yes shell=/sbin/nologin home=/var/www/ uid=80 group=apache
vim tasks/group.yml
- name: create apache group
group: name=apache system=yes gid=80
vim tasks/install.yml
- name: install httpd package
yum: name=httpd
vim tasks/config.yml
- name: config file
copy: src=httpd.conf dest=/etc/httpd/conf/ backup=yes
notify: restart
vim tasks/index.yml
- name: index.html
copy: src=index.html dest=/var/www/html/
vim tasks/service.yml
- name: start service
service: name=httpd state=started enabled=yes
vim handlers/main.yml
- name: restart
service: name=httpd state=restarted
#在playbook中调用角色
vim /data/ansible/role_httpd.yml
# httpd role
- hosts: websrvs
remote_user: root
roles:
- httpd
#运行playbook
ansible-playbook /data/ansible/role_httpd.yml
3 Ansible技术应用方面的问题及解决方法
3.1 Ansible技术应用方面的问题
Ansible技术的应用都是使用命令在节点上执行任务,而命令使用起来比较复杂,同时每执行一次任务都需要重复输入,这种命令代码难于重用和分享的局域性,会导致重复工作和效率低的问题。 针对此类问题,Ansible技术提供了playbook脚本和role角色来用于实现代码重用和分享。
3.2 解决方法
3.2.1 playbook腳本
playbook脚本即一个可以被 Ansible执行的YAML文件,用户通过ansible命令直接调用yml语言编写的playbook,playbook是由一条或多条“play”组成的列表,每条play都有一个任务(task) 相对应的操作,任务调用模块modules,应用在主机清单上,通过ssh远程连接,控制远程主机或者网络设备,playbook脚本包含以下3个基本部分。
1) 指定节点和用户
因为每一个playbook都需要指定针对哪些节点进行运维,并且以哪个用户来执行任务,所以这就需要指定节点和用户,指定节点使用hosts关键字,指定用户使用users关键字。
2) 任务列表
任务列表即要执行的任务的队列,指定任务列表的关键字为tasks。任务列表中的每个任务都通过调用 Ansible模块完成,任务按预先定义的先后顺序执行。
3) Handlers
Handlers也是通过对Ansible模块进行调用,实现处理某些动态事件。Handlers中的模块调用与任务列表中的任务不同,任务默认按定义顺序执行,而Handlers只有在被触发时才会执行。
显而易见,playbook脚本通过对Ansible模块进行调用,就可以实现代码的重复使用和分享。
3.2.2 role角色
role是Ansible中的一个非常重要的角色,它可以重复使用一组文件,实现更完整的功能。role是Ansible引入的新特性,用于结构化、层次性地组织playbook。roles能够根据层次型结构自动装载tasks、变量文件以及handlers等。要使用roles只需要在playbook中使用include指令即可。简而言之,roles就是通过分别将文件、变量、模块、任务及处理器放置于单独的目录中、并可以便捷地include它们的一种机制。role角色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中。例如:在安装配置Linux平台使用最广泛的Web服务Apache服务器时,既需要安装、启动、复制模板等任务,也需要生成httpd.conf和index.html的模板文件,以及定义handlers来实现重启。这些任务、配置文件、handlers都可以放在一个role中,形成一套完整的功能,以供不同的playbook使用。
同时,Ansible不仅大力支持在playbook中使用role,而且提供了一个分享role的平台Ansible Galaxy(https://galaxy.ansible.com) ,在这个网站上,用户可以上传自己的role,也可以下载别人的role来使用,因此能够很好地提高运维效率。
4 结束语
Ansible是基于安全性、高可靠性设计的轻量级自动化运维工具,功能强大,部署便捷,简单易学,因此应用前景广泛。随着云计算的不断发展,越来越多的互联网公司需要对企业服务器进行自动化部署与运维,最终实现配置管理、服務及时开通、应用部署和流程编排等目的,针对传统数据中心逐渐过渡为云数据中心,以及对云数据中心中大量服务进行更快速地部署,更准确地服务状态监控的需求,就必须要在具有配置管理和远程执行的能力基础上,提供各种工具来管理服务器的基础架构,从而帮助企业快速构建虚拟化环境下的数据中心,提高服务运维的效率,保障服务运行的质量。
参考文献:
[1] 王晓天.基于虚拟化技术的云数据中心构建及自动化运维管理[J].软件工程,2020,23(11):27-29.
[2] 李沁蔓.基于Ansible的服务器自动化运维技术研究与实现[J].电子设计工程,2020,28(13):23-26,31.
[3] 李湘林,向全,韦美雁,等.基于Ansible自动化运维系统批量部署LAMP架构的设计与实现[J].大众科技,2021,23(3):1-4.
[4] 沈尚博,袁泉.基于Ansible的自动化运维工具设计与实现[J].信息与电脑(理论版),2020,32(1):120-122.
[5] 刘佳,高琪琪,刘飘,等.基于Ansible的自动化部署与运维[J].河南科技,2020(26):14-16.
[6] 隋利锋,曾庆辉.大规模服务器环境下自动化运维探索[J].当代金融家,2022(5):150-151.
【通联编辑:王力】
收稿日期:2022-08-09
作者简介:韩佳辰(2004—) ,女,河南滑县人,本科在读,主要研究方向为计算机应用及自动化技术;白君芬(1974—) ,女,河北石家庄人,副教授,硕士,主要研究方向为网络安全及计算机类教育。