共用方式為


在 Azure Stack Edge 上的 Ubuntu VM 上部署 IoT Edge

適用於: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 裝置上執行的 Ubuntu VM 上部署 IoT Edge 執行階段。 對於新的開發工作,請在其使用最新的軟體版本時,使用本文中所述的自助式部署方法。

高階流程

高階流程如下所示:

  1. 建立或識別 IoT 中樞或 Azure IoT Hub Device Provisioning Service (DPS) 執行個體。
  2. 使用 Azure CLI 來取得 Ubuntu 20.04 LTS VM 映像。
  3. 將 Ubuntu 映像上傳至 Azure Stack Edge VM 映像庫。
  4. 使用下列步驟來將 Ubuntu 映像部署為 VM:
    1. 提供 VM 的名稱、使用者名稱和密碼。 選擇性地建立另一個磁碟。
    2. 設定網路組態
    3. 在 [進階] 索引標籤上提供準備的 cloud-init 指令碼。

必要條件

開始之前,請確定您已有:

  • 您已啟用的 Azure Stack Edge 裝置。 如需詳細步驟,請參閱啟用 Azure Stack Edge Pro GPU

  • 存取最新的 Ubuntu 20.04 VM 映像 (來自 Azure Marketplace 的映像,或您自己帶來的自訂映像):

    $urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160

    使用搜尋 Azure Marketplace 映像中的步驟來取得 VM 映像。

準備 cloud-init 指令碼

若要將 IoT Edge 執行階段部署到 Ubuntu VM,請在 VM 部署期間使用 cloud-init 指令碼。

使用下列其中一節中的步驟:

使用對稱金鑰佈建

若要將裝置連線到沒有 DPS 的 IoT 中樞,請針對 VM 建立進階頁面,使用本節中的步驟來準備 cloud-init 指令碼,以部署 IoT Edge 執行階段和 Nvidia 的容器執行階段。

  1. 使用現有的 IoT 中樞或建立新的中樞。 使用下列步驟來建立 IoT 中樞

  2. 使用下列步驟以在 IoT 中樞中註冊您的 Azure Stack Edge 裝置

  3. 針對您的裝置從 IoT 中樞擷取主要的連接字串,然後將它貼到下面的 DeviceConnectionString 位置。

適用於對稱金鑰佈建的 Cloud-init 指令碼


#cloud-config

runcmd:
  - dcs="<DeviceConnectionString>"
  - |
      set -x
      (

        # Wait for docker daemon to start

        while [ $(ps -ef | grep -v grep | grep docker | wc -l) -le 0 ]; do 
          sleep 3
        done
        
        if [ $(lspci | grep NVIDIA | wc -l) -gt 0 ]; then

          #install Nvidia drivers

          apt install -y ubuntu-drivers-common
         ubuntu-drivers devices
          ubuntu-drivers autoinstall

          # Install NVIDIA Container Runtime

          curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | apt-key add -
          distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
          curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | tee /etc/apt/sources.list.d/nvidia-container-runtime.list
          apt update
          apt install -y nvidia-container-runtime
        fi
        
        # Restart Docker

        systemctl daemon-reload
        systemctl restart docker

        # Install IoT Edge

        apt install -y aziot-edge

        if [ ! -z $dcs ]; then
          iotedge config mp --connection-string $dcs
          iotedge config apply
        fi
      if [ $(lspci | grep NVIDIA | wc -l) -gt 0 ]; then      
         reboot
      fi       ) &

