Solucionar problemas de BMM usando o az networkcloud baremetalmachine run-read-command
Pode haver situações em que um usuário precise investigar e resolver problemas com uma máquina bare metal (BMM) local. O Operator Nexus fornece o az networkcloud baremetalmachine run-read-command
para que os usuários possam executar uma lista selecionada de comandos somente leitura para obter informações de um BMM.
O comando produz um arquivo de saída contendo os resultados da execução do comando run-read. Por padrão, os dados são enviados para a conta de armazenamento do Gerenciador de Clusters. Há também um método de visualização onde os usuários podem configurar o recurso de cluster com uma conta de armazenamento e identidade que tem acesso à conta de armazenamento para receber a saída.
Pré-requisitos
- Instale a versão mais recente das extensões apropriadas da CLI
- Certifique-se de que o BMM alvo deve ter seu
poweredState
definido paraOn
e ter seureadyState
definido paraTrue
- Obter o nome do grupo de Recursos Gerenciados (cluster_MRG) que você criou para
Cluster
o recurso
Verificar o acesso à conta de armazenamento do Cluster Manager
Nota
O método de saída da conta de armazenamento do Gerenciador de Cluster será preterido no futuro assim que a integração do cluster aos Serviços Confiáveis estiver concluída e a opção de armazenamento gerenciado pelo usuário for totalmente suportada.
Se estiver usando o método de armazenamento do Gerenciador de Clusters, verifique se você tem acesso à conta de armazenamento do Gerenciador de Clusters:
- No portal do Azure, navegue até a conta de Armazenamento do Gerenciador de Clusters.
- Nos detalhes da conta de armazenamento, selecione Navegador de armazenamento no menu de navegação do lado esquerdo.
- Nos detalhes do navegador de armazenamento, selecione em Contêineres de Blob.
- Se você encontrar um
403 This request is not authorized to perform this operation.
ao acessar a conta de armazenamento, as configurações de firewall da conta de armazenamento precisam ser atualizadas para incluir o endereço IP público. - Solicite acesso criando um tíquete de suporte via Portal no recurso Gerenciador de Cluster. Forneça o endereço IP público que requer acesso.
PREVIEW: Enviar saída de comando para uma conta de armazenamento especificada pelo usuário
Importante
Observe que esse método de especificar uma conta de armazenamento do usuário para a saída do comando está em visualização. Esse método só deve ser usado com contas de armazenamento de usuário que não tenham firewall habilitado. Se o seu ambiente exigir que o firewall da conta de armazenamento esteja habilitado, use o método de saída existente do Gerenciador de Clusters.
Criar e configurar recursos de armazenamento
- Crie uma conta de armazenamento ou identifique uma conta de armazenamento existente que você deseja usar. Consulte Criar uma conta de armazenamento do Azure.
- Crie um contêiner de armazenamento de blob na conta de armazenamento. Consulte Criar um contêiner.
- Atribua a função "Storage Blob Data Contributor" a usuários e identidades gerenciadas que precisam de acesso à saída run-data-extract.
- Veja Atribuir uma função do Azure para acesso aos dados de blobs. A função também deve ser atribuída a uma identidade gerenciada atribuída pelo usuário ou à própria identidade gerenciada atribuída ao sistema do cluster.
- Para obter mais informações sobre identidades gerenciadas, consulte Identidades gerenciadas para recursos do Azure.
- Se estiver usando a identidade atribuída ao sistema do Cluster, a identidade atribuída ao sistema precisará ser adicionada ao cluster antes que possa receber acesso.
- Ao atribuir uma função à identidade atribuída ao sistema do cluster, certifique-se de selecionar o recurso com o tipo "Cluster (Operator Nexus)".
Configurar o cluster para usar uma identidade gerenciada atribuída pelo usuário para acesso ao armazenamento
Use este comando para criar um cluster com uma conta de armazenamento gerenciado pelo usuário e identidade atribuída pelo usuário. Observe que este exemplo é um comando abreviado que apenas destaca os campos pertinentes para adicionar o armazenamento gerenciado pelo usuário. Não é o comando full cluster create.
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>"
Use este comando para configurar um cluster existente para uma conta de armazenamento fornecida pelo usuário e identidade atribuída pelo usuário. O comando update também pode ser usado para alterar o local e a identidade da conta de armazenamento, se necessário.
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>"
Configurar o cluster para usar uma identidade gerenciada atribuída ao sistema para acesso ao armazenamento
Use este comando para criar um cluster com uma conta de armazenamento gerenciado pelo usuário e uma identidade atribuída ao sistema. Observe que este exemplo é um comando abreviado que apenas destaca os campos pertinentes para adicionar o armazenamento gerenciado pelo usuário. Não é o comando full cluster create.
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>"
Use este comando para configurar um cluster existente para uma conta de armazenamento fornecida pelo usuário e para usar sua própria identidade atribuída ao sistema. O comando update também pode ser usado para alterar o local da conta de armazenamento.
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>"
Para alterar o cluster de uma identidade atribuída pelo usuário para uma identidade atribuída pelo sistema, o CommandOutputSettings deve primeiro ser limpo usando o comando na próxima seção e, em seguida, definido usando esse comando.
Limpe CommandOutputSettings do cluster
O CommandOutputSettings pode ser limpo, direcionando a saída run-data-extract de volta para o armazenamento do gerenciador de cluster. No entanto, não é recomendado, pois é menos seguro, e a opção será removida em uma versão futura.
No entanto, o CommandOutputSettings precisa ser limpo se mudar de uma identidade atribuída pelo usuário para uma identidade atribuída pelo sistema.
Use este comando para limpar o 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}}'
Exibir o ID principal da identidade gerenciada
O ID do recurso de identidade pode ser encontrado selecionando "Visualização JSON" no recurso de identidade; o ID está na parte superior do painel que aparece. A URL do contêiner pode ser encontrada na guia Configurações -> Propriedades do recurso de contêiner.
A CLI também pode ser usada para exibir a identidade e os dados de ID principal associados dentro do cluster.
Exemplo:
az networkcloud cluster show --ids /subscriptions/<Subscription ID>/resourceGroups/<Cluster Resource Group Name>/providers/Microsoft.NetworkCloud/clusters/<Cluster Name>
Exemplo de identidade atribuída ao sistema:
"identity": {
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "SystemAssigned"
},
Exemplo de identidade atribuída pelo usuário:
"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"
}
}
},
Executar um comando run-read
O comando run-read permite executar um comando no BMM que não altera nada. Alguns comandos têm mais de uma palavra ou precisam de um argumento para funcionar. Esses comandos são feitos assim para separá-los daqueles que podem mudar as coisas. Por exemplo, run-read-command pode usar kubectl get
, mas não kubectl apply
. Quando você usa esses comandos, você tem que colocar todas as palavras no campo "comando". Por exemplo, está certo, {"command":"kubectl get","arguments":["nodes"]}
{"command":"kubectl","arguments":["get","nodes"]}
está errado.
Observe também que alguns comandos começam com nc-toolbox nc-toolbox-runread
e devem ser inseridos conforme mostrado.
nc-toolbox-runread
é uma imagem de contêiner especial que inclui mais ferramentas que não estão instaladas no host bare metal, como ipmitool
e racadm
.
Alguns dos comandos run-read exigem que argumentos específicos sejam fornecidos para impor recursos somente leitura dos comandos.
Um exemplo de comandos de leitura de execução que exigem argumentos específicos é o comando mstconfig
Mellanox permitido, que requer que o query
argumento seja fornecido para impor somente leitura.
Aviso
A Microsoft não fornece nem oferece suporte a chamadas de API do Operator Nexus que esperam que o nome de usuário e/ou senha de texto simples sejam fornecidos. Por favor, note que todos os valores enviados serão registrados e são considerados segredos expostos, que devem ser alternados e revogados. O método documentado da Microsoft para usar segredos com segurança é armazená-los em um Cofre de Chaves do Azure, se você tiver dúvidas ou preocupações específicas, envie uma solicitação por meio do Portal do Azure.
Esta lista mostra os comandos que você pode usar. Comandos em *italics*
não pode ter arguments
, o resto pode.
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
(Argumento PeakReset NÃO permitido)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
(requerquery
arg)nc-toolbox nc-toolbox-runread mstflint
(requerquery
arg)nc-toolbox nc-toolbox-runread mstlink
(requerquery
arg)nc-toolbox nc-toolbox-runread mstfwmanager
(requerquery
arg)nc-toolbox nc-toolbox-runread mlx_temp
A sintaxe do comando é:
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>"
Vários comandos podem ser fornecidos no formato json para --commands
a opção.
Para um comando com vários argumentos, forneça como uma lista para o arguments
parâmetro. Consulte Taquigrafia da CLI do Azure para obter instruções sobre como construir a --commands
estrutura.
Esses comandos podem ser de longa execução, então a recomendação é definir --limit-time-seconds
para pelo menos 600 segundos (10 minutos). A execução de vários comandos pode levar mais de 10 minutos.
Este comando é executado de forma síncrona. Se desejar ignorar a conclusão do comando, especifique as --no-wait --debug
opções. Para obter mais informações, consulte como controlar operações assíncronas.
Quando um argumento --output-directory
opcional é fornecido, o resultado da saída é baixado e extraído para o diretório local.
Aviso
O uso do --output-directory
argumento substituirá todos os arquivos no diretório local que tenham o mesmo nome dos novos arquivos que estão sendo criados.
Este exemplo executa um '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>"
Este exemplo executa o hostname
comando e um ping
comando
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>"
Este exemplo executa o racadm getsysinfo -c
comando
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>"
Como exibir a saída de um az networkcloud baremetalmachine run-read-command
na conta de armazenamento do Gerenciador de Cluster
Este guia orienta você pelo acesso ao arquivo de saída criado na conta de Armazenamento do Gerenciador de Cluster quando um az networkcloud baremetalmachine run-read-command
é executado em um servidor. O nome do arquivo é identificado na saída de az rest
status.
Abra o Grupo de Recursos Gerenciados do Gerenciador de Cluster para o Cluster onde o servidor está alojado e selecione a conta de Armazenamento.
Nos detalhes da conta de armazenamento, selecione Navegador de armazenamento no menu de navegação do lado esquerdo.
Nos detalhes do navegador de armazenamento, selecione em Contêineres de Blob.
Selecione o contêiner de blob baremetal-run-command-output.
A conta de armazenamento pode ser bloqueada, resultando em
403 This request is not authorized to perform this operation.
devido a restrições de rede ou firewall. Consulte o armazenamento do gerenciador de cluster ou as seções de armazenamento gerenciado pelo cliente para obter os procedimentos para verificar o acesso.Selecione o arquivo de saída no comando run-read. O nome do arquivo pode ser identificado a partir do
az rest --method get
comando. Além disso, o carimbo de data/hora da última modificação está alinhado com quando o comando foi executado.Você pode gerenciar & baixar o arquivo de saída a partir do pop-out Visão geral .
PREVIEW: Verifique o status do comando e visualize a saída em uma conta de armazenamento especificada pelo usuário
A saída da amostra é mostrada. Ele imprime os 4.000 principais caracteres do resultado na tela para conveniência e fornece um link de curta duração para o blob de armazenamento que contém o resultado da execução do comando. Você pode usar o link para baixar o arquivo de saída compactado (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