Administración de un dispositivo Azure Stack Edge Pro con GPU mediante Windows PowerShell

SE APLICA A:Sí para Pro GPU SKUAzure Stack Edge Pro - GPUSí para Pro 2 SKUAzure Stack Edge Pro 2Sí para Pro R SKUAzure Stack Edge Pro RSí para Mini R SKUAzure Stack Edge Mini R

La solución Azure Stack Edge Pro GPU permite procesar datos y enviarlos a través de la red a Azure. En este artículo se describen algunas de las tareas de configuración y administración del dispositivo Azure Stack Edge Pro GPU. Puede usar Azure Portal, la interfaz de usuario web local o la interfaz de Windows PowerShell para administrar su dispositivo.

Este artículo se centra en cómo puede conectarse a la interfaz de PowerShell del dispositivo y las tareas que puede realizar con esta interfaz.

Conectarse a la interfaz de PowerShell

Dependiendo del sistema operativo del cliente, los procedimientos para conectarse de forma remota al dispositivo son diferentes.

Conexión de forma remota desde un cliente de Windows

Requisitos previos

Antes de comenzar, asegúrese de que:

  • El cliente de Windows ejecuta Windows PowerShell 5.0 o una versión posterior.

  • El cliente de Windows tiene la cadena de firma (certificado raíz) que corresponde al certificado de nodo instalado en el dispositivo. Para instrucciones detalladas, consulte Instalación de un certificado en el cliente de Windows.

  • El archivo hosts que se encuentra en C:\Windows\System32\drivers\etc en el cliente de Windows tiene una entrada que corresponde al certificado de nodo en el siguiente formato:

    <Device IP> <Node serial number>.<DNS domain of the device>

    Este es un ejemplo del archivo hosts:

    10.100.10.10 1HXQG13.wdshcsso.com

Pasos detallados

Siga estos pasos para conectarse de forma remota desde un cliente de Windows.

  1. Ejecute una sesión de Windows PowerShell como administrador.

  2. Asegúrese de que el servicio Administración remota de Windows se ejecuta en el cliente. En el símbolo del sistema, escriba:

    winrm quickconfig
    

    Para más información, vea Instalación y configuración de Administración remota de Windows.

  3. Asigne una variable a la cadena de conexión utilizada en el archivo hosts.

    $Name = "<Node serial number>.<DNS domain of the device>"
    

    Reemplace <Node serial number> y <DNS domain of the device> por el número de serie del nodo y el dominio DNS del dispositivo. Puede obtener los valores del número de serie del nodo en la página Certificates (Certificados) y el dominio DNS en la página Device (Dispositivo) de la interfaz de usuario web local del dispositivo.

  4. Para agregar esta cadena de conexión del dispositivo a la lista de hosts de confianza del cliente, escriba el siguiente comando:

    Set-Item WSMan:\localhost\Client\TrustedHosts $Name -Concatenate -Force
    
  5. Inicie una sesión de Windows PowerShell en el dispositivo:

    Enter-PSSession -ComputerName $Name -Credential ~\EdgeUser -ConfigurationName Minishell -UseSSL
    

    Si ve un error que tiene que ver con la relación de confianza, compruebe que la cadena de firma del certificado de nodo cargado en el dispositivo también esté instalada en el cliente que tiene acceso al dispositivo.

  6. Proporcione la contraseña cuando se le solicite. Use la misma contraseña que se emplea para iniciar sesión en la interfaz de usuario web local. La contraseña de la interfaz de usuario web local predeterminada es Password1. Cuando se conecte correctamente al dispositivo mediante PowerShell remoto, verá la siguiente salida de ejemplo:

    Windows PowerShell
    Copyright (C) Microsoft Corporation. All rights reserved.
    
    PS C:\WINDOWS\system32> winrm quickconfig
    WinRM service is already running on this machine.
    PS C:\WINDOWS\system32> $Name = "1HXQG13.wdshcsso.com"
    PS C:\WINDOWS\system32> Set-Item WSMan:\localhost\Client\TrustedHosts $Name -Concatenate -Force
    PS C:\WINDOWS\system32> Enter-PSSession -ComputerName $Name -Credential ~\EdgeUser -ConfigurationName Minishell -UseSSL
    
    WARNING: The Windows PowerShell interface of your device is intended to be used only for the initial network configuration. Please engage Microsoft Support if you need to access this interface to troubleshoot any potential issues you may be experiencing. Changes made through this interface without involving Microsoft Support could result in an unsupported configuration.
    [1HXQG13.wdshcsso.com]: PS>
    

Cuando se usa la opción -UseSSL, la comunicación remota se realiza a través de PowerShell a través de https. Se recomienda usar siempre https para conectarse de forma remota a través de PowerShell. En redes de confianza, la comunicación remota mediante PowerShell a través de HTTP es aceptable. En primer lugar, habilite PowerShell remoto a través de HTTP en la interfaz de usuario local. A continuación, puede conectarse a la interfaz de PowerShell del dispositivo mediante el procedimiento anterior sin la opción -UseSSL.

Si no usa los certificados (se recomienda usarlos), puede omitir la comprobación de la validación de certificados mediante las opciones de sesión: -SkipCACheck -SkipCNCheck -SkipRevocationCheck.

$sessOptions = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck 
Enter-PSSession -ComputerName $Name -Credential ~\EdgeUser -ConfigurationName Minishell -UseSSL -SessionOption $sessOptions    

Este es un ejemplo de salida al omitir la comprobación de certificados:

PS C:\WINDOWS\system32> $Name = "1HXQG13.wdshcsso.com"
PS C:\WINDOWS\system32> $sessOptions = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
PS C:\WINDOWS\system32> $sessOptions

MaximumConnectionRedirectionCount : 5
NoCompression                     : False
NoMachineProfile                  : False
ProxyAccessType                   : None
ProxyAuthentication               : Negotiate
ProxyCredential                   :
SkipCACheck                       : True
SkipCNCheck                       : True
SkipRevocationCheck               : True
OperationTimeout                  : 00:03:00
NoEncryption                      : False
UseUTF16                          : False
IncludePortInSPN                  : False
OutputBufferingMode               : None
MaxConnectionRetryCount           : 0
Culture                           :
UICulture                         :
MaximumReceivedDataSizePerCommand :
MaximumReceivedObjectSize         :
ApplicationArguments              :
OpenTimeout                       : 00:03:00
CancelTimeout                     : 00:01:00
IdleTimeout                       : -00:00:00.0010000

PS C:\WINDOWS\system32> Enter-PSSession -ComputerName $Name -Credential ~\EdgeUser -ConfigurationName Minishell -UseSSL -SessionOption $sessOptions
WARNING: The Windows PowerShell interface of your device is intended to be used only for the initial network configuration. Please
engage Microsoft Support if you need to access this interface to troubleshoot any potential issues you may be experiencing.
Changes made through this interface without involving Microsoft Support could result in an unsupported configuration.
[1HXQG13.wdshcsso.com]: PS>

Importante

En la versión actual, solo puede conectarse a la interfaz de PowerShell del dispositivo mediante un cliente de Windows. La opción -UseSSL no funciona con los clientes de Linux.

Crear un paquete de soporte

Si experimenta problemas con el dispositivo, puede crear un paquete de soporte técnico de los registros del sistema. El servicio de soporte técnico de Microsoft usa este paquete para solucionar los problemas. Siga estos pasos para crear un paquete de soporte técnico:

  1. Conéctese a la interfaz de PowerShell del dispositivo.

  2. Use el comando Get-HcsNodeSupportPackage para crear un paquete de soporte técnico. El uso del cmdlet es de esta manera:

    Get-HcsNodeSupportPackage [-Path] <string> [-Zip] [-ZipFileName <string>] [-Include {None | RegistryKeys | EtwLogs
            | PeriodicEtwLogs | LogFiles | DumpLog | Platform | FullDumps | MiniDumps | ClusterManagementLog | ClusterLog |
            UpdateLogs | CbsLogs | StorageCmdlets | ClusterCmdlets | ConfigurationCmdlets | KernelDump | RollbackLogs |
            Symbols | NetworkCmdlets | NetworkCmds | Fltmc | ClusterStorageLogs | UTElement | UTFlag | SmbWmiProvider |
            TimeCmds | LocalUILogs | ClusterHealthLogs | BcdeditCommand | BitLockerCommand | DirStats | ComputeRolesLogs |
            ComputeCmdlets | DeviceGuard | Manifests | MeasuredBootLogs | Stats | PeriodicStatLogs | MigrationLogs |
            RollbackSupportPackage | ArchivedLogs | Default}] [-MinimumTimestamp <datetime>] [-MaximumTimestamp <datetime>]
            [-IncludeArchived] [-IncludePeriodicStats] [-Credential <pscredential>]  [<CommonParameters>]
    

    El cmdlet recopila registros de su dispositivo y copia esos registros en una red o un recurso compartido local especificados.

    Los parámetros usados son los siguientes:

    • -Path: especifica la red o la ruta de acceso local donde copiar el paquete de soporte técnico. (necesario)
    • -Credential: especifica las credenciales para acceder a la ruta de acceso protegida.
    • -Zip: especifica que se genere un archivo ZIP.
    • -Include: especifica los componentes que se incluirán en el paquete de soporte técnico. Si no se especifica, se da por hecho el valor Default.
    • -IncludeArchived: especifica que se incluyan los registros archivados en el paquete de soporte técnico.
    • -IncludePeriodicStats: especifica que se incluyan registros estadísticos periódicos en el paquete de soporte técnico.

Ver la información del dispositivo

  1. Conéctese a la interfaz de PowerShell.

  2. Use Get-HcsApplianceInfo para obtener la información del dispositivo.

    En el ejemplo siguiente se muestra el uso de este cmdlet:

    [10.100.10.10]: PS>Get-HcsApplianceInfo
    
    Id                            : b2044bdb-56fd-4561-a90b-407b2a67bdfc
    FriendlyName                  : DBE-NBSVFQR94S6
    Name                          : DBE-NBSVFQR94S6
    SerialNumber                  : HCS-NBSVFQR94S6
    DeviceId                      : 40d7288d-cd28-481d-a1ea-87ba9e71ca6b
    Model                         : Virtual
    FriendlySoftwareVersion       : Data Box Gateway 1902
    HcsVersion                    : 1.4.771.324
    IsClustered                   : False
    IsVirtual                     : True
    LocalCapacityInMb             : 1964992
    SystemState                   : Initialized
    SystemStatus                  : Normal
    Type                          : DataBoxGateway
    CloudReadRateBytesPerSec      : 0
    CloudWriteRateBytesPerSec     : 0
    IsInitialPasswordSet          : True
    FriendlySoftwareVersionNumber : 1902
    UploadPolicy                  : All
    DataDiskResiliencySettingName : Simple
    ApplianceTypeFriendlyName     : Data Box Gateway
    IsRegistered                  : False
    

    Esta es una tabla que resume alguna de la información importante del dispositivo:

    Parámetro Descripción
    FriendlyName El nombre descriptivo del dispositivo, tal y como se configuró mediante la interfaz de usuario web local durante la implementación del dispositivo. El nombre descriptivo predeterminado es el número de serie del dispositivo.
    SerialNumber El número de serie del dispositivo es un número único asignado en la fábrica.
    Modelo El modelo del dispositivo Azure Stack Edge o Data Box Gateway. El modelo es físico para Azure Stack Edge y virtual para Data Box Gateway.
    FriendlySoftwareVersion La cadena descriptiva que corresponde a la versión de software del dispositivo. Para un sistema que ejecuta la versión preliminar, la versión de software descriptiva sería Data Box Edge 1902.
    HcsVersion La versión de software HCS que se ejecuta en el dispositivo. Por ejemplo, la versión de software HCS correspondiente a Data Box Edge 1902 es 1.4.771.324.
    LocalCapacityInMb La capacidad total local del dispositivo en megabits.
    IsRegistered Este valor indica si el dispositivo se activa con el servicio.

Visualización de la información del controlador de GPU

Si el rol de proceso está configurado en su dispositivo, también puede obtener la información del controlador de GPU mediante la interfaz de PowerShell.

  1. Conéctese a la interfaz de PowerShell.

  2. Use Get-HcsGpuNvidiaSmi para obtener la información del controlador de GPU del dispositivo.

    En el ejemplo siguiente se muestra el uso de este cmdlet:

    Get-HcsGpuNvidiaSmi
    

    Anote la información del controlador que aparece en la salida de ejemplo de este cmdlet.

    +-----------------------------------------------------------------------------+    
    | NVIDIA-SMI 440.64.00    Driver Version: 440.64.00    CUDA Version: 10.2     |    
    |-------------------------------+----------------------+----------------------+    
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |    
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |    
    |===============================+======================+======================|    
    |   0  Tesla T4            On   | 000029CE:00:00.0 Off |                    0 |    
    | N/A   60C    P0    29W /  70W |   1539MiB / 15109MiB |      0%      Default |    
    +-------------------------------+----------------------+----------------------+    
    |   1  Tesla T4           On  | 0000AD50:00:00.0 Off |                    0 |
    | N/A   58C    P0    29W /  70W |    330MiB / 15109MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    

Habilitación servicio multiproceso (MPS)

Un servicio multiproceso (MPS) en las GPU de Nvidia proporciona un mecanismo donde varios trabajos pueden compartir las GPU, donde cada trabajo tiene asignado cierto porcentaje de los recursos de la GPU. MPS es una característica en vista previa (GB) en el dispositivo Azure Stack Edge Pro con GPU. Para habilitar MPS en el dispositivo, siga estos pasos:

  1. Antes de comenzar, asegúrese de que:

    1. Ha configurado y activado el dispositivo Azure Stack Edge Pro con un recurso de Azure Stack Edge en Azure.
    2. Ha configurado el proceso en este dispositivo en Azure Portal.
  2. Conéctese a la interfaz de PowerShell.

  3. Use el siguiente comando para habilitar MPS en el dispositivo.

    Start-HcsGpuMPS
    

Nota

Cuando se actualizan el software del dispositivo y el clúster de Kubernetes, la configuración de MPS para las cargas de trabajo no se conserva. Tendrá que volver a habilitar MPS.

Restablecer el dispositivo

Para restablecer el dispositivo, debe borrar de forma segura todos los datos del disco de datos y del disco de arranque del dispositivo.

Utilice el cmdlet Reset-HcsAppliance para borrar tanto los discos de datos como el disco de arranque o solo los discos de datos. Los conmutadores SecureWipeBootDisk y SecureWipeDataDisks le permiten borrar el disco de arranque y los discos de datos, respectivamente.

El identificador SecureWipeBootDisk borra el disco de arranque, lo que hace que el dispositivo no se pueda usar. Solo se debería usar cuando el dispositivo necesite devolverse a Microsoft. Para más información, consulte Devolución o sustitución del dispositivo Azure Data Box Edge.

Si utiliza el restablecimiento del dispositivo en la interfaz de usuario web local, solo los discos de datos se borran de forma segura, pero el disco de arranque se mantiene intacto. El disco de arranque contiene la configuración del dispositivo.

  1. Conéctese a la interfaz de PowerShell.

  2. En el símbolo del sistema, escriba:

    Reset-HcsAppliance -SecureWipeBootDisk -SecureWipeDataDisks

    En el ejemplo siguiente se muestra cómo utilizar este cmdlet:

    [10.128.24.33]: PS>Reset-HcsAppliance -SecureWipeBootDisk -SecureWipeDataDisks
    
    Confirm
    Are you sure you want to perform this action?
    Performing the operation "Reset-HcsAppliance" on target "ShouldProcess appliance".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [?] Help (default is "Y"): N
    

Obtener los registros de proceso

Si el rol de proceso está configurado en su dispositivo, también puede obtener los registros del proceso gracias a la interfaz de PowerShell.

  1. Conéctese a la interfaz de PowerShell.

  2. Use Get-AzureDataBoxEdgeComputeRoleLogs para obtener los registros del proceso del dispositivo.

    En el ejemplo siguiente se muestra el uso de este cmdlet:

    Get-AzureDataBoxEdgeComputeRoleLogs -Path "\\hcsfs\logs\myacct" -Credential "username" -FullLogCollection    
    

    Aquí tiene hay una descripción de los parámetros que se usan en el cmdlet:

    • Path: proporcione una ruta de red al recurso compartido en el que quiere crear el paquete de registros del proceso.
    • Credential: proporcione el nombre de usuario del recurso compartido de red. Cuando ejecute este cmdlet, deberá proporcionar la contraseña del recurso compartido.
    • FullLogCollection: este parámetro garantiza que el paquete de registros contendrá todos los registros del proceso. De forma predeterminada, el paquete de registros contiene solo un subconjunto de registros.

Cambio de las subredes de pods y de servicio de Kubernetes

De forma predeterminada, Kubernetes en el dispositivo Azure Stack Edge usa las subredes 172.27.0.0/16 y 172.28.0.0/16 para pods y para el servicio respectivamente. Si estas subredes ya están en uso en la red, puede ejecutar el cmdlet Set-HcsKubeClusterNetworkInfo para cambiarlas.

Se debe realizar este cambio antes de configurar el proceso en Azure Portal, ya que el clúster de Kubernetes se crea en este paso.

  1. Conexión a la interfaz de PowerShell del dispositivo.

  2. Desde dicha interfaz de PowerShell, ejecute lo siguiente:

    Set-HcsKubeClusterNetworkInfo -PodSubnet <subnet details> -ServiceSubnet <subnet details>

    Reemplace los <detalles de subred> por el intervalo de subred que quiera usar.

  3. Una vez que haya ejecutado este comando, puede usar el comando Get-HcsKubeClusterNetworkInfo para comprobar que las subredes de pods y de servicio han cambiado.

A continuación se muestra una salida de ejemplo de este comando.

[10.100.10.10]: PS>Set-HcsKubeClusterNetworkInfo -PodSubnet 10.96.0.1/16 -ServiceSubnet 10.97.0.1/16
[10.100.10.10]: PS>Get-HcsKubeClusterNetworkInfo

Id                                   PodSubnet    ServiceSubnet
--                                   ---------    -------------
6dbf23c3-f146-4d57-bdfc-76cad714cfd1 10.96.0.1/16 10.97.0.1/16
[10.100.10.10]: PS>

Antes de empezar, debe disponer de lo siguiente:

En un dispositivo Azure Stack Edge Pro GPU que tenga configurado el rol de proceso, puede solucionar problemas o supervisar el dispositivo con dos conjuntos diferentes de comandos.

  • Uso de comandos de iotedge Estos comandos están disponibles para las operaciones básicas del dispositivo.
  • Uso de comandos de kubectl Estos comandos están disponibles para un amplio conjunto de operaciones para el dispositivo.

Para ejecutar cualquiera de los comandos anteriores, debe conectarse a la interfaz de PowerShell.

Usar comandos iotedge

Para ver una lista de comandos disponibles, conéctese a la interfaz de PowerShell y utilice la función iotedge.

[10.100.10.10]: PS>iotedge -?                                                                                                                           
Usage: iotedge COMMAND

Commands:
   list
   logs
   restart

[10.100.10.10]: PS>

En la tabla siguiente se proporciona una breve descripción de los comandos disponibles para iotedge:

command Descripción
list Enumere los módulos
logs Captura los registros de un módulo.
restart Detiene y reinicia un módulo.

Enumeración de todos los módulos de IoT Edge

Para enumerar todos los módulos que se ejecutan en el dispositivo, use el comando iotedge list.

Esta es una salida de ejemplo del comando. Este comando muestra todos los módulos, la configuración asociada y las direcciones IP externas asociadas a los módulos. Por ejemplo, puede acceder a la aplicación del servidor web en https://10.128.44.244.

[10.100.10.10]: PS>iotedge list

NAME                   STATUS  DESCRIPTION CONFIG                                             EXTERNAL-IP
----                   ------  ----------- ------                                             -----
gettingstartedwithgpus Running Up 10 days  mcr.microsoft.com/intelligentedge/solutions:latest
iotedged               Running Up 10 days  azureiotedge/azureiotedge-iotedged:0.1.0-beta10    <none>
edgehub                Running Up 10 days  mcr.microsoft.com/azureiotedge-hub:1.0             10.128.44.243
edgeagent              Running Up 10 days  azureiotedge/azureiotedge-agent:0.1.0-beta10
webserverapp           Running Up 10 days  nginx:stable                                       10.128.44.244

[10.100.10.10]: PS>

Reinicio de módulos

Puede usar el comando list para enumerar todos los módulos que se ejecutan en el dispositivo. A continuación, identifique el nombre del módulo que desea reiniciar y úselo con el comando restart.

A continuación, se muestra una salida de ejemplo de cómo reiniciar un módulo. En función de la descripción de cuánto tiempo se ejecuta el módulo, puede ver que cuda-sample1 se ha reiniciado.

[10.100.10.10]: PS>iotedge list

NAME         STATUS  DESCRIPTION CONFIG                                          EXTERNAL-IP PORT(S)
----         ------  ----------- ------                                          ----------- -------
edgehub      Running Up 5 days   mcr.microsoft.com/azureiotedge-hub:1.0          10.57.48.62 443:31457/TCP,5671:308
                                                                                             81/TCP,8883:31753/TCP
iotedged     Running Up 7 days   azureiotedge/azureiotedge-iotedged:0.1.0-beta13 <none>      35000/TCP,35001/TCP
cuda-sample2 Running Up 1 days   nvidia/samples:nbody
edgeagent    Running Up 7 days   azureiotedge/azureiotedge-agent:0.1.0-beta13
cuda-sample1 Running Up 1 days   nvidia/samples:nbody

[10.100.10.10]: PS>iotedge restart cuda-sample1
[10.100.10.10]: PS>iotedge list

NAME         STATUS  DESCRIPTION  CONFIG                                          EXTERNAL-IP PORT(S)
----         ------  -----------  ------                                          ----------- -------
edgehub      Running Up 5 days    mcr.microsoft.com/azureiotedge-hub:1.0          10.57.48.62 443:31457/TCP,5671:30
                                                                                              881/TCP,8883:31753/TC
                                                                                              P
iotedged     Running Up 7 days    azureiotedge/azureiotedge-iotedged:0.1.0-beta13 <none>      35000/TCP,35001/TCP
cuda-sample2 Running Up 1 days    nvidia/samples:nbody
edgeagent    Running Up 7 days    azureiotedge/azureiotedge-agent:0.1.0-beta13
cuda-sample1 Running Up 4 minutes nvidia/samples:nbody

[10.100.10.10]: PS>

Obtención de los registros del módulo

Use el comando logs para obtener los registros de cualquier módulo de IoT Edge que se ejecute en el dispositivo.

Si se ha producido un error al crear la imagen de contenedor o durante la extracción de la imagen, ejecute logs edgeagent. edgeagent es el contenedor de tiempo de ejecución de IoT Edge, que es responsable del aprovisionamiento de otros contenedores. Dado que logs edgeagent hace un volcado de todos los registros, una buena forma de ver los errores recientes consiste en usar la opción --tail 0`.

Esta es una salida de ejemplo:

[10.100.10.10]: PS>iotedge logs cuda-sample2 --tail 10
[10.100.10.10]: PS>iotedge logs edgeagent --tail 10
<6> 2021-02-25 00:52:54.828 +00:00 [INF] - Executing command: "Report EdgeDeployment status: [Success]"
<6> 2021-02-25 00:52:54.829 +00:00 [INF] - Plan execution ended for deployment 11
<6> 2021-02-25 00:53:00.191 +00:00 [INF] - Plan execution started for deployment 11
<6> 2021-02-25 00:53:00.191 +00:00 [INF] - Executing command: "Create an EdgeDeployment with modules: [cuda-sample2, edgeAgent, edgeHub, cuda-sample1]"
<6> 2021-02-25 00:53:00.212 +00:00 [INF] - Executing command: "Report EdgeDeployment status: [Success]"
<6> 2021-02-25 00:53:00.212 +00:00 [INF] - Plan execution ended for deployment 11
<6> 2021-02-25 00:53:05.319 +00:00 [INF] - Plan execution started for deployment 11
<6> 2021-02-25 00:53:05.319 +00:00 [INF] - Executing command: "Create an EdgeDeployment with modules: [cuda-sample2, edgeAgent, edgeHub, cuda-sample1]"
<6> 2021-02-25 00:53:05.412 +00:00 [INF] - Executing command: "Report EdgeDeployment status: [Success]"
<6> 2021-02-25 00:53:05.412 +00:00 [INF] - Plan execution ended for deployment 11
[10.100.10.10]: PS>

Nota

Los métodos directos como GetModuleLogs o UploadModuleLogs no se admiten en IoT Edge en Kubernetes en Azure Stack Edge.

Uso de comandos de kubectl

En un dispositivo de Azure Stack Edge Pro GPU con el rol de proceso configurado, están disponibles todos los comandos de kubectl para supervisar o solucionar problemas de los módulos. Para ver una lista de los comandos disponibles, ejecute kubectl --help desde la ventana de comandos.

C:\Users\myuser>kubectl --help

kubectl controls the Kubernetes cluster manager.

Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/

Basic Commands (Beginner):
    create         Create a resource from a file or from stdin.
    expose         Take a replication controller, service, deployment or pod and expose it as a new Kubernetes Service
    run            Run a particular image on the cluster
    set            Set specific features on objects
    run-container  Run a particular image on the cluster. This command is deprecated, use "run" instead
==============CUT=============CUT============CUT========================

Usage:
    kubectl [flags] [options]

Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).

C:\Users\myuser>

Si quiere obtener una lista completa de los comandos de kubectl, vaya a la hoja de referencia de kubectl.

Para obtener la dirección IP del servicio o módulo expuesto fuera del clúster de Kubernetes

Para obtener la dirección IP de un servicio de equilibrio de carga o los módulos expuestos fuera del Kubernetes, ejecute el siguiente comando:

kubectl get svc -n iotedge

A continuación se muestra una salida de ejemplo de todos los servicios o módulos que se exponen fuera del clúster de Kubernetes.

[10.100.10.10]: PS>kubectl get svc -n iotedge
NAME           TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                                       AGE
edgehub        LoadBalancer   10.103.52.225   10.128.44.243   443:31987/TCP,5671:32336/TCP,8883:30618/TCP   34h
iotedged       ClusterIP      10.107.236.20   <none>          35000/TCP,35001/TCP                           3d8h
webserverapp   LoadBalancer   10.105.186.35   10.128.44.244   8080:30976/TCP                                16h

[10.100.10.10]: PS>

La dirección IP de la columna IP externa corresponde al punto de conexión externo del servicio o del módulo. También puede obtener la dirección IP externa en el panel de Kubernetes.

Comprobación de si el módulo se ha implementado correctamente

Los módulos de proceso son contenedores que tienen una lógica de negocios implementada. Un pod de Kubernetes puede tener varios contenedores en ejecución.

Para comprobar si un módulo de proceso se implementa correctamente, conéctese a la interfaz de PowerShell del dispositivo. Ejecute el comando get pods y compruebe si se está ejecutando el contenedor (que corresponde al módulo de proceso).

Para obtener la lista de todos los pods que se ejecutan en un espacio de nombres específico, ejecute el siguiente comando:

get pods -n <namespace>

Para comprobar los módulos implementados con IoT Edge, ejecute el siguiente comando:

get pods -n iotedge

A continuación se muestra una salida de ejemplo de todos los pods que se ejecutan en el espacio de nombres iotedge.

[10.100.10.10]: PS>kubectl get pods -n iotedge
NAME                        READY   STATUS    RESTARTS   AGE
edgeagent-cf6d4ffd4-q5l2k   2/2     Running   0          20h
edgehub-8c9dc8788-2mvwv     2/2     Running   0          56m
filemove-66c49984b7-h8lxc   2/2     Running   0          56m
iotedged-675d7f4b5f-9nml4   1/1     Running   0          20h

[10.100.10.10]: PS>

El estado Estado indica que se están ejecutando todos los pods en el espacio de nombres y el estado Listo indica el número de contenedores implementados en un pod. En el ejemplo anterior, todos los pods están en ejecución y todos los módulos implementados en cada uno de los pods se están ejecutando.

Para comprobar los módulos implementados mediante Azure Arc, ejecute el siguiente comando:

get pods -n azure-arc

Como alternativa, puede conectarse al panel de Kubernetes para ver IoT Edge o implementaciones de Azure Arc.

Para obtener una salida más detallada de un pod específico para un espacio de nombres determinado, puede ejecutar el siguiente comando:

kubectl describe pod <pod name> -n <namespace>

A continuación se muestra la salida de ejemplo.

[10.100.10.10]: PS>kubectl describe pod filemove-66c49984b7 -n iotedge
Name:           filemove-66c49984b7-h8lxc
Namespace:      iotedge
Priority:       0
Node:           k8s-1hwf613cl-1hwf613/10.139.218.12
Start Time:     Thu, 14 May 2020 12:46:28 -0700
Labels:         net.azure-devices.edge.deviceid=myasegpu-edge
                net.azure-devices.edge.hub=myasegpu2iothub.azure-devices.net
                net.azure-devices.edge.module=filemove
                pod-template-hash=66c49984b7
Annotations:    net.azure-devices.edge.original-moduleid: filemove
Status:         Running
IP:             172.17.75.81
IPs:            <none>
Controlled By:  ReplicaSet/filemove-66c49984b7
Containers:
    proxy:
    Container ID:   docker://fd7975ca78209a633a1f314631042a0892a833b7e942db2e7708b41f03e8daaf
    Image:          azureiotedge/azureiotedge-proxy:0.1.0-beta8
    Image ID:       docker://sha256:5efbf6238f13d24bab9a2b499e5e05bc0c33ab1587d6cf6f289cdbe7aa667563
    Port:           <none>
    Host Port:      <none>
    State:          Running
        Started:      Thu, 14 May 2020 12:46:30 -0700
    Ready:          True
    Restart Count:  0
    Environment:
        PROXY_LOG:  Debug
=============CUT===============================CUT===========================
Volumes:
    config-volume:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      iotedged-proxy-config
    Optional:  false
    trust-bundle-volume:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      iotedged-proxy-trust-bundle
    Optional:  false
    myasesmb1local:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  myasesmb1local
    ReadOnly:   false
    myasesmb1:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  myasesmb1
    ReadOnly:   false
    filemove-token-pzvw8:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  filemove-token-pzvw8
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                    node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>


[10.100.10.10]: PS>

Para obtener registros de contenedores

Para obtener los registros de un módulo, ejecute el siguiente comando desde la interfaz de PowerShell del dispositivo:

kubectl logs <pod_name> -n <namespace> --all-containers

Dado que la marca all-containers vuelca todos los registros de todos los contenedores, una buena manera de ver los errores recientes es usar la opción --tail 10.

A continuación se muestra una salida de ejemplo.

[10.100.10.10]: PS>kubectl logs filemove-66c49984b7-h8lxc -n iotedge --all-containers --tail 10
DEBUG 2020-05-14T20:40:42Z: loop process - 0 events, 0.000s
DEBUG 2020-05-14T20:40:44Z: loop process - 0 events, 0.000s
DEBUG 2020-05-14T20:40:44Z: loop process - 0 events, 0.000s
DEBUG 2020-05-14T20:40:44Z: loop process - 1 events, 0.000s
DEBUG 2020-05-14T20:40:44Z: loop process - 0 events, 0.000s
DEBUG 2020-05-14T20:42:12Z: loop process - 0 events, 0.000s
DEBUG 2020-05-14T20:42:14Z: loop process - 0 events, 0.000s
DEBUG 2020-05-14T20:42:14Z: loop process - 0 events, 0.000s
DEBUG 2020-05-14T20:42:14Z: loop process - 1 events, 0.000s
DEBUG 2020-05-14T20:42:14Z: loop process - 0 events, 0.000s
05/14/2020 19:46:44: Info: Opening module client connection.
05/14/2020 19:46:45: Info: Open done.
05/14/2020 19:46:45: Info: Initializing with input: /home/input, output: /home/output, protocol: Amqp.
05/14/2020 19:46:45: Info: IoT Hub module client initialized.

[10.100.10.10]: PS>

Cambio de límites de memoria o procesador para el nodo de trabajo de Kubernetes

Para cambiar los límites de memoria o procesador para el nodo de trabajo de Kubernetes, siga estos pasos:

  1. Conexión a la interfaz de PowerShell del dispositivo.

  2. Para obtener los recursos actuales para el nodo de trabajo y las opciones de rol, ejecute el siguiente comando:

    Get-AzureDataBoxEdgeRole

    Esta es una salida de ejemplo. Tenga en cuenta los valores de Name y Compute en la sección Resources. MemoryInBytes y ProcessorCount indican los valores asignados actualmente de memoria y número de procesadores para el nodo de trabajo de Kubernetes.

    [10.100.10.10]: PS>Get-AzureDataBoxEdgeRole
    ImageDetail                : Name:mcr.microsoft.com/azureiotedge-agent
                                 Tag:1.0
                                 PlatformType:Linux
    EdgeDeviceConnectionString :
    IotDeviceConnectionString  :
    HubHostName                : ase-srp-007.azure-devices.net
    IotDeviceId                : srp-007-storagegateway
    EdgeDeviceId               : srp-007-edge
    Version                    :
    Id                         : 6ebeff9f-84c5-49a7-890c-f5e05520a506
    Name                       : IotRole
    Type                       : IOT
    Resources                  : Compute:
                                 MemoryInBytes:34359738368
                                 ProcessorCount:12
                                 VMProfile:
    
                                 Storage:
                                 EndpointMap:
                                 EndpointId:c0721210-23c2-4d16-bca6-c80e171a0781
                                 TargetPath:mysmbedgecloudshare1
                                 Name:mysmbedgecloudshare1
                                 Protocol:SMB
    
                                 EndpointId:6557c3b6-d3c5-4f94-aaa0-6b7313ab5c74
                                 TargetPath:mysmbedgelocalshare
                                 Name:mysmbedgelocalshare
                                 Protocol:SMB
                                 RootFileSystemStorageSizeInBytes:0
    
    HostPlatform               : KubernetesCluster
    State                      : Created
    PlatformType               : Linux
    HostPlatformInstanceId     : 994632cb-853e-41c5-a9cd-05b36ddbb190
    IsHostPlatformOwner        : True
    IsCreated                  : True    
    [10.100.10.10]: PS>
    
  3. Para cambiar los valores de memoria y procesadores del nodo de trabajo, ejecute el siguiente comando:

    Set-AzureDataBoxEdgeRoleCompute -Name <Name value from the output of Get-AzureDataBoxEdgeRole> -Memory <Value in Bytes> -ProcessorCount <No. of cores>
    

    Esta es una salida de ejemplo.

    [10.100.10.10]: PS>Set-AzureDataBoxEdgeRoleCompute -Name IotRole -MemoryInBytes 32GB -ProcessorCount 16
    
    ImageDetail                : Name:mcr.microsoft.com/azureiotedge-agent
                                 Tag:1.0
                                 PlatformType:Linux
    
    EdgeDeviceConnectionString :
    IotDeviceConnectionString  :
    HubHostName                : ase-srp-007.azure-devices.net
    IotDeviceId                : srp-007-storagegateway
    EdgeDeviceId               : srp-007-edge
    Version                    :
    Id                         : 6ebeff9f-84c5-49a7-890c-f5e05520a506
    Name                       : IotRole
    Type                       : IOT
    Resources                  : Compute:
                                 MemoryInBytes:34359738368
                                 ProcessorCount:16
                                 VMProfile:
    
                                 Storage:
                                 EndpointMap:
                                 EndpointId:c0721210-23c2-4d16-bca6-c80e171a0781
                                 TargetPath:mysmbedgecloudshare1
                                 Name:mysmbedgecloudshare1
                                 Protocol:SMB
    
                                 EndpointId:6557c3b6-d3c5-4f94-aaa0-6b7313ab5c74
                                 TargetPath:mysmbedgelocalshare
                                 Name:mysmbedgelocalshare
                                 Protocol:SMB
    
                                 RootFileSystemStorageSizeInBytes:0
    
    HostPlatform               : KubernetesCluster
    State                      : Created
    PlatformType               : Linux
    HostPlatformInstanceId     : 994632cb-853e-41c5-a9cd-05b36ddbb190
    IsHostPlatformOwner        : True
    IsCreated                  : True
    
    [10.100.10.10]: PS>    
    

Al cambiar el uso de la memoria y el procesador, siga estas instrucciones.

  • La memoria predeterminada es el 25 % de la especificación del dispositivo.
  • El número de procesadores predeterminado es el 30 % de la especificación del dispositivo.
  • Al cambiar los valores de memoria y la cantidad de procesadores, se recomienda que varíe los valores entre el 15 % y el 60 % de la memoria del dispositivo y el número de procesadores.
  • Se recomienda un límite superior del 60 % para que haya suficientes recursos para los componentes del sistema.

Conexión al BMC

El controlador de administración de placa base (BMC) se usa para supervisar y administrar el dispositivo de forma remota. En esta sección se describen los cmdlets que se pueden usar para administrar la configuración de BMC. Antes de ejecutar cualquiera de estos cmdlets, conéctese a la interfaz de PowerShell del dispositivo.

  • Get-HcsNetBmcInterface: use este cmdlet para obtener las propiedades de configuración de red del BMC, por ejemplo, IPv4Address, IPv4Gateway, IPv4SubnetMaskDhcpEnabled.

    Este es una salida de ejemplo:

    [10.100.10.10]: PS>Get-HcsNetBmcInterface
    IPv4Address   IPv4Gateway IPv4SubnetMask DhcpEnabled
    -----------   ----------- -------------- -----------
    10.128.53.186 10.128.52.1 255.255.252.0        False
    [10.100.10.10]: PS>
    
  • Set-HcsNetBmcInterface: puede usar este cmdlet de dos maneras.

    • Use el cmdlet para habilitar o deshabilitar la configuración de DHCP para BMC con el valor adecuado del parámetro UseDhcp.

      Set-HcsNetBmcInterface -UseDhcp $true
      

      Este es una salida de ejemplo:

      [10.100.10.10]: PS>Set-HcsNetBmcInterface -UseDhcp $true
      [10.100.10.10]: PS>Get-HcsNetBmcInterface
      IPv4Address IPv4Gateway IPv4SubnetMask DhcpEnabled
      ----------- ----------- -------------- -----------
      10.128.54.8 10.128.52.1 255.255.252.0         True
      [10.100.10.10]: PS>
      
    • Use este cmdlet para realizar la configuración estática del BMC. Puede especificar los valores de IPv4Address, IPv4Gateway y IPv4SubnetMask.

      Set-HcsNetBmcInterface -IPv4Address "<IPv4 address of the device>" -IPv4Gateway "<IPv4 address of the gateway>" -IPv4SubnetMask "<IPv4 address for the subnet mask>"
      

      Este es una salida de ejemplo:

      [10.100.10.10]: PS>Set-HcsNetBmcInterface -IPv4Address 10.128.53.186 -IPv4Gateway 10.128.52.1 -IPv4SubnetMask 255.255.252.0
      [10.100.10.10]: PS>Get-HcsNetBmcInterface
      IPv4Address   IPv4Gateway IPv4SubnetMask DhcpEnabled
      -----------   ----------- -------------- -----------
      10.128.53.186 10.128.52.1 255.255.252.0        False
      [10.100.10.10]: PS>
      
  • Set-HcsBmcPassword: use este cmdlet para modificar la contraseña de BMC para EdgeUser. El nombre de usuario, EdgeUser, distingue mayúsculas de minúsculas.

    Este es una salida de ejemplo:

    [10.100.10.10]: PS> Set-HcsBmcPassword -NewPassword "Password1"
    [10.100.10.10]: PS>
    

Salir de la sesión remota

Para salir de la sesión remota de PowerShell, cierre la ventana de PowerShell.

Pasos siguientes