你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 az networkcloud baremetalmachine run-read-command
排查 BMM 问题
在某些情况下,用户可能需要调查和解决本地裸机计算机 (BMM) 的问题。 运营商关系平台提供了 az networkcloud baremetalmachine run-read-command
,以便用户可以运行精选的只读命令列表,以便从 BMM 获取信息。
该命令会生成一个输出文件,其中包含 run-read 命令执行的结果。 默认情况下,数据将发送到群集管理器存储帐户。 还有一种预览方法,用户可以使用有权访问存储帐户的存储帐户和标识来配置群集资源来接收输出。
先决条件
- 安装最新版本的相应 CLI 扩展
- 务必确保目标 BMM 将其
poweredState
设置为On
,并将其readyState
设置为True
- 获取为
Cluster
资源创建的托管资源组名称 (cluster_MRG)
验证是否有权访问群集管理器的存储帐户
注意
在群集载入到受信任的服务完成,并且完全支持用户托管存储选项后,群集管理器存储帐户输出方法将来将弃用。
如果使用群集管理器存储方法,请验证你是否有权访问群集管理器的存储帐户:
- 在 Azure 门户中,导航到群集管理器的存储帐户。
- 在存储帐户详细信息中,从左侧的导航菜单中选择“存储浏览器”。
- 在存储浏览器详细信息中,选择“blob 容器”。
- 如果在访问存储帐户时遇到问题
403 This request is not authorized to perform this operation.
,则需要更新存储帐户的防火墙设置以包含公共 IP 地址。 - 通过群集管理器资源上的门户创建支持票证来请求访问权限。 提供需要访问的公共 IP 地址。
预览版:将命令输出发送到用户指定的存储帐户
重要
请注意,为命令输出指定用户帐户的此方法处于预览状态。 此方法应仅用于未启用防火墙的用户存储帐户。 如果环境需要启用存储帐户防火墙,请使用现有的群集管理器输出方法。
创建和配置存储资源
- 创建存储帐户,或标识要使用的现有存储帐户。 请参阅创建 Azure 存储帐户。
- 在存储帐户中创建 Blob 存储容器。 请参阅创建容器。
- 将“存储 Blob 数据参与者”角色分配给需要访问 run-data-extract 输出的用户和托管标识。
- 请参阅分配 Azure 角色以访问 blob 数据。 该角色还必须分配给用户分配的托管标识或群集自己的系统分配托管标识。
- 有关托管标识的详细信息,请参阅 Azure 资源的托管标识。
- 如果使用群集的系统分配标识,则需要将系统分配的标识添加到群集,然后才能授予其访问权限。
- 将角色分配给群集的系统分配标识时,请确保选择类型为“Cluster (Operator Nexus)”的资源。
将群集配置为使用用户分配的托管标识进行存储访问
使用此命令创建具有用户托管存储帐户和用户分配标识的群集。 请注意,此示例是一个缩写命令,它仅突出显示与添加用户托管存储相关的字段。 这不是完整的群集创建命令。
az networkcloud cluster create --name "<cluster-name>" \
--resource-group "<cluster-resource-group>" \
...
--mi-user-assigned "<user-assigned-identity-resource-id>" \
--command-output-settings identity-type="UserAssignedIdentity" \
identity-resource-id="<user-assigned-identity-resource-id>" \
container-url="<container-url>" \
...
--subscription "<subscription>"
使用此命令为用户提供的存储帐户和用户分配的标识配置现有群集。 更新命令还可用于根据需要更改存储帐户位置和标识。
az networkcloud cluster update --name "<cluster-name>" \
--resource-group "<cluster-resource-group>" \
--mi-user-assigned "<user-assigned-identity-resource-id>" \
--command-output-settings identity-type="UserAssignedIdentity" \
identity-resource-id="<user-assigned-identity-resource-id>" \
container-url="<container-url>" \
--subscription "<subscription>"
将群集配置为使用系统分配的托管标识进行存储访问
使用此命令创建具有用户托管存储帐户和系统分配标识的群集。 请注意,此示例是一个缩写命令,它仅突出显示与添加用户托管存储相关的字段。 这不是完整的群集创建命令。
az networkcloud cluster create --name "<cluster-name>" \
--resource-group "<cluster-resource-group>" \
...
--mi-system-assigned true \
--command-output-settings identity-type="SystemAssignedIdentity" \
container-url="<container-url>" \
...
--subscription "<subscription>"
使用此命令为用户提供的存储帐户配置现有群集,并使用其自己的系统分配标识。 更新命令还可用于更改存储帐户位置和标识。
az networkcloud cluster update --name "<cluster-name>" \
--resource-group "<cluster-resource-group>" \
--mi-system-assigned true \
--command-output-settings identity-type="SystemAssignedIdentity" \
container-url="<container-url>" \
--subscription "<subscription>"
若要将群集从用户分配的标识更改为系统分配的标识,必须先使用下一部分中的命令清除 CommandOutputSettings,然后使用此命令进行设置。
清除群集的 CommandOutputSettings
可以清除 CommandOutputSettings,将 run-data-extract 输出定向回群集管理器的存储。 但是,不建议这样做,因为不太安全,并且该选项将在将来的版本中删除。
但是,如果从用户分配的标识切换到系统分配的标识,则需要清除 CommandOutputSettings。
使用此命令清除 CommandOutputSettings:
az rest --method patch \
--url "https://management.azure.com/subscriptions/<subscription>/resourceGroups/<cluster-resource-group>/providers/Microsoft.NetworkCloud/clusters/<cluster-name>?api-version=2024-08-01-preview" \
--body '{"properties": {"commandOutputSettings":null}}'
查看托管标识的主体 ID
可以通过在标识资源上选择“JSON 视图”来找到标识资源 ID;ID 位于显示的面板顶部。 可以在容器资源的“设置 - > 属性”选项卡上找到容器 URL。
CLI 还可用于查看群集中的标识和关联的主体 ID 数据。
示例:
az networkcloud cluster show --ids /subscriptions/<Subscription ID>/resourceGroups/<Cluster Resource Group Name>/providers/Microsoft.NetworkCloud/clusters/<Cluster Name>
系统分配的标识示例:
"identity": {
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "SystemAssigned"
},
用户分配的标识示例:
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/<subscriptionID>/resourcegroups/<resourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<userAssignedIdentityName>": {
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"principalId": "bbbbbbbb-cccc-dddd-2222-333333333333"
}
}
},
执行 run-read 命令
通过 run-read 命令,可以在 BMM 上运行一个不会更改任何内容的命令。 某些命令包含多个单词,或需要有一个参数才能正常使用。 这些命令的组成将符合如下所述的要求,以便与可以更改内容的命令区分开。 例如,run-read-command 可以使用 kubectl get
,但不能使用 kubectl apply
。 使用这些命令时,必须将所有单词都放在“command”字段中。 例如,{"command":"kubectl get","arguments":["nodes"]}
是正确的;而 {"command":"kubectl","arguments":["get","nodes"]}
则不正确。
另请注意,某些命令以 nc-toolbox nc-toolbox-runread
开头,必须按如下所示进行输入。
nc-toolbox-runread
是一个特殊的容器映像,其中包含未安装在裸机主机上的更多工具,例如 ipmitool
和 racadm
。
某些 run-read 命令需要提供特定的参数以强制实施命令的只读功能。
一个需要特定参数的 run-read 命令的示例是允许的 Mellanox 命令 mstconfig
,这要求提供 query
参数以强制实施只读。
警告
Microsoft 不提供或支持任何需要提供纯文本用户名和密码的 Operator Nexus API 调用。 请注意,将会记录发送的任何值,并将其视为应当轮换和撤销的公开机密。 安全使用机密的 Microsoft 记录方法是将它们存储在 Azure 密钥保管库中,如有具体问题或疑问,请通过 Azure 门户提交请求。
此列表显示可以使用的命令。 *italics*
格式的命令不能有 arguments
;其余的都可以。
arp
brctl show
dmidecode
fdisk -l
host
hostname
ifconfig -a
ifconfig -s
ip address show
ip link show
ip maddress show
ip route show
journalctl
kubectl api-resources
kubectl api-versions
kubectl describe
kubectl get
kubectl logs
mount
ping
ss
tcpdump
traceroute
uname
ulimit -a
uptime
nc-toolbox nc-toolbox-runread ipmitool channel authcap
nc-toolbox nc-toolbox-runread ipmitool channel info
nc-toolbox nc-toolbox-runread ipmitool chassis status
nc-toolbox nc-toolbox-runread ipmitool chassis power status
nc-toolbox nc-toolbox-runread ipmitool chassis restart cause
nc-toolbox nc-toolbox-runread ipmitool chassis poh
nc-toolbox nc-toolbox-runread ipmitool dcmi power get_limit
nc-toolbox nc-toolbox-runread ipmitool dcmi sensors
nc-toolbox nc-toolbox-runread ipmitool dcmi asset_tag
nc-toolbox nc-toolbox-runread ipmitool dcmi get_mc_id_string
nc-toolbox nc-toolbox-runread ipmitool dcmi thermalpolicy get
nc-toolbox nc-toolbox-runread ipmitool dcmi get_temp_reading
nc-toolbox nc-toolbox-runread ipmitool dcmi get_conf_param
nc-toolbox nc-toolbox-runread ipmitool delloem lcd info
nc-toolbox nc-toolbox-runread ipmitool delloem lcd status
nc-toolbox nc-toolbox-runread ipmitool delloem mac list
nc-toolbox nc-toolbox-runread ipmitool delloem mac get
nc-toolbox nc-toolbox-runread ipmitool delloem lan get
nc-toolbox nc-toolbox-runread ipmitool delloem powermonitor powerconsumption
nc-toolbox nc-toolbox-runread ipmitool delloem powermonitor powerconsumptionhistory
nc-toolbox nc-toolbox-runread ipmitool delloem powermonitor getpowerbudget
nc-toolbox nc-toolbox-runread ipmitool delloem vflash info card
nc-toolbox nc-toolbox-runread ipmitool echo
nc-toolbox nc-toolbox-runread ipmitool ekanalyzer print
nc-toolbox nc-toolbox-runread ipmitool ekanalyzer summary
nc-toolbox nc-toolbox-runread ipmitool fru print
nc-toolbox nc-toolbox-runread ipmitool fwum info
nc-toolbox nc-toolbox-runread ipmitool fwum status
nc-toolbox nc-toolbox-runread ipmitool fwum tracelog
nc-toolbox nc-toolbox-runread ipmitool gendev list
nc-toolbox nc-toolbox-runread ipmitool hpm rollbackstatus
nc-toolbox nc-toolbox-runread ipmitool hpm selftestresult
nc-toolbox nc-toolbox-runread ipmitool ime help
nc-toolbox nc-toolbox-runread ipmitool ime info
nc-toolbox nc-toolbox-runread ipmitool isol info
nc-toolbox nc-toolbox-runread ipmitool lan print
nc-toolbox nc-toolbox-runread ipmitool lan alert print
nc-toolbox nc-toolbox-runread ipmitool lan stats get
nc-toolbox nc-toolbox-runread ipmitool mc bootparam get
nc-toolbox nc-toolbox-runread ipmitool mc chassis poh
nc-toolbox nc-toolbox-runread ipmitool mc chassis policy list
nc-toolbox nc-toolbox-runread ipmitool mc chassis power status
nc-toolbox nc-toolbox-runread ipmitool mc chassis status
nc-toolbox nc-toolbox-runread ipmitool mc getenables
nc-toolbox nc-toolbox-runread ipmitool mc getsysinfo
nc-toolbox nc-toolbox-runread ipmitool mc guid
nc-toolbox nc-toolbox-runread ipmitool mc info
nc-toolbox nc-toolbox-runread ipmitool mc restart cause
nc-toolbox nc-toolbox-runread ipmitool mc watchdog get
nc-toolbox nc-toolbox-runread ipmitool bmc bootparam get
nc-toolbox nc-toolbox-runread ipmitool bmc chassis poh
nc-toolbox nc-toolbox-runread ipmitool bmc chassis policy list
nc-toolbox nc-toolbox-runread ipmitool bmc chassis power status
nc-toolbox nc-toolbox-runread ipmitool bmc chassis status
nc-toolbox nc-toolbox-runread ipmitool bmc getenables
nc-toolbox nc-toolbox-runread ipmitool bmc getsysinfo
nc-toolbox nc-toolbox-runread ipmitool bmc guid
nc-toolbox nc-toolbox-runread ipmitool bmc info
nc-toolbox nc-toolbox-runread ipmitool bmc restart cause
nc-toolbox nc-toolbox-runread ipmitool bmc watchdog get
nc-toolbox nc-toolbox-runread ipmitool nm alert get
nc-toolbox nc-toolbox-runread ipmitool nm capability
nc-toolbox nc-toolbox-runread ipmitool nm discover
nc-toolbox nc-toolbox-runread ipmitool nm policy get policy_id
nc-toolbox nc-toolbox-runread ipmitool nm policy limiting
nc-toolbox nc-toolbox-runread ipmitool nm statistics
nc-toolbox nc-toolbox-runread ipmitool nm suspend get
nc-toolbox nc-toolbox-runread ipmitool nm threshold get
nc-toolbox nc-toolbox-runread ipmitool pef
nc-toolbox nc-toolbox-runread ipmitool picmg addrinfo
nc-toolbox nc-toolbox-runread ipmitool picmg policy get
nc-toolbox nc-toolbox-runread ipmitool power status
nc-toolbox nc-toolbox-runread ipmitool sdr elist
nc-toolbox nc-toolbox-runread ipmitool sdr get
nc-toolbox nc-toolbox-runread ipmitool sdr info
nc-toolbox nc-toolbox-runread ipmitool sdr list
nc-toolbox nc-toolbox-runread ipmitool sdr type
nc-toolbox nc-toolbox-runread ipmitool sel elist
nc-toolbox nc-toolbox-runread ipmitool sel get
nc-toolbox nc-toolbox-runread ipmitool sel info
nc-toolbox nc-toolbox-runread ipmitool sel list
nc-toolbox nc-toolbox-runread ipmitool sel time get
nc-toolbox nc-toolbox-runread ipmitool sensor get
nc-toolbox nc-toolbox-runread ipmitool sensor list
nc-toolbox nc-toolbox-runread ipmitool session info
nc-toolbox nc-toolbox-runread ipmitool sol info
nc-toolbox nc-toolbox-runread ipmitool sol payload status
nc-toolbox nc-toolbox-runread ipmitool user list
nc-toolbox nc-toolbox-runread ipmitool user summary
nc-toolbox nc-toolbox-runread racadm arp
nc-toolbox nc-toolbox-runread racadm coredump
nc-toolbox nc-toolbox-runread racadm diagnostics
nc-toolbox nc-toolbox-runread racadm eventfilters get
nc-toolbox nc-toolbox-runread racadm fcstatistics
nc-toolbox nc-toolbox-runread racadm get
nc-toolbox nc-toolbox-runread racadm getconfig
nc-toolbox nc-toolbox-runread racadm gethostnetworkinterfaces
nc-toolbox nc-toolbox-runread racadm getled
nc-toolbox nc-toolbox-runread racadm getniccfg
nc-toolbox nc-toolbox-runread racadm getraclog
nc-toolbox nc-toolbox-runread racadm getractime
nc-toolbox nc-toolbox-runread racadm getsel
nc-toolbox nc-toolbox-runread racadm getsensorinfo
nc-toolbox nc-toolbox-runread racadm getssninfo
nc-toolbox nc-toolbox-runread racadm getsvctag
nc-toolbox nc-toolbox-runread racadm getsysinfo
nc-toolbox nc-toolbox-runread racadm gettracelog
nc-toolbox nc-toolbox-runread racadm getversion
nc-toolbox nc-toolbox-runread racadm hwinventory
nc-toolbox nc-toolbox-runread racadm ifconfig
nc-toolbox nc-toolbox-runread racadm inlettemphistory get
nc-toolbox nc-toolbox-runread racadm jobqueue view
nc-toolbox nc-toolbox-runread racadm lclog view
nc-toolbox nc-toolbox-runread racadm lclog viewconfigresult
nc-toolbox nc-toolbox-runread racadm license view
nc-toolbox nc-toolbox-runread racadm netstat
nc-toolbox nc-toolbox-runread racadm nicstatistics
nc-toolbox nc-toolbox-runread racadm ping
nc-toolbox nc-toolbox-runread racadm ping6
nc-toolbox nc-toolbox-runread racadm racdump
nc-toolbox nc-toolbox-runread racadm sslcertview
nc-toolbox nc-toolbox-runread racadm swinventory
nc-toolbox nc-toolbox-runread racadm systemconfig getbackupscheduler
nc-toolbox nc-toolbox-runread racadm systemperfstatistics
(不允许使用 PeakReset 参数)nc-toolbox nc-toolbox-runread racadm techsupreport getupdatetime
nc-toolbox nc-toolbox-runread racadm traceroute
nc-toolbox nc-toolbox-runread racadm traceroute6
nc-toolbox nc-toolbox-runread racadm usercertview
nc-toolbox nc-toolbox-runread racadm vflashsd status
nc-toolbox nc-toolbox-runread racadm vflashpartition list
nc-toolbox nc-toolbox-runread racadm vflashpartition status -a
nc-toolbox nc-toolbox-runread mstregdump
nc-toolbox nc-toolbox-runread mstconfig
(需要query
参数)nc-toolbox nc-toolbox-runread mstflint
(需要query
参数)nc-toolbox nc-toolbox-runread mstlink
(需要query
参数)nc-toolbox nc-toolbox-runread mstfwmanager
(需要query
参数)nc-toolbox nc-toolbox-runread mlx_temp
命令语法为:
az networkcloud baremetalmachine run-read-command --name "<machine-name>"
--limit-time-seconds "<timeout>" \
--commands '[{"command":"<command1>"},{"command":"<command2>","arguments":["<arg1>","<arg2>"]}]' \
--resource-group "<cluster_MRG>" \
--subscription "<subscription>"
可以以 json 格式向 --commands
选项提供多个命令。
对于具有多个参数的命令,请以列表的形式提供给 arguments
参数。 有关构造 --commands
结构的说明,请参阅 Azure CLI 简写。
这些命令可以长时间运行,因此建议将 --limit-time-seconds
设置为至少 600 秒(10 分钟)。 运行多个命令可能需要 10 分钟以上。
此命令将同步运行。 如果要跳过等待命令完成的过程,请指定 --no-wait --debug
选项。 有关详细信息,请参阅如何跟踪异步操作。
提供可选参数 --output-directory
时,输出结果将下载并提取到本地目录。
警告
使用 --output-directory
参数将覆盖与所创建新文件同名的本地目录中的任何文件。
此示例执行“kubectl get pods”
az networkcloud baremetalmachine run-read-command --name "<bareMetalMachineName>" \
--limit-time-seconds 60 \
--commands "[{command:'kubectl get',arguments:[pods,-n,nc-system]}]" \
--resource-group "<cluster_MRG>" \
--subscription "<subscription>"
此示例将执行 hostname
命令和 ping
命令
az networkcloud baremetalmachine run-read-command --name "<bareMetalMachineName>" \
--limit-time-seconds 60 \
--commands '[{"command":"hostname"},{"command":"ping","arguments":["198.51.102.1","-c","3"]}]' \
--resource-group "<cluster_MRG>" \
--subscription "<subscription>"
此示例将执行 racadm getsysinfo -c
命令
az networkcloud baremetalmachine run-read-command --name "<bareMetalMachineName>" \
--limit-time-seconds 60 \
--commands '[{"command":"nc-toolbox nc-toolbox-runread racadm getsysinfo","arguments":["-c"]}]' \
--resource-group "<cluster_MRG>" \
--subscription "<subscription>"
如何在群集管理器存储帐户中查看 az networkcloud baremetalmachine run-read-command
的输出
本指南将介绍如何访问在服务器上执行 az networkcloud baremetalmachine run-read-command
时在群集管理器存储帐户中创建的输出文件。 该文件的名称将在 az rest
状态输出中进行标识。
打开托管服务器的群集的群集管理器托管资源组,然后选择“存储帐户”。
在存储帐户详细信息中,从左侧的导航菜单中选择“存储浏览器”。
在存储浏览器详细信息中,选择“blob 容器”。
选择 baremetal-run-command-output blob 容器。
由于网络或防火墙限制,存储帐户可能会锁定,从而导致
403 This request is not authorized to perform this operation.
。 有关验证访问权限的过程,请参阅群集管理器存储或客户托管存储部分。通过 run-read 命令选择输出文件。 可通过
az rest --method get
命令确定文件名。 此外,“上次修改时间”时间戳将与执行命令的时间一致。你可以从“概述”弹出窗口中管理并下载输出文件。
预览版:检查命令状态并在用户指定的存储帐户中查看输出
下面显示了示例输出。 为了方便起见,系统将结果的前 4,000 个字符打印到了屏幕上,并提供了指向包含命令执行结果的存储 blob 的短期链接。 你可以使用该链接下载压缩的输出文件 (tar.gz)。
====Action Command Output====
+ hostname
rack1compute01
+ ping 198.51.102.1 -c 3
PING 198.51.102.1 (198.51.102.1) 56(84) bytes of data.
--- 198.51.102.1 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2049ms
================================
Script execution result can be found in storage account:
https://<storage_account_name>.blob.core.windows.net/bmm-run-command-output/a8e0a5fe-3279-46a8-b995-51f2f98a18dd-action-bmmrunreadcmd.tar.gz?se=2023-04-14T06%3A37%3A00Z&sig=XXX&sp=r&spr=https&sr=b&st=2023-04-14T02%3A37%3A00Z&sv=2019-12-12