这篇文章将为大家详细讲解有关自动化运维工具SaltStack在云计算环境中的实践是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
随着云计算技术的快速普及与发展,越来越多的企业开始学习和搭建自己的云平台代替传统的 IT 交付模式,企业的 IT 环境也随之越来越复杂,常规的运维方法与技术已经无法满足现在云环境中系统的配置与变更。基于云计算的发展,大数据、认知技术及容器技术也在企业中得到了越来越多的应用,大量的服务器管理操作、配置变更被频繁的执行与部署,以应对多变的业务需求。按照常规的方式,运维人员需逐个服务器进行配置调整,手动管理大量的系统信息,难免有各种各样的问题及事故发生。为了避免这样的风险,本文的示例中,笔者将详细介绍如何使用开源软件 SaltStack 自动化运维工具对云环境中的服务器进行命令的远程执行及配置管理,确保操作的安全性及高效性,降低管理员的操作风险。
下面介绍的架构,主要是在 CentOS6.5 上进行集中部署与测试。该架构主要涉及到三 个开源软件,分别是 Python 软件集,SaltStack 软件集和 ZeroMQ 消息队列软件。
部署简单、管理方便;
支持大部分的操作系统,如 Unix/Linux/Windows 环境;
架构上使用C/S管理模式,易于扩展;
配置简单、功能覆盖广;
主控端(Master)与被控端(Minion)基于证书认证,确保安全可靠的通信;
支持 API 及自定义 Python 模块,轻松实现功能扩展;
SaltStack 采用 C/S 结构来对云环境内的服务器操作管理及配置管理。为了更好的理解它的工作方式及管理模型,本章将通过图形方式对其原理进行阐述。
SaltStack 客户端(Minion)在启动时,会自动生成一套密钥,包含私钥和公钥。之后将公钥发送给服务器端,服务器端验证并接受公钥,以此来建立可靠且加密的通信连接。同时通过消息队列 ZeroMQ 在客户端与服务端之间建立消息发布连接。具体通信原理图,如图 1 所示,命令执行如图 2 所示:
Minion 是 SaltStack 需要管理的客户端安装组件,会主动去连接 Master 端,并从 Master 端得到资源状态信息,同步资源管理信息。
Master 作为控制中心运行在主机服务器上,负责 Salt 命令运行和资源状态的管理。
ZeroMQ 是一款开源的消息队列软件,用于在 Minion 端与 Master 端建立系统通信桥梁。
Daemon 是运行于每一个成员内的守护进程,承担着发布消息及通信端口监听的功能。
Minion 是 SaltStack 需要管理的客户端安装组件,会主动去连接 Master 端,并从 Master 端得到资源状态信息,同步资源管理信息。
Master 作为控制中心运行在主机服务器上,负责 Salt 命令运行和资源状态的管理。
Master 上执行某条指令通过队列下发到各个 Minions 去执行,并返回结果。
下面让大家了解了什么是 SaltStack 以及它的通信及执行原理,。
为了让大家更好的理解 SaltStack 在云平台集中化管理方面的优势,因此,根据项目的实际情况绘制了部署架构图,并在文中对架构图进行了详细说明。如图 3 所示:
SaltStack 的所有被管理客户端节点(如图 3 所示 DB 和 Web),都是通过密钥进行加密通信,使用端口为 4506。客户端与服务器端的内容传输,是通过消息队列完成,使用端口为 4505。Master 可以发送任何指令让 Minion 执行,salt 有很多可执行模块,比如说 CMD 模块,在安装 minion 的时候已经自带了,它们通常位于你的 python 库中,locate salt | grep /usr/ 可以看到 salt 自带的所有东西。
为了更好的理解架构用意,以下将展示主要的命令发布过程:
软件名 | 功能 |
Python 2.6软件包 | Python主安装文件 |
PyYAML软件包 | SaltStack 配置解析定义语法 |
Msgpack-python | SaltStack 消息交换库 |
Jinjia2 | SaltStack states 配置模版 |
MarkupSafe | python Unicode 转换库 |
Apache-libcloud | SaltStack 对云架构编排库 |
ZeroMQ | SaltStack 消息系统 |
Pyzm | ZeroMQ python 库 |
PyCryto | Python 密码库 |
M2Cryto | Openssl Python 包装库 |
Requests | HTTP Python 库 |
为了方便依赖包的安装,本章将采用 YUM 的方式进行安装。
首先下载并安装 epel 源,执行以下指令,将 epel.repo 存储到/etc/yum.repos.d 目录下。
wget –o /etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-6.repo
并通过 Yum list 命令来校验安装源是否生效,如出现图 4 所示,则表明Yum源已经生效。
安装完成后,输入 chkconfig salt-master on 将 master 服务加入到开机启动项,这样每次系统启动,都会自动加载 master 服务。输入 service salt-master start 启动 master 服务。之后通过 netstat –antp 查询服务状态,结果如图 6 所示。
安装完成后,输入 chkconfig salt-minion on,将 minion 服务加入到开机启动项,这样每次系统启动,都会自动加载 minion 服务。输入 service salt-minion start,启动 minion 服务。之后通过 netstat –antp 查询服务状态,结果如图 8 所示。
到目前为止,SaltStack 的安装工作已经完成,Master 和 Minion 主机服务都已经正确开启,端口服务正常。下一章将主要介绍如何配置 SaltStack,使其可以正常的提供各种功能。
SaltStack 的配置主要集中在 Master 主机端,客户端的配置较少,本章将通过以下两部分详细介绍。
SaltStack-Minion 是 SaltStack 安装在客户端的代理,负责接收服务器端发布的指令并执行,同时负责客户端的状态监控。客户端要想被 master 管理,需要修改其配置文件,将服务器指向到 Master 的地址。其配置文件位于/etc/salt/目录下,名为 minion,通过 vi 工具修改,如图 9 所示。
配置完成后,保存并通过 service salt-minon restart 命令重启 minion 服务。本次测试案例,并不需要其它高级功能的演示,所以客户端到此配置结束,更多功能的配置,请参考SaltStack 官方手册。
SaltStack-Master 是 SaltStack 组件的核心服务,负责发布指令及配置文件的分发与管理,及客户端的管理功能。Master 要想正常提供服务,需要接受客户端的证书认证请求。我们之前已经介绍过,SaltStack 是通过 SSL 证书认证的方式进行通信的。如图 10 所示操作,输入 salt-key –l 来查询客户端证书状态,并如图 11 所示操作,输入 salt-key –A 接受客户端认证。
从图中可以看到客户端被发现,但是处于未被接受状态,需要管理员执行图 11 所示指令,进行接受。
至此我们已经完成 SaltStack 的全部配置。
通过本章节中的两个测试案例,可以验证 SaltStack 是否运行正常,是否可以完成预定的功能。我们可以通过 salt '*' test.ping 来测试客户端是否在线,并被 master 管理,如图 12 所示,如果返回 True,则说明客户端已经被 master 管理,并处于在线状态。
接下来,我们将通过批量执行命令和批量安装软件,来测试 SaltStack 的部分功能。
在日常运维中,同时对多台服务器进行操作,是一个很平常的需求。比如批量执行 ping 操作,验证服务器是否在线,批量执行查询命令,看服务器的负载及利用率。如图 13 所示的指令为批量查询服务器操作系统的版本。
*代表对所有的被管理客户端进行操作,cmd.run 是命令调用模块,ifconfig 是具体的执行命令。
批量安装软件也是日常运维中的家常便饭,我们可以通过 SaltStack 的软件推送功能,对所管理的服务器进行进行相关软件的批量安装。如图 14 所示的指令为批量安装软件 lrzsz 在客户端服务器中。
如上图所示,lrzsz 软件被顺利的安装到了客户端服务器。 通过以上两个测试,可以验证 SaltStack 可以正常的为云平台提供集中化的管理与配置功能。
关于自动化运维工具SaltStack在云计算环境中的实践是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。