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

你可能感兴趣的:(redfish)