dmsong
作者dmsong·2021-09-05 16:12
系统工程师·IPS

使用Redfish接口管理Power服务器

字数 7630阅读 4868评论 0赞 3

前言

关于服务器的带外管理,之前通用的是IPMI标准。IPMI定义了服务器管理的最小集,并标准化了相关命令集合。IPMI消息采用统一格式,它的下层是透明的,可以架构在网络、串口、IPMB(I2C)、KCS、SMIC、SMBus等不同接口上。IPMI出现之后,各服务器厂商都开发了遵循IPMI的管理工具,一些特性如远程控制台、远程媒体等,使服务器的远程管理变得方便很多。
但是IPMI也有很多问题。首先是各家厂商基于IPMI标准开发的管理工具不是通用的,在混合架构的数据中心里给管理带来不便。其次,基于IPMI的管理工具通常是单点的,即只能管理本机,扩展性差。全局监控管理系统也可以通过IPMI管理各种服务器,但只能使用IPMI最小子集所提供的功能。再次,IPMI协议本身在安全性方面缺乏考虑。
所以Redfish应运而生。IPMI也在2015年后不再更新。
RedFish标准由DMTF组织维护。Redfish的设立的目标如下:

  • 安全:由HTTPS来保证
  • 高可扩展:通过Restful APIs在服务器和客户端之间传递数据
  • 人类可读数据界面:Json格式数据,简单灵活,适用性强
  • 基于现有硬件可实现:现在支持IPMI的BMC芯片只需很少改动即可支持Redfish,有些BMC同时支持IPMI 2.0和RedFish

基于FSP的Power小型机也可以通过DMTF Redfish APIs来进行管理。Redfish APIs默认已激活。
下面介绍一下如何使用Redfish APIs管理Power服务器。

准备工作

  • 要求Power服务器微码FW860.20及以上。如果不满足,请先升级微码。
  • 获取FSP地址(可通过服务器面板获取或者在HMC中看到服务器的FSP地址)。
  • 客户机(通常是一台linux主机)与FSP之间地址连通。
  • 客户机上安装python,curl等工具包。

基本操作

首先创建一个认证会话,获得X-Auto-Token和会话的URI。然后使用这个Token通过GET方法获取资源属性信息,通常返回的是一个JSON文件,可以对JSON文件进行解析得到想要的值。如果要修改资源的属性,可以用PATCH方法。所有工作完成后,登出或者终止会话。
下面用一些示例演示一下整个过程。

1. 登陆,创建会话

curl -X POST -D headers.txt https:///redfish/v1/SessionService/Sessions -k -d '{"UserName":"", "Password":""}'  

ip即FSP的IP地址,port缺省是443,可省略。需要提供用户名和密码,通常是admin用户及其密码,即平时登陆ASMI的用户名密码。
成功的话,会有如下输出

{  
"@odata.context": "/redfish/v1/$metadata#Session.Session",  
"@odata.id": "/redfish/v1/SessionService/Sessions/0",  
"@odata.type": "#Session.v1_0_2.Session",  
"Description": "Remote User Session",  
"Id": 0,  
"Name": "User Session",  
"UserName": "admin"  
}  

同时会在当前目录下生成headers文件,里面有X-Auth-Token,即我们后面操作要使用的验证令牌。以及Locations,即本次会话的URI,后面我们要使用这个URI登出。

HTTP/1.1 200 OK  
X-Frame-Options: SAMEORIGIN  
X-Content-Type-Options: nosniff  
X-XSS-Protection: 1; mode=block  
X-Content-Security-Policy: allow 'self'  
Strict-Transport-Security: max-age=63072000  
Link: http://redfish.dmtf.org/schemas/v1/Session.v1_0_2.json; rel=describedby  
Content-Length: 277  
Content-Type: application/json  
Location: /redfish/v1/SessionService/Sessions/0  
X-Auth-Token: MI1VM7WGC35JG2O4  
Date: Sat, 06 Feb 2010 11:46:40 GMT  
Server: lighttpd/1.4.41  

2, 获取根信息

curl -k -H "X-Auth-Token: MI1VM7WGC35JG2O4" -X GET https:///redfish/v1/  

