在本文中,我将解释如何将 Redfish 和 Ansible 结合使用,以便在一个中心位置大规模地完全自动化系统管理任务,从而显著降低复杂性并帮助提高 IT 管理员的工作效率。
Redfish 是由分布式管理任务组 (DMTF) 发布的一项开放的行业标准规范,专为现代和安全地管理平台硬件而设计。 在 Dell EMC PowerEdge 服务器上,Redfish 管理 API 可通过集成式 Dell 远程访问控制器 (iDRAC) 获得,iDRAC 是一种带外管理控制器,用于远程管理服务器上的所有硬件组件。 IT 管理员可以使用 iDRAC 上的 Redfish API 执行所有生命周期管理任务。 而且,由于可以通过 HTTPS 发送统一资源标识符 (URI) 来访问这些 API,因此管理员可以选择不同的工具,例如命令行界面 (CLI) 或 Web 浏览器,并从任何设备(例如笔记本电脑或移动设备)进行连接。
Ansible 是一个开源自动化引擎,用于运行包括安装软件和配置应用程序在内的任务。 它是一种一对多的无代理机制,可以从一台控制机器调用和监视重复的部署任务。 因为所有指令都通过 YAML 或 JSON 文件指定,所以 Ansible 比 shell 脚本更容易学习,也更容易被具有不同技术背景的 IT 人员采用。 与其他流行的配置管理工具相比,Ansible 是安装和配置最简单的。
通过 iDRAC 进行带外管理
iDRAC 在多个服务器代系中都支持诸如 IPMI、SNMP 和 WS-MAN 等传统协议。 除了这些协议之外,工具 RACADM (Dell EMC OpenManage 的一部分)易于使用,是 iDRAC 管理的一个不错的选择;但是,随着硬件复杂性(包括网络和存储设备)的指数级增长,带外管理的复杂性也随之增加。 虽然安全性一直是一个主要问题,但如今它变得更加重要。 Redfish 规范是为了满足这些需求而创建的,旨在简化和整合对各种硬件的管理,同时提供最大的安全性。
使用 Redfish
可以通过发送 URI 以及用户凭据,通过 Redfish API 查询 iDRAC。 一种简单的方法是使用 curl CLI 命令。 此示例查询 iDRAC 以获取服务器的总体运行状况。
$ curl -s https://<idrac-ip>/redfish/v1/Systems/System.Embedded.1 \
-k -u root:password | jq .Status.Health
"OK"
Redfish 返回的所有数据均为 JSON 格式,因此我们需要解析以获取所需的信息。 在本例中,我使用 jq 解析器提取我想要的信息。
下一个示例查询 iDRAC 以获取服务器的 CPU 信息。
$ curl -s https://<idrac-ip>/redfish/v1/Systems/System.Embedded.1 \
-k -u root:password | jq .ProcessorSummary.Model
"Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz"
这些简单的示例说明了使用 PowerEdge iDRAC 中可用的 Redfish API 从服务器收集信息是多么容易。
使用 Ansible
Ansible 指令在称为剧本的 YAML 文件中指定。 虽然完整的剧本教程超出了本文的范围,但此通用示例显示了剧本是多么直观。
- name: daily system admin tasks
hosts: my_100_servers
tasks:
- user: name=hacker state=absent remove=yes
- yum: name=* state=latest
- file: path=/etc/motd state=absent
调用剧本时,这些命令在 /etc/ansible/hosts 中定义的变量 my_100_servers 指定的 100 台服务器中运行。 要执行的任务是:删除 hacker 用户,使用 yum 更新所有软件包,并删除文件 /etc/motd。 因为 Ansible 剧本定义了期望的状态,所以可以在服务器上多次运行剧本而不会影响其状态。 如果已实现某个任务(例如,“用户 hacker 不存在”),则剧本会简单地忽略它并继续执行。
虽然大多数 Ansible 用例通过 SSH 与主机通信(尽管也支持其他方法,如 PowerShell 远程处理),但带外管理实现通过 HTTPS 与主机(或者更确切地说,与主机的 iDRAC)通信。
iDRAC + Redfish + Ansible = 安全、可扩展且自动化的服务器管理
下图说明了所有内容如何协同工作以提供自动化的、可扩展的带外管理解决方案。

opensource.com
1. Ansible 剧本定义了我们想要从 iDRAC 获取的信息。 在此示例中,我们要求提供当前功耗。 然后构建一个特定的 Redfish URI 并将其发送到所有 iDRAC。
2. iDRAC 接收 URI,调用相应的 Redfish API 来收集数据或执行任务,然后以 JSON 格式发回响应。
3. Ansible 控制机器以 JSON 格式接收数据,解析它以获取特定信息,并且可以调用脚本以格式化它以便导入到电子表格中或存储在数据库中。
开发
实现此解决方案的 Ansible 剧本和模块托管在项目的 GitHub 页面上。 请注意,并非所有功能都已实现,但开发仍在进行中。 欢迎提出 pull 请求和功能请求。
如果您想了解更多信息,请加入 Jose Delarosa,参加 2017 年 10 月 23 日举行的 Open Source Summit Europe 2017。 在他的演示文稿 使用 Ansible 和 Redfish 实现自动化的带外管理会话中,他将分享有关使用开源工具和开放行业标准来实现可扩展的、自动化的带外系统管理的更多详细信息。
评论已关闭。