[图片上传失败...(image-fb4cba-1588146034160)]
前言
纵观现在的服务器从以前闭源的管理系统,如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
DMTF
的Redfish®
是一个标准API
,旨在为融合、混合IT
和软件定义数据中心(SDDC
)提供简单和安全管理。
在Redfish
出现之前,现代数据中心环境中缺乏互操作管理标准。随着机构越来越青睐于大规模的解决方案,传统标准不足以成功管理大量简单的多节点服务器或混合基础设施。IPMI
是一种较早的带外管理标准,仅限于“最小公共集”命令集(例如,开机/关机/重启、温度值、文本控制台等),由于供应商扩展在所有平台上并不常见,导致了客户常用的功能集减少。许多用户开发了自己的紧密集成工具,但是也不得不依赖带内管理软件。
而对于企业级用户来说,设备都是上千台,其需要统一的管理界面,就要对接不同供应商的API
。当基本IPMI
功能已经不太好满足大规模Scale-out
环境时,如何以更便捷的方式调用服务器高级管理功能就是一个新的需求。
为了寻求一个基于广泛使用的工具来加快发展的现代接口,现如今,客户需要一个使用互联网和web
服务环境中常见的协议、结构和安全模型定义的API
。
Redfish
可扩展平台管理API
(The Redfish Scalable Platforms Management API
)是一种新的规范,其使用RESTful
接口语义来访问定义在模型格式中的数据,用于执行带外系统管理 (out of band systems management
)。其适用于大规模的服务器,从独立的服务器到机架式和刀片式的服务器环境,而且也同样适用于大规模的云环境。
Redfish
的第1
版侧重于服务器,为IPMI-over-LAN
提供了一个安全、多节点的替代品。随后的Redfish
版本增加了对网络接口(例如NIC
、CNA
和FC HBA
)、PCIe
交换、本地存储、NVDIMM
、多功能适配器和可组合性以及固件更新服务、软件更新推送方法和安全特权映射的管理。此外,Redfish
主机接口规范允许在操作系统上运行应用程序和工具,包括在启动前(固件)阶段与Redfish
管理服务沟通。
在定义Redfish
标准时,协议与数据模型可分开并允许独立地修改。以模式为基础的数据模型是可伸缩和可扩展的,并且随着行业的发展,它将越来越具有人类可读性定义。
Redfish应用场景
可能上面那一大段晦涩的介绍描述让你难以理解Redfish
的用处,简而言之,如今大多数服务器厂商(比如Supermicro
、Dell
等等)都会自带IPMI
系统,这个系统是独立装在主板芯片上,用户可以通过浏览器远程控制服务器,比如开关、装系统、进入服务器终端等等,而不用跑到机房忍受过高或过低的温度、忍受服务器嘈杂的声音、忍受蹩脚的显示器……
传统的IPMI
是带来了很多的便捷,但是当服务器规模变大后,单一服务器的管理已经满足不了需求,用户期望能够批量管理服务器,比如笔者想一次性给100
个服务器安装系统,并且这100
个服务器并不都是同一厂商,不同厂商的IPMI
操作都不一样,比如Dell
是iDRAC
,你还需要专门学习iDRAC
使用和各种对接,这会带来很多困扰。而Redfish
标准的出现彻底改变这种情况,它是凌驾于所有服务器之上的一个标准,对服务器的基本操作都是统一的,并且是基于Restful API
的方式实现。所以客户可以利用ansible
等工具轻松实现自动化批量管理大规模服务器。
服务器供应商都希望成为Redfish
生态系统的一份子,但他们不想放弃对自家的服务器的管控机制。因此,他们会在Redfish
规定范围之外,持续强化其API
支持的功能,比如Dell
的Redfish
接口就要比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接口可以浏览参考文章
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联动
[图片上传失败...(image-95de2d-1588146034160)]
参考文章
Supermicro Redfish Reference Guide