原文地址:https://www.tony-yin.site/201…
本文介绍一下redfish
,被称为“下一代数据中心管理标准”,非常强大的一个玩意!
概述: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
的用处,简而言之,如今大多数服务器厂商(比如 Supermicro
、Dell
等等)都会自带 IPMI
系统,这个系统是独立装在主板芯片上,用户可以通过浏览器远程控制服务器,比如开关、装系统、进入服务器终端等等,而不用跑到机房忍受过高或过低的温度、忍受服务器嘈杂的声音、忍受蹩脚的显示器……
传统的 IPMI
是带来了很多的便捷,但是当服务器规模变大后,单一服务器的管理已经满足不了需求,用户期望能够批量管理服务器,比如笔者想一次性给 100
个服务器安装系统,并且这 100
个服务器并不都是同一厂商,不同厂商的 IPMI
操作都不一样,比如 Dell
是iDRAC
,你还需要专门学习 iDRAC
使用和各种对接,这会带来很多困扰。而 Redfish
标准的出现彻底改变这种情况,它是凌驾于所有服务器之上的一个标准,对服务器的基本操作都是统一的,并且是基于 Restful API
的方式实现。所以客户可以利用 ansible
等工具轻松实现自动化批量管理大规模服务器。
服务器供应商都希望成为 Redfish
生态系统的一份子,但他们不想放弃对自家的服务器的管控机制。因此,他们会在 Redfish
规定范围之外,持续强化其 API
支持的功能,比如 Dell
的Redfish
接口就要比 Supermicro
多很多,强大很多。
API 实践
环境信息
-
Dell iDRAC v3.30.30.30
(版本 >=v3.30.30.30
才能使用mount
相关API
)
查看 CD 挂载信息
Request
:
type:GET
headers: {'Content-Type': 'application/json'}
url: https://192.168.224.1/redfish/v1/Managers/iDRAC.Embedded.1/VirtualMedia/CD
basic auth: username/password
Response
:
不存在挂载信息:
{
"@odata.context": "/redfish/v1/$metadata#VirtualMedia.VirtualMedia",
"@odata.id": "/redfish/v1/Managers/iDRAC.Embedded.1/VirtualMedia/CD",
"@odata.type": "#VirtualMedia.v1_2_0.VirtualMedia",
"Actions": {
"#VirtualMedia.EjectMedia": {"target": "/redfish/v1/Managers/iDRAC.Embedded.1/VirtualMedia/CD/Actions/VirtualMedia.EjectMedia"},
"#VirtualMedia.InsertMedia": {"target": "/redfish/v1/Managers/iDRAC.Embedded.1/VirtualMedia/CD/Actions/VirtualMedia.InsertMedia"}
},
"ConnectedVia": "NotConnected",
"Description": "iDRAC Virtual Media Services Settings",
"Id": "CD",
"Image": null,
"ImageName": null,
"Inserted": false,
"MediaTypes": [
"CD",
"DVD"
],
"MediaTypes@odata.count": 2,
"Name": "Virtual CD",
"WriteProtected": null
}
存在挂载信息:
{
"@odata.context": "/redfish/v1/$metadata#VirtualMedia.VirtualMedia",
"@odata.id": "/redfish/v1/Managers/iDRAC.Embedded.1/VirtualMedia/CD",
"@odata.type": "#VirtualMedia.v1_2_0.VirtualMedia",
"Actions": {
"#VirtualMedia.EjectMedia": {"target": "/redfish/v1/Managers/iDRAC.Embedded.1/VirtualMedia/CD/Actions/VirtualMedia.EjectMedia"},
"#VirtualMedia.InsertMedia": {"target": "/redfish/v1/Managers/iDRAC.Embedded.1/VirtualMedia/CD/Actions/VirtualMedia.InsertMedia"}
},
"ConnectedVia": "URI",
"Description": "iDRAC Virtual Media Services Settings",
"Id": "CD",
"Image": "http://192.168.232.1/centos7/CentOS-7-x86_64.iso",
"ImageName": "CentOS-7-x86_64.iso",
"Inserted": true,
"MediaTypes": [
"CD",
"DVD"
],
"MediaTypes@odata.count": 2,
"Name": "Virtual CD",
"WriteProtected": true
}
挂载 CD:HTTP Attach(挂载后不会自动重启)
method: POST
url: /redfish/v1/Managers/iDRAC.Embedded.1/VirtualMedia/CD/Actions/VirtualMedia.InsertMedia/
headers: {'Content-Type': 'application/json'}
payload: {
"Image": "http://192.168.232.1/centos7.4/CentOS-7-x86_64.iso",
"Inserted":true,
"WriteProtected":true
}
Authorization: Basic Auth - username/password
卸载 CD:HTTP Detach
method: POST
url: /redfish/v1/Managers/iDRAC.Embedded.1/VirtualMedia/CD/Actions/VirtualMedia.EjectMedia/
headers: {'Content-Type': 'application/json'}
payload: {}
Authorization: Basic Auth - username/password
NFS Attach(挂载后自动重启)
method: POST
url: /redfish/v1/Dell/Systems/System.Embedded.1/DellOSDeploymentService/Actions/DellOSDeploymentService.BootToNetworkISO
headers: {'content-type': 'application/json'}
payload: {"IPAddress": "192.168.232.51", "ShareType": "NFS", "ShareName": "/mnt/test", "ImageName": "custom_cloudos7.1.iso"}
Authorization: BasicAuth - username/password
CIFS Attach(挂载后自动重启)
method: POST
url: /redfish/v1/Dell/Systems/System.Embedded.1/DellOSDeploymentService/Actions/DellOSDeploymentService.BootToNetworkISO
headers: {'content-type': 'application/json'}
payload: {"IPAddress": "192.168.232.51", "ShareType": "CIFS", "ShareName": "cifstest", "ImageName": "custom_cloudos7.1.iso", "UserName": "user1", "Password": "123"}
Authorization: BasicAuth - username/password
引导选项(以 CD 方式引导)
method: PATCH
url: /redfish/v1/Systems/System.Embedded.1/
headers: {'content-type': 'application/json'}
payload: {"Boot": {"BootSourceOverrideTarget": "Cd"} }
Authorization: BasicAuth - username/password
获取网卡信息:
method: GET
url: /redfish/v1/Systems/System.Embedded.1/EthernetInterfaces/NIC.Mezzanine.1-1-1
headers: {'Content-Type': 'application/json'}
basic auth: username/password
需要了解更多 Redfish API
,查看官网文档即可。Dell
官方在 Github
上开源了一个项目:iDRAC-Redfish-Scripting,这个项目通过 python
代码实现 Redfish API
的调用,很多官方文档中没提到的细节和接口都可以通过阅读源码寻找帮助。
Refer
- Redfish 实现跨厂商的服务器管理,让采购新硬件再无后顾之忧
- Redfish:下一代数据中心管理标准
- Redfish 白皮书
- Redfish –融合、混合 IT 的简单和安全管理
- Supermicro Redfish API
- Dell iDRAC Redfish API
总结
Redfish
真是一个强大的存在,可以帮助我们远程管理服务器,甚至可以实现自动化、批量化的操作,这给大规模或者云应用提供了巨大帮助。想想看,一键式安装系统、部署,并且是分布式的,是不是很酷呢?