apt:
  preserve_sources_list: true
  sources:
    msft.list:
      source: "deb https://packages.microsoft.com/ubuntu/20.04/prod focal main"
      key: |
        -----BEGIN PGP PUBLIC KEY BLOCK-----
        Version: GnuPG v1.4.7 (GNU/Linux)

        mQENBFYxWIwBCADAKoZhZlJxGNGWzqV+1OG1xiQeoowKhssGAKvd+buXCGISZJwT
        LXZqIcIiLP7pqdcZWtE9bSc7yBY2MalDp9Liu0KekywQ6VVX1T72NPf5Ev6x6DLV
        7aVWsCzUAF+eb7DC9fPuFLEdxmOEYoPjzrQ7cCnSV4JQxAqhU4T6OjbvRazGl3ag
        OeizPXmRljMtUUttHQZnRhtlzkmwIrUivbfFPD+fEoHJ1+uIdfOzZX8/oKHKLe2j
        H632kvsNzJFlROVvGLYAk2WRcLu+RjjggixhwiB+Mu/A8Tf4V6b+YppS44q8EvVr
        M+QvY7LNSOffSO6Slsy9oisGTdfE39nC7pVRABEBAAG0N01pY3Jvc29mdCAoUmVs
        ZWFzZSBzaWduaW5nKSA8Z3Bnc2VjdXJpdHlAbWljcm9zb2Z0LmNvbT6JATUEEwEC
        AB8FAlYxWIwCGwMGCwkIBwMCBBUCCAMDFgIBAh4BAheAAAoJEOs+lK2+EinPGpsH
        /32vKy29Hg51H9dfFJMx0/a/F+5vKeCeVqimvyTM04C+XENNuSbYZ3eRPHGHFLqe
        MNGxsfb7C7ZxEeW7J/vSzRgHxm7ZvESisUYRFq2sgkJ+HFERNrqfci45bdhmrUsy
        7SWw9ybxdFOkuQoyKD3tBmiGfONQMlBaOMWdAsic965rvJsd5zYaZZFI1UwTkFXV
        KJt3bp3Ngn1vEYXwijGTa+FXz6GLHueJwF0I7ug34DgUkAFvAs8Hacr2DRYxL5RJ
        XdNgj4Jd2/g6T9InmWT0hASljur+dJnzNiNCkbn9KbX7J/qK1IbR8y560yRmFsU+
        NdCFTW7wY0Fb1fWJ+/KTsC4=
        =J6gs
        -----END PGP PUBLIC KEY BLOCK----- 
packages:
  - moby-cli
  - moby-engine
write_files:
  - path: /etc/systemd/system/docker.service.d/override.conf
    permissions: "0644"
    content: |
      [Service]
      ExecStart=
      ExecStart=/usr/bin/dockerd --host=fd:// --add-runtime=nvidia=/usr/bin/nvidia-container-runtime --log-driver local

使用 DPS

使用本節中的步驟來將裝置連線到 DPS 和 IoT Central。 您將準備 script.sh 檔案,以在建立 VM 時部署 IoT Edge 執行階段。

  1. 使用現有的 IoT 中樞和 DPS,或建立新的 IoT 中樞。

  2. 移至 DPS 資源並建立個別的註冊。 

    1. 移至 [裝置佈建服務]>[管理註冊]>[新增個別註冊]
    2. 請確定將 [用於證明類型及 IoT Edge 裝置的對稱金鑰] 選為 True。 預設的選取為 False
    3. 從 DPS 資源頁面中擷取下列資訊:
      • 註冊識別碼。 建議您針對 IoT 中樞使用與裝置 ID 相同的 ID。
      • [概觀功能表] 中提供的 [ID 範圍]。
      • [個別註冊] 功能表中的 [主要 SAS 金鑰]。
  3. 複製 IoT Hub (IDScope) 和 DPS (RegistrationID, Symmetric Key) 中的值並貼到指令碼引數中。

適用於 IoT 中樞 DPS 的 Cloud-init 指令碼


#cloud-config

runcmd:
    - dps_idscope="<DPS IDScope>"
    - registration_device_id="<RegistrationID>"
    - key="<Symmetric Key>"
    - |
      set -x
      (
      
      wget https://github.com/Azure/iot-edge-config/releases/latest/download/azure-iot-edge-installer.sh -O azure-iot-edge-installer.sh \
      && chmod +x azure-iot-edge-installer.sh \
      && sudo -H ./azure-iot-edge-installer.sh -s $dps_idscope -r $registration_device_id -k $key \
      && rm -rf azure-iot-edge-installer.sh
      
      # Wait for docker daemon to start

      while [ $(ps -ef | grep -v grep | grep docker | wc -l) -le 0 ]; do 
        sleep 3
      done

      systemctl stop aziot-edge

      if [ $(lspci | grep NVIDIA | wc -l) -gt 0 ]; then

        #install Nvidia drivers

        apt install -y ubuntu-drivers-common
        ubuntu-drivers devices
        ubuntu-drivers autoinstall

        # Install NVIDIA Container Runtime

        curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | apt-key add -
        distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
        curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | tee /etc/apt/sources.list.d/nvidia-container-runtime.list
        apt update
        apt install -y nvidia-container-runtime
      fi

      # Restart Docker

      systemctl daemon-reload
      systemctl restart docker

      systemctl start aziot-edge    
      if [ $(lspci | grep NVIDIA | wc -l) -gt 0 ]; then      
         reboot
      fi
      ) &
write_files:
  - path: /etc/systemd/system/docker.service.d/override.conf
    permissions: "0644"
    content: |
      [Service]
      ExecStart=
      ExecStart=/usr/bin/dockerd --host=fd:// --add-runtime=nvidia=/usr/bin/nvidia-container-runtime --log-driver local

部署 IoT Edge 執行階段

使用上面提到的 cloud-init 指令碼,來部署 IoT Edge 執行階段是建立 VM 的一部分。

以下是部署 VM 和 IoT Edge 執行階段的高階步驟:

  1. 從 Azure Marketplace 中取得 Ubuntu VM 映像。 如需詳細步驟,請遵循使用 Azure Marketplace 映像來為您的 Azure Stack Edge 建立 VM 映像中的指示。

    1. Azure 入口網站中,移至 Azure Marketplace。
    2. 連接到 Azure Cloud Shell 或安裝了 Azure CLI 的用戶端。 如需詳細步驟,請參閱 Azure Cloud Shell 中的 Bash 快速入門

    注意

    若關閉 shell 工作階段,將刪除在 shell 工作階段期間所建立的所有變數。 重新開啟工作階段時,將需要重新建立變數。

    c. 執行下列命令來設定訂用帳戶。

    az account set –subscription <subscription id>
    
  2. 使用搜尋 Azure Marketplace 映像中的步驟,在 Azure Marketplace 中搜尋 Ubuntu 20.04 LTS 映像。

    Ubuntu 20.04 LTS 映像的範例:

    $urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
    
  3. 從 Marketplace 映像中建立新的受控磁碟。 如需詳細步驟,請參閱使用 Azure Marketplace 映像來為您的 Azure Stack Edge 建立 VM 映像

  4. 將 VHD 從受控磁碟中匯出至 Azure 儲存體帳戶。 如需詳細步驟,請參閱將 VHD 從受控磁碟中匯出至 Azure 儲存體

  5. 請遵循下列步驟來使用 VM 映像建立 Ubuntu VM。

    1. 在 [進階] 索引標籤上指定 cloud-init 指令碼。若要建立 VM,請參閱透過 Azure 入口網站部署 GPU VM透過 Azure 入口網站部署 VM

      Screenshot of the Advanced tab of VM configuration in the Azure portal.

    2. cloud-init 中指定適當的裝置連接字串,以連線到 IoT 中樞 或 DPS 裝置。 如需詳細步驟,請參閱使用對稱金鑰佈建使用 IoT 中樞 DPS 佈建

      Screenshot of the Custom data field of VM configuration in the Azure portal.

如果您在建立 VM 期間未指定 cloud-init,則必須在建立 VM 之後手動部署 IoT Edge 執行階段:

  1. 透過 SSH 連線到 VM。
  2. 在 VM 上安裝容器引擎。 如需詳細步驟,請參閱使用對稱金鑰在 Linux 上建立及佈建 IoT Edge 裝置快速入門 - 透過 Azure 入口網站來設定 IoT 中樞 DPS

確認 IoT Edge 執行階段

使用下列步驟來確認您的 IoT Edge 執行階段正在執行。

  1. 在 Azure 入口網站中,移至 IoT 中樞資源。

  2. 選取 IoT Edge 裝置。

  3. 確認 IoT Edge 執行階段正在執行。

    Screenshot of the IoT Edge runtime status in the Azure portal.

    若要針對 IoT Edge 裝置設定進行疑難排解,請參閱針對您的 IoT Edge 裝置進行疑難排解

更新 IoT Edge 執行階段

若要更新 VM,請遵循更新 IoT Edge中的指示。 若要尋找最新版的 Azure IoT Edge,請參閱 Azure IoT Edge 版本

下一步

若要在 Ubuntu VM 上部署及執行 IoT Edge 模組,請參閱部署 IoT Edge 模組中的步驟。

若要部署 Nvidia 的 DeepStream 模組,請參閱在具有 GPU 的 Azure Stack Edge Pro 上的 Ubuntu VM 上部署 Nvidia DeepStream 模組

若要部署 NVIDIA DIGITS,請參閱在預先建立的 NVIDIA 模組中啟用 GPU