得到如下输出,在root下面,有Chassis,Managers,SessionService,Systems分类。Chassis是机箱传感器等信息,Managers是管理器(这里就是FSP)信息,Systems是服务器信息。具体每种类型的schema文件可以在文后参考资料中找到。

{  
"@odata.context": "/redfish/v1/$metadata#ServiceRoot.ServiceRoot",  
"@odata.id": "/redfish/v1",  
"@odata.type": "#ServiceRoot.v1_1_0.ServiceRoot",  
"Chassis": {  
"@odata.id": "/redfish/v1/Chassis"  
},  
"Links": {  
"Sessions": {  
"@odata.id": "/redfish/v1/SessionService/Sessions"  
}  
},  
"Managers": {  
"@odata.id": "/redfish/v1/Managers"  
},  
"Name": "Root Service",  
"RedfishVersion": "1.0.0",  
"SessionService": {  
"@odata.id": "/redfish/v1/SessionService"  
},  
"Systems": {  
"@odata.id": "/redfish/v1/Systems"  
}  
}  

3,获取system ID

curl -k -H "X-Auth-Token: MI1VM7WGC35JG2O4" -X GET https:///redfish/v1/Systems  

输出如下,可以看到被管服务器的ID,即Server-MTM-SN的格式,如下面的Server-8247-22L-XXXXXXX(已做打码处理)

{  
"@odata.context": "/redfish/v1/$metadata#ComputerSystemCollection.ComputerSystemCollection",  
"@odata.id": "/redfish/v1/Systems",  
"@odata.type": "#ComputerSystemCollection.ComputerSystemCollection",  
"Members": [  
{  
"@odata.id": "/redfish/v1/Systems/Server-8247-22L-XXXXXXX"  
}  
],  
"Members@odata.count": 1,  
"Name": "System Collection"  
}  

4,获取系统详细信息

curl -k -H "X-Auth-Token: MI1VM7WGC35JG2O4" -X GET https:///redfish/v1/Systems/Server-8247-22L-XXXXXXX  
{  
"@odata.context": "/redfish/v1/$metadata#ComputerSystem.ComputerSystem",  
"@odata.id": "/redfish/v1/Systems/Server-8247-22L-XXXXXXX",  
"@odata.type": "#ComputerSystem.v1_0_2.ComputerSystem",  
"Actions": {  
"#ComputerSystem.Reset": {  
"ResetType@Redfish.AllowableValues": [  
"On",  
"ForceOff",  
"GracefulShutdown",  
"GracefulRestart"  
],  
"target": "/redfish/v1/Systems/Server-8247-22L-XXXXXXX/Actions/ComputerSystem.Reset"  
}  
},  
"Description": "POWER Server",  
"Id": "Server-8247-22L-XXXXXXX",  
"Links": {  
"ManagedBy": [  
{  
"@odata.id": "/redfish/v1/Managers/V527f34*2e31f50"  
},  
{  
"@odata.id": "/redfish/v1/Managers/V2e7f47*e244454"  
},  
{  
"@odata.id": "/redfish/v1/Managers/V8b7f3c*6e61158"  
},  
{  
"@odata.id": "/redfish/v1/Managers/V2c7f60*0e1165f"  
},  
{  
"@odata.id": "/redfish/v1/Managers/V807f24*7d64b5f"  
},  
{  
"@odata.id": "/redfish/v1/Managers/BMC"  
}  
]  
},  
"Manufacturer": "IBM",  
"Model": "8247-22L",  
"Name": "SVRP8-S822L-07-SNXXXXXXX",  
"Oem": {  
"IBMEnterpriseComputerSystem": {  
"@odata.context": "/redfish/v1/$metadata#IBMEnterpriseComputerSystem.IBMEnterpriseComputerSystem",  
"@odata.type": "#IBMEnterpriseComputerSystem.v1_0_0.IBMEnterpriseComputerSystem",  
"AutoPowerRestart": "Disabled",  
"IBMEnterpriseEnergyScale": {  
"@odata.id": "/redfish/v1/Systems/Server-8247-22L-XXXXXXX/EnergyScale"  
},  
"PowerRestartControl": {  
"BootMode": "BootToSMSMenu",  
"BootSide": "Temporary",  
"FirmwareStartPolicy": "Running",  
"OperatingMode": "Manual",  
"PartitionMode": "A",  
"PowerOffPolicy": "StayOn"  
},  
"PredictiveDynamicMemoryDeallocation": "Enabled"  
}  
},  
"Processors": {  
"@odata.id": "/redfish/v1/Systems/Server-8247-22L-XXXXXXX/Processors"  
},  
"SerialNumber": "XXXXXXX",  
"Status": {  
"Health": "OK",  
"HealthRollUp": "OK",  
"State": "Enabled"  
},  
"UUID": "0004AC1A8F94"  
}  

5,获取电源信息

类似的,我们可以通过https:///redfish/v1/Chassis 获取机箱ID,然后再获取机箱的电源信息(ID已打码)

curl -k -H "X-Auth-Token: MI1VM7WGC35JG2O4" -X GET https:///redfish/v1/Chassis/YYYYYYYYYY/Power  

输出如下:

{  
"@odata.context": "/redfish/v1/$metadata#Power.Power",  
"@odata.id": "/redfish/v1/Chassis/YYYYYYYYYY/Power",  
"@odata.type": "#Power.v1_2_0.Power",  
"Id": "Power",  
"Manufacturer": "IBM",  
"Name": "Chassis Power",  
"PowerSupplies": [  
{  
"LastPowerOutputWatts": "1430",  
"LineInputVoltage": "322",  
"MemberId": "1000",  
"Oem": {  
"IBMEnterprisePower": {  
"Location": {  
"Info": "U78CB.001.WZS01SJ-E1",  
"InfoFormat": "UMTMS"  
},  
"SKU": " 94Y8156"  
}  
},  
"PowerSupplyType": "AC",  
"SerialNumber": "YK108145A1GW",  
"Status": {  
"Health": "OK",  
"State": "Enabled"  
},  
"description": "Modular PowerSupply"  
}  
(略)  
]  
}  

6,获取风扇信息

跟上面类似的,获取机箱风扇信息

curl -k -H "X-Auth-Token: MI1VM7WGC35JG2O4" -X GET https:///redfish/v1/Chassis/YYYYYYYYYY/Thermal  

输出如下:

{  
"@odata.context": "/redfish/v1/$metadata#Thermal.Thermal",  
"@odata.id": "/redfish/v1/Chassis/YYYYYYYYYY/Thermal",  
"@odata.type": "#Thermal.v1_1_0.Thermal",  
"Fans": [  
{  
"MaxReadingRange": "11790",  
"MemberId": "2100",  
"MinReadingRange": "0",  
"Oem": {  
"IBMEnterpriseThermal": {  
"Location": {  
"Info": "U78CB.001.WZS01SJ-A1",  
"InfoFormat": "UMTMS"  
},  
"SKU": "00FV726"  
}  
},  
"Reading": "8940",  
"ReadingUnits": "RPM",  
"SerialNumber": "YL12JP4600A1",  
"Status": {  
"Health": "OK",  
"State": "Enabled"  
}  
}  
(略)  
],  
"Id": "Thermal",  
"Manufacturer": "IBM",  
"Name": "Chassis Thermal"  
}  

7,退出会话

curl -k -H "X-Auth-Token: MI1VM7WGC35JG2O4" -X DELETE https:///redfish/v1/SessionService/Sessions/0;  

结语

通过以上实验和介绍,能够看出使用Redfish管理Power服务器非常简单方便。Restfull APIs的方式也很容易跟实际IT环境中的其他管理工具进行对接,如Zabbix监控系统,通过开源的Redfish模板,可以很方便的将Power服务器的监控项加入到Zabbix系统中,在Zabbix中实现对Power服务器硬件的监控和管理。

注:因实验条件限制,未验证POST方法,如修改服务器设置,开关机等操作。

参考资料:

RedFish官网: https://redfish.dmtf.org/
Red白皮书: https://www.dmtf.org/sites/default/files/DSP2044%20Redfish%20%E7%99%BD%E7%9A%AE%E4%B9%A6%201.0.0.pdf
RedFish Spec: https://www.dmtf.org/sites/default/files/standards/documents/DSP0266_1.10.0.pdf
Power服务器redfish接口:https://www.ibm.com/docs/en/power9?topic=icmcti-managing-power-systems-servers-by-using-dmtf-redfish-apis
Power服务器redfish schema文件:http://public.dhe.ibm.com/systems/power/redfish/schemas/v1/

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

3

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广