你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

通过 Windows PowerShell 管理 Azure Stack Edge Pro GPU 设备

适用于:Yes for Pro GPU SKUAzure Stack Edge Pro - GPUYes for Pro 2 SKUAzure Stack Edge Pro 2Yes for Pro R SKUAzure Stack Edge Pro RYes for Mini R SKUAzure Stack Edge Mini R

Azure Stack Edge Pro GPU 解决方案可让你处理数据,并通过网络将数据发送到 Azure。 本文介绍了为 Azure Stack Edge Pro GPU 设备执行的一些配置和管理任务。 可以使用 Azure 门户、本地 Web UI 或 Windows PowerShell 界面来管理设备。

本文重点介绍如何连接到设备的 PowerShell 界面,以及使用此界面可以执行的任务。

连接到 PowerShell 接口

远程连接到设备的过程不同,具体取决于客户端的操作系统。

从 Windows 客户端远程连接

先决条件

在开始之前,请确保:

  • Windows 客户端运行 Windows PowerShell 5.0 或更高版本。

  • 你的 Windows 客户端的签名链(根证书)与设备上安装的节点证书相对应。 有关详细说明,请参阅在 Windows 客户端上安装证书

  • hosts 文件位于 Windows 客户端的 C:\Windows\System32\drivers\etc,具有与节点证书对应的条目,格式如下:

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

    下面是 hosts 文件的示例条目:

    10.100.10.10 1HXQG13.wdshcsso.com

详细步骤

请按照以下步骤从 Windows 客户端进行远程连接。

  1. 以管理员身份运行 Windows PowerShell 会话。

  2. 确保 Windows 远程管理服务正在客户端上运行。 在命令提示符处,键入:

    winrm quickconfig
    

    有关详细信息,请参阅 Windows 远程管理的安装和配置

  3. 将变量分配给 hosts 文件中使用的连接字符串。

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

    <Node serial number><DNS domain of the device> 替换为设备的节点序列号和 DNS 域。 可以从设备的本地 Web UI 中的“证书”页获取节点序列号的值,从“设备”页获取 DNS 域。

  4. 若要将设备的连接字符串添加到客户端的受信任主机列表,请键入以下命令:

    Set-Item WSMan:\localhost\Client\TrustedHosts $Name -Concatenate -Force
    
  5. 在设备上启动 Windows PowerShell 会话:

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

    如果看到与信任关系相关的错误,请检查上传到你的设备的节点证书的签名链是否也安装在访问设备的客户端上。

  6. 根据提示提供密码。 使用登录到本地 Web UI 时所用的同一密码。 默认的本地 Web UI 密码为 Password1。 使用远程 PowerShell 成功连接到设备后,可以看到以下示例输出:

    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>
    

使用 -UseSSL 选项时,将在 https 上通过 PowerShell 进行远程处理。 建议始终使用 https 通过 PowerShell 进行远程连接。 在受信任的网络中,可以使用 http 通过 PowerShell 进行远程连接。 首先在本地 UI 中通过 http 启用远程 PowerShell。 然后,可以使用上述过程(无需 -UseSSL 选项)连接到设备的 PowerShell 接口。

如果使用的不是证书(建议使用证书!),可使用会话选项跳过证书验证检查:-SkipCACheck -SkipCNCheck -SkipRevocationCheck

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

下面是跳过证书检查时的示例输出:

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>

重要

在当前版本中,只能通过 Windows 客户端连接到设备的 PowerShell 接口。 -UseSSL 选项不适用于 Linux 客户端。

创建支持包

如果遇到任何设备问题,可通过系统日志创建支持包。 Microsoft 支持部门使用此包来解决此问题。 按照以下步骤创建支持包:

  1. 连接到设备的 PowerShell 界面

  2. 使用 Get-HcsNodeSupportPackage 命令创建支持包。 此 cmdlet 的用法如下所示:

    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>]
    

    cmdlet 从设备收集日志,并将这些日志复制到指定的网络或本地共享。

    使用的参数如下:

    • -Path - 指定要将支持包复制到的网络或本地路径。 (必需)
    • -Credential - 指定用于访问受保护路径的凭据。
    • -Zip - 指定该参数可生成 zip 文件。
    • -Include - 指定该参数可包含要包含在支持包中的组件。 如果未指定,则假定为 Default
    • -IncludeArchived - 指定该参数可在支持包中包含存档日志。
    • -IncludePeriodicStats - 指定该参数可在支持包中包含定期统计日志。

查看设备信息

  1. 连接到 PowerShell 接口

  2. 使用 Get-HcsApplianceInfo 获取设备的信息。

    以下示例显示了此 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
    

    下表汇总了一些重要的设备信息:

    参数 说明
    FriendlyName 在部署设备期间通过本地 Web UI 配置的设备易记名称。 默认的友好名称为设备序列号。
    SerialNumber 设备序列号是出厂分配的唯一编号。
    型号 Azure Stack Edge 或 Data Box Gateway 设备的模型。 对于 Azure Stack Edge,该模型为物理模型,对于 Data Box Gateway,则为虚拟模型。
    FriendlySoftwareVersion 对应于设备软件版本的友好字符串。 对于运行预览版的系统,友好软件版本将为 Data Box Edge 1902。
    HcsVersion 设备上运行的 HCS 软件版本。 例如,与 Data Box Edge 1902 对应的 HCS 软件版本为 1.4.771.324。
    LocalCapacityInMb 设备的总本地容量(以 MB 为单位)。
    IsRegistered 此值用于指示设备是否已通过该服务激活。

查看 GPU 驱动程序信息

如果在设备上配置了计算角色,则还可以通过 PowerShell 界面获取 GPU 驱动程序信息。

  1. 连接到 PowerShell 接口

  2. 使用 Get-HcsGpuNvidiaSmi 获取设备的 GPU 驱动程序信息。

    以下示例显示了此 cmdlet 的用法:

    Get-HcsGpuNvidiaSmi
    

    请记下此 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 |
    +-------------------------------+----------------------+----------------------+
    

启用多进程服务 (MPS)

Nvidia GPU 上的多进程服务 (MPS) 提供下述机制:GPU 可供多个作业共享,而每个作业分配有某个百分比的 GPU 资源。 MPS 是 Azure Stack Edge Pro GPU 设备上的预览版功能。 若要在设备上启用 MPS,请执行以下步骤:

  1. 在开始之前,请确保:

    1. 已在 Azure 中使用 Azure Stack Edge 资源配置并激活 Azure Stack Edge Pro 设备
    2. 已在 Azure 门户中的此设备上配置了计算
  2. 连接到 PowerShell 接口

  3. 使用以下命令在设备上启用 MPS。

    Start-HcsGpuMPS
    

注意

在更新设备软件和 Kubernetes 群集时,不会为工作负载保留 MPS 设置。 需要重新启用 MPS。

重置设备

若要重置设备,需要安全地擦除设备的数据磁盘和启动磁盘上的所有数据。

使用 Reset-HcsAppliance cmdlet 可擦除数据磁盘和启动磁盘上的数据,或者只擦除数据磁盘上的数据。 使用 SecureWipeBootDiskSecureWipeDataDisks 开关可以分别擦除启动磁盘和数据磁盘上的数据。

SecureWipeBootDisk 开关会擦除启动磁盘上的数据并使设备不可用。 仅当需要将设备退回到 Microsoft 时,才应使用此开关。 有关详细信息,请参阅将设备退回到 Microsoft

如果在本地 Web UI 中使用设备重置,则只会安全地擦除数据磁盘上的数据,而启动磁盘会保持不变。 启动磁盘包含设备配置。

  1. 连接到 PowerShell 接口

  2. 在命令提示符处,键入:

    Reset-HcsAppliance -SecureWipeBootDisk -SecureWipeDataDisks

    下面的示例演示如何使用此 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
    

获取计算日志

如果在设备上配置了计算角色,则还可以通过 PowerShell 界面获取计算日志。

  1. 连接到 PowerShell 接口

  2. 使用 Get-AzureDataBoxEdgeComputeRoleLogs 获取设备的计算日志。

    以下示例显示了此 cmdlet 的用法:

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

    下面是用于该 cmdlet 的参数的说明:

    • Path:提供要在其中创建计算日志包的共享的网络路径。
    • Credential:提供网络共享的用户名。 在运行此 cmdlet 时,需要提供共享密码。
    • FullLogCollection:此参数确保日志包中包含所有计算日志。 在默认情况下,日志包只包含一部分日志。

更改 Kubernetes 工作负荷配置文件

在形成并配置群集并创建了新的虚拟交换机后,可以添加或删除与虚拟交换机关联的虚拟网络。 有关详细步骤,请参阅 “配置虚拟交换机”。

创建虚拟交换机后,可以为 Kubernetes 计算流量启用交换机以指定 Kubernets 工作负荷配置文件。 若要使用本地 UI 执行此操作,请使用“配置计算 IPS”中的步骤。 若要使用 PowerShell 执行此操作,请执行以下步骤:

  1. 连接到 PowerShell 接口

  2. 使用 Get-HcsApplianceInfo cmdlet 获取设备的当前 KubernetesPlatformKubernetesWorkloadProfile 设置。

  3. 使用 Get-HcsKubernetesWorkloadProfiles cmdlet 标识 Azure Stack Edge 设备上可用的配置文件。

    [Device-IP]: PS>Get-HcsKubernetesWorkloadProfiles 
    Type  Description    
    ----  -----------   
    AP5GC an Azure Private MEC solution   
    SAP   a SAP Digital Manufacturing for Edge Computing or another Microsoft partner solution   
    NONE  other workloads
    [Device-IP]: PS>
    
  4. 使用 Set-HcsKubernetesWorkloadProfile cmdlet 为 AP5GC(Azure 专用 MEC 解决方案)设置工作负荷配置文件。

    以下示例显示了此 cmdlet 的用法:

    Set-HcsKubernetesWorkloadProfile -Type "AP5GC"
    

    下面是此 cmdlet 的示例输出:

    [10.100.10.10]: PS>KubernetesPlatform : AKS
    [10.100.10.10]: PS>KubernetesWorkloadProfile : AP5GC
    [10.100.10.10]: PS>
    

更改 Kubernetes Pod 和服务子网

默认情况下,Azure Stack Edge 设备上的 Kubernetes 分别为 pod 和服务使用子网 172.27.0.0/16 和 172.28.0.0/16。 如果这些子网在网络中已被使用,你可以运行 Set-HcsKubeClusterNetworkInfo cmdlet 来更改这些子网。

最好是在从 Azure 门户配置计算之前执行此项配置,因为 Kubernetes 群集就是在此配置计算的步骤中创建的。

  1. 连接到设备的 PowerShell 界面

  2. 在设备的 PowerShell 界面中,运行:

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

    请将 <子网详细信息> 替换为要使用的子网范围。

  3. 运行此命令后,可以使用 Get-HcsKubeClusterNetworkInfo 命令来验证 pod 和服务子网是否已更改。

下面是此命令的示例输出。

[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>

在开始之前,必须:

在配置了计算角色的 Azure Stack Edge Pro GPU 设备上,可以使用两个不同的命令集对设备进行故障排除或监视。

  • 使用 iotedge 命令。 这些命令适用于针对设备的基本操作。
  • 使用 kubectl 命令。 这些命令适用于针对设备的更广泛操作。

若要执行上述任一命令集,需要连接到 PowerShell 界面

使用 iotedge 命令

若要查看可用命令的列表,请连接到 PowerShell 界面并使用 iotedge 函数。

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

Commands:
   list
   logs
   restart

[10.100.10.10]: PS>

下表简要说明了适用于 iotedge 的命令:

命令 说明
list 列出模块
logs 提取模块的日志
restart 停止和重启模块

列出所有 IoT Edge 模块

若要列出设备上运行的所有模块,请使用 iotedge list 命令。

下面是此命令的示例输出。 此命令列出所有模块、关联的配置,以及与模块关联的外部 IP。 例如,可以通过 https://10.128.44.244 访问 webserver 应用。

[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>

重启模块

可使用 list 命令列出设备上运行的所有模块。 然后,确定要重启的模块的名称并对其使用 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: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>

获取模块日志

使用 logs 命令获取设备上运行的任何 IoT Edge 模块的日志。

如果在创建容器映像或在拉取映像时出现错误,请运行 logs edgeagentedgeagent 是负责预配其他容器的 IoT Edge 运行时容器。 由于 logs edgeagent 转储所有日志,因此查看最近发生的错误的适当方法是使用 --tail 0` 选项。

下面是一个示例输出。

[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>

注意

在 Azure Stack Edge 上,Kubernetes 上的 IoT Edge 不支持 GetModuleLogs 或 UploadModuleLogs 等直接方法。

使用 kubectl 命令

在配置了计算角色的 Azure Stack Edge Pro GPU 设备上,所有 kubectl 命令均可用于对模块进行监视或故障排除。 若要查看可用命令的列表,请在命令窗口中运行 kubectl --help

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>

有关 kubectl 命令的完整列表,请参阅 kubectl 速查表

获取在 Kubernetes 群集外部公开的服务或模块的 IP

若要获取在 Kubernetes 外部公开的负载均衡服务的 IP,请运行以下命令:

kubectl get svc -n iotedge

下面是在 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>

“外部 IP”列中的 IP 地址对应于服务或模块的外部终结点。 还可以在 Kubernetes 仪表板中获取外部 IP

检查模块是否已成功部署

计算模块是已实现业务逻辑的容器。 一个 Kubernetes pod 可以包含多个运行的容器。

若要检查是否已成功部署计算模块,请连接到设备的 PowerShell 界面。 运行 get pods 命令,然后检查容器(对应于计算模块)是否正在运行。

若要获取特定命名空间中运行的所有 pod 的列表,请运行以下命令:

get pods -n <namespace>

若要检查通过 IoT Edge 部署的模块,请运行以下命令:

get pods -n iotedge

下面是 iotedge 命名空间中运行的所有 pod 的示例输出。

[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>

“Status”列下的状态指示命名空间中的所有 pod 正在运行,“Ready”指示 pod 中部署的容器数。 在以上示例中,所有 pod 正在运行,部署在每个 pod 中的所有模块也正在运行。

若要检查通过 Azure Arc 部署的模块,请运行以下命令:

get pods -n azure-arc

或者,可以连接到 Kubernetes 仪表板以查看 IoT Edge 或 Azure Arc 部署

要获取给定命名空间的特定 pod 的更详细输出,可运行以下命令:

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

下面显示了示例输出。

[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>

获取容器日志

若要获取模块的日志,请在设备的 PowerShell 界面中运行以下命令:

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

由于 all-containers 标志将转储所有容器的所有日志,因此查看最近发生的错误的适当方法是使用选项 --tail 10

下面是示例输出。

[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>

更改 Kubernetes 工作器节点的内存或处理器限制

若要更改 Kubernetes 工作器节点的内存或处理器限制,请执行以下步骤:

  1. 连接到设备的 PowerShell 界面

  2. 若要获取工作器节点和角色选项的当前资源,请运行以下命令:

    Get-AzureDataBoxEdgeRole

    下面是一个示例输出。 请注意 Resources 节下的 NameCompute 值。 MemoryInBytesProcessorCount 表示当前为 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. 若要更改工作器节点的内存和处理器值,请运行以下命令:

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

    下面是一个示例输出。

    [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>    
    

更改内存和处理器使用率时,请遵循以下指导原则。

  • 默认内存为设备规格的 25%。
  • 默认处理器计数为设备规格的 30%。
  • 更改内存和处理器计数值时,我们建议在设备内存和处理器计数的 15% 到 60% 之间改变值。
  • 建议的上限为 60%,以便为系统组件提供足够的资源。

连接到 BMC

基板管理控制器 (BMC) 用于远程监视和管理设备。 本部分介绍可用于管理 BMC 配置的 cmdlet。 在运行其中的任何 cmdlet 之前,请连接到设备的 PowerShell 界面

  • Get-HcsNetBmcInterface:使用此 cmdlet 可以获取 BMC 的网络配置属性,例如 IPv4AddressIPv4GatewayIPv4SubnetMaskDhcpEnabled

    下面是示例输出:

    [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:可通过以下两种方式使用此 cmdlet。

    • 使用该 cmdlet 并通过对 UseDhcp 参数使用适当的值,为 BMC 启用或禁用 DHCP 配置。

      Set-HcsNetBmcInterface -UseDhcp $true
      

      下面是示例输出:

      [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>
      
    • 使用此 cmdlet 可以配置 BMC 的静态配置。 可以指定 IPv4AddressIPv4GatewayIPv4SubnetMask 的值。

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

      下面是示例输出:

      [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:使用此 cmdlet 可以修改 EdgeUser 的 BMC 密码。 用户名 EdgeUser 区分大小写。

    下面是示例输出:

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

退出远程会话

若要退出远程 PowerShell 会话,请关闭 PowerShell 窗口。

后续步骤