前言

纵观现在的服务器从以前闭源的管理系统,如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代码:此示例中的输出如下所示

1
2
3
4
5
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信息

1
2
3
4
5
6
7
8
9
10
11
12
13
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联动

参考文章

DMTF’s Redfish

Redfish 融合、混合IT的简单和安全管理

Redfish 白皮书

Redfish:下一代数据中心管理标准

Redfish 详解

Supermicro Redfish Reference Guide

Redfish API with Dell integrated Remote Access Controller

华为服务器 iBMC Redfish 接口说明

文章目录
  1. 1. 前言
  2. 2. 更新历史
  3. 3. Redfish简介
  4. 4. Redfish应用场景
  5. 5. 为什么选择REST、HTTP以及JSON?
  6. 6. Redfish实践
  7. 7. 参考文章