乐趣区

Redfish-详解

原文地址:https://www.tony-yin.site/201…

本文介绍一下redfish,被称为“下一代数据中心管理标准”,非常强大的一个玩意!

概述: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 的用处,简而言之,如今大多数服务器厂商(比如 SupermicroDell 等等)都会自带 IPMI 系统,这个系统是独立装在主板芯片上,用户可以通过浏览器远程控制服务器,比如开关、装系统、进入服务器终端等等,而不用跑到机房忍受过高或过低的温度、忍受服务器嘈杂的声音、忍受蹩脚的显示器……

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

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

  1. Redfish 实现跨厂商的服务器管理,让采购新硬件再无后顾之忧
  2. Redfish:下一代数据中心管理标准
  3. Redfish 白皮书
  4. Redfish –融合、混合 IT 的简单和安全管理
  5. Supermicro Redfish API
  6. Dell iDRAC Redfish API

总结

Redfish真是一个强大的存在,可以帮助我们远程管理服务器,甚至可以实现自动化、批量化的操作,这给大规模或者云应用提供了巨大帮助。想想看,一键式安装系统、部署,并且是分布式的,是不是很酷呢?

退出移动版