Redfish 下一代数据中心管理标准详解和实践

纵观现在的服务器从以前闭源的管理系统,如 DELL 的 OpenManage 和 iDRAC,华为的 iBMC,惠普的 OneView 和 iLO,联想的 XClarity 和 XClarity Controller 嵌入式管理,IMM2(收购自 IBM 的 SystemX PC Server 系列)等等,都在积极拥抱开源自动化工具如 Ansible 等开源软件,在这种情况下被称作下一代数据中心管理标准的 Redfish 出现了。

更新历史

2020 年 04 月 28 日 – 初稿

阅读原文 – https://wsgzao.github.io/post/redfish/

Redfish 简介

DMTF’s Redfish® is a standard designed to deliver simple and secure management for converged, hybrid IT and the Software Defined Data Center (SDDC). Both human readable and machine capable, Redfish leverages common Internet and web services standards to expose information directly to the modern tool chain.

https://www.dmtf.org/standards/redfish

DMTFRedfish® 是一个标准 API ,旨在为融合、混合 IT 和软件定义数据中心( SDDC )提供简单和安全管理。

Redfish 出现之前,现代数据中心环境中缺乏互操作管理标准。随着机构越来越青睐于大规模的解决方案,传统标准不足以成功管理大量简单的多节点服务器或混合基础设施。 IPMI 是一种较早的带外管理标准,仅限于 “最小公共集” 命令集(例如,开机 / 关机 / 重启、温度值、文本控制台等),由于供应商扩展在所有平台上并不常见,导致了客户常用的功能集减少。许多用户开发了自己的紧密集成工具,但是也不得不依赖带内管理软件。

而对于企业级用户来说,设备都是上千台,其需要统一的管理界面,就要对接不同供应商的 API 。当基本 IPMI 功能已经不太好满足大规模 Scale-out 环境时,如何以更便捷的方式调用服务器高级管理功能就是一个新的需求。

为了寻求一个基于广泛使用的工具来加快发展的现代接口,现如今,客户需要一个使用互联网和 web 服务环境中常见的协议、结构和安全模型定义的 API

Redfish 可扩展平台管理 APIThe Redfish Scalable Platforms Management API )是一种新的规范,其使用 RESTful 接口语义来访问定义在模型格式中的数据,用于执行带外系统管理 ( out of band systems management )。其适用于大规模的服务器,从独立的服务器到机架式和刀片式的服务器环境,而且也同样适用于大规模的云环境。

Redfish 的第 1 版侧重于服务器,为 IPMI-over-LAN 提供了一个安全、多节点的替代品。随后的 Redfish 版本增加了对网络接口(例如 NICCNAFC HBA )、 PCIe 交换、本地存储、 NVDIMM 、多功能适配器和可组合性以及固件更新服务、软件更新推送方法和安全特权映射的管理。此外, Redfish 主机接口规范允许在操作系统上运行应用程序和工具,包括在启动前(固件)阶段与 Redfish 管理服务沟通。

在定义 Redfish 标准时,协议与数据模型可分开并允许独立地修改。以模式为基础的数据模型是可伸缩和可扩展的,并且随着行业的发展,它将越来越具有人类可读性定义。

Redfish 应用场景

可能上面那一大段晦涩的介绍描述让你难以理解 Redfish 的用处,简而言之,如今大多数服务器厂商(比如 SupermicroDell 等等)都会自带 IPMI 系统,这个系统是独立装在主板芯片上,用户可以通过浏览器远程控制服务器,比如开关、装系统、进入服务器终端等等,而不用跑到机房忍受过高或过低的温度、忍受服务器嘈杂的声音、忍受蹩脚的显示器……

传统的 IPMI 是带来了很多的便捷,但是当服务器规模变大后,单一服务器的管理已经满足不了需求,用户期望能够批量管理服务器,比如笔者想一次性给 100 个服务器安装系统,并且这 100 个服务器并不都是同一厂商,不同厂商的 IPMI 操作都不一样,比如 DelliDRAC ,你还需要专门学习 iDRAC 使用和各种对接,这会带来很多困扰。而 Redfish 标准的出现彻底改变这种情况,它是凌驾于所有服务器之上的一个标准,对服务器的基本操作都是统一的,并且是基于 Restful API 的方式实现。所以客户可以利用 ansible 等工具轻松实现自动化批量管理大规模服务器。

服务器供应商都希望成为 Redfish 生态系统的一份子,但他们不想放弃对自家的服务器的管控机制。因此,他们会在 Redfish 规定范围之外,持续强化其 API 支持的功能,比如 DellRedfish 接口就要比 Supermicro 多很多,强大很多。

为什么选择 REST、HTTP 以及 JSON?

Redfish 将语言支持与普遍存在的 REST、HTTP 和 JSON 相结合,使 IT 管理任务能够与其他 IT 和 dev/ops 任务的技能集和工具链结合使用。随着云生态系统采用 REST,RESTful 协议正在迅速取代 SOAP,web API 接口也紧随其后。RESTful 协议比 SOAP 学习起来要快得多,而且它具有数据模式(因为 REST 严格来说不是协议)的简单性,可以直接映射到 HTTP 操作。

HTTP 以其常用的安全模型和网络配置为管理员所熟知。

JSON 正迅速成为现代数据格式。它本质上是人类可读的,比 XML 更简洁,拥有大量现代语言支持,是 web 服务 API 中增长最快的数据格式。

对于嵌入式可管理性环境,JSON 还有一个额外的优势:大多数基板管理控制器(BMC)已经支持 web 服务器,通过浏览器来管理服务器已经非常普遍(通常通过 Java 脚本驱动的接口)。通过在 Redfish 中使用 JSON,可以在浏览器中直接查看来自 Redfish 服务的数据,从而确保数据和编程接口在语义和价值上是一致的。

除了 REST、HTTP 和 JSON 之外,Redfish 还采用常见的 OData v4 约定来描述模式、URL 约定和命名,以及 JSON 有效负载中常见属性的结构。越来越多的通用客户端库、应用程序和工具生态系统使用 Redfish。

它有多简单? 下面显示了使用 Redfish 从服务器检索序列号的示例 Python 代码:此示例中的输出如下所示

rawData= urllib.urlopen(‘http://192.168.1.135/redfish/v1/Systems/1’) jsonData=json.loads(rawData)print(jsonData[‘SerialNumber’])

1A87CA442K

Redfish 实践

更多硬件厂商的 Redfish API 接口可以浏览参考文章

The python-redfish project

Python 环境 redfish 接口获取泰山服务器和鲲鹏 CPU 信息

pip install python-redfish

import redfish
 
login_host="https://10.93.20.10"
login_account="ADMIN"
login_password="ADMIN"
REDFISH_OBJ = redfish.redfish_client(base_url=login_host, username=login_account, password=login_password, default_prefix='/redfish/v1')
REDFISH_OBJ.login(auth="session")
response = REDFISH_OBJ.get("/redfish/v1/Systems/1", None)
print(response)
REDFISH_OBJ.logout()

基于 Redfish 你可以获取详细的硬件资产信息与 CMDB 联动