Linux内核下Ansible自动化运维技术的研究与应用

作者: 韩佳辰 白君芬

Linux内核下Ansible自动化运维技术的研究与应用0

摘要:分析研究了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 [email protected]

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使用。

上一篇 点击页面呼出菜单 下一篇