你当前正在访问 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 命令执行的结果。 默认情况下,数据将发送到群集管理器存储帐户。 还有一种预览方法,用户可以使用有权访问存储帐户的存储帐户和标识来配置群集资源来接收输出。

先决条件

  1. 安装最新版本的相应 CLI 扩展
  2. 务必确保目标 BMM 将其 poweredState 设置为 On,并将其 readyState 设置为 True
  3. 获取为 Cluster 资源创建的托管资源组名称 (cluster_MRG)

验证是否有权访问群集管理器的存储帐户

注意

在群集载入到受信任的服务完成,并且完全支持用户托管存储选项后,群集管理器存储帐户输出方法将来将弃用。

如果使用群集管理器存储方法,请验证你是否有权访问群集管理器的存储帐户:

  1. 在 Azure 门户中,导航到群集管理器的存储帐户。
  2. 在存储帐户详细信息中,从左侧的导航菜单中选择“存储浏览器”
  3. 在存储浏览器详细信息中,选择“blob 容器”
  4. 如果在访问存储帐户时遇到问题 403 This request is not authorized to perform this operation. ,则需要更新存储帐户的防火墙设置以包含公共 IP 地址。
  5. 通过群集管理器资源上的门户创建支持票证来请求访问权限。 提供需要访问的公共 IP 地址。

预览版:将命令输出发送到用户指定的存储帐户

重要

请注意,为命令输出指定用户帐户的此方法处于预览状态。 此方法应仅用于未启用防火墙的用户存储帐户。 如果环境需要启用存储帐户防火墙,请使用现有的群集管理器输出方法。

创建和配置存储资源

  1. 创建存储帐户,或标识要使用的现有存储帐户。 请参阅创建 Azure 存储帐户
  2. 在存储帐户中创建 Blob 存储容器。 请参阅创建容器
  3. 将“存储 Blob 数据参与者”角色分配给需要访问 run-data-extract 输出的用户和托管标识。
    1. 请参阅分配 Azure 角色以访问 blob 数据。 该角色还必须分配给用户分配的托管标识或群集自己的系统分配托管标识。
    2. 有关托管标识的详细信息,请参阅 Azure 资源的托管标识
    3. 如果使用群集的系统分配标识,则需要将系统分配的标识添加到群集,然后才能授予其访问权限。
    4. 将角色分配给群集的系统分配标识时,请确保选择类型为“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 是一个特殊的容器映像,其中包含未安装在裸机主机上的更多工具,例如 ipmitoolracadm

某些 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 状态输出中进行标识。

  1. 打开托管服务器的群集的群集管理器托管资源组,然后选择“存储帐户”

  2. 在存储帐户详细信息中,从左侧的导航菜单中选择“存储浏览器”

  3. 在存储浏览器详细信息中,选择“blob 容器”

  4. 选择 baremetal-run-command-output blob 容器。

  5. 由于网络或防火墙限制,存储帐户可能会锁定,从而导致 403 This request is not authorized to perform this operation.。 有关验证访问权限的过程,请参阅群集管理器存储客户托管存储部分。

  6. 通过 run-read 命令选择输出文件。 可通过 az rest --method get 命令确定文件名。 此外,“上次修改时间”时间戳将与执行命令的时间一致。

  7. 你可以从“概述”弹出窗口中管理并下载输出文件

预览版:检查命令状态并在用户指定的存储帐户中查看输出

下面显示了示例输出。 为了方便起见,系统将结果的前 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