Развертывание IoT Edge на виртуальной машине Ubuntu в Azure Stack 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

В этой статье описывается развертывание среды выполнения IoT Edge на виртуальной машине Ubuntu, работающей на устройстве Azure Stack Edge. Для новой работы по разработке используйте метод самостоятельного развертывания, описанный в этой статье, так как он использует последнюю версию программного обеспечения.

Поток высокого уровня

Высокоуровневый поток выглядит следующим образом:

  1. Создайте или определите экземпляр службы подготовки устройств (DPS) Центр Интернета вещей или Центр Интернета вещей Azure.
  2. Используйте Azure CLI для получения образа виртуальной машины LTS Ubuntu 20.04 LTS.
  3. Отправьте образ Ubuntu в библиотеку образов виртуальной машины Azure Stack Edge.
  4. Разверните образ Ubuntu в качестве виртуальной машины, выполнив следующие действия.
    1. Укажите имя виртуальной машины, имя пользователя и пароль. Создание другого диска является необязательным.
    2. Настройте конфигурацию сети.
    3. Предоставьте подготовленный скрипт cloud-init на вкладке "Дополнительно ".

Необходимые компоненты

Перед началом работы убедитесь, что у вас есть следующие ресурсы:

  • Активированное устройство Azure Stack Edge. Подробные инструкции см. в статье "Активация GPU Azure Stack Edge Pro".

  • Доступ к последнему образу виртуальной машины Ubuntu 20.04, образу из Azure Marketplace или пользовательскому образу, который вы приносите:

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

    Выполните действия, описанные в статье "Поиск образов Azure Marketplace", чтобы получить образ виртуальной машины.

Подготовка скрипта cloud-init

Чтобы развернуть среду выполнения IoT Edge на виртуальной машине Ubuntu, используйте скрипт cloud-init во время развертывания виртуальной машины.

Выполните действия в одном из следующих разделов:

Использование подготовки симметричного ключа

Чтобы подключить устройство к Центр Интернета вещей без DPS, выполните действия, описанные в этом разделе, чтобы подготовить скрипт cloud-init для расширенной страницы создания виртуальной машины для развертывания среды выполнения IoT Edge и среды выполнения контейнера Nvidia.

  1. Используйте существующий Центр Интернета вещей или создайте новый концентратор. Чтобы создать Центр Интернета вещей, выполните следующие действия.

  2. Выполните следующие действия, чтобы зарегистрировать устройство Azure Stack Edge в Центр Интернета вещей.

  3. Получите основную строку Подключение ion из Центр Интернета вещей для устройства, а затем вставьте ее в расположение ниже для device Подключение ionString.

Скрипт 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 для развертывания среды выполнения IoT Edge при создании виртуальной машины.

  1. Используйте существующие Центр Интернета вещей и DPS или создайте новую Центр Интернета вещей.

  2. Перейдите к ресурсу DPS и создайте отдельную регистрацию. 

    1. Перейдите к разделу "Управление регистрацией>служб>подготовки устройств", чтобы добавить индивидуальную регистрацию.
    2. Убедитесь, что выбор симметричного ключа для типа аттестации и устройство IoT Edge имеет значение True. Выбор по умолчанию — False.
    3. Получите следующие сведения на странице ресурсов DPS:
      • Идентификатор регистрации. Рекомендуется использовать тот же идентификатор, что и идентификатор устройства для Центр Интернета вещей.
      • Область идентификатора, доступная в меню "Обзор".
      • Первичный ключ SAS из меню "Индивидуальная регистрация".
  3. Скопируйте и вставьте значения из Центр Интернета вещей (IDScope) и DPS (RegistrationID, Симметричный ключ) в аргументы скрипта.

Скрипт Cloud-init для Центр Интернета вещей DPS


#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

Развертывание среды выполнения IoT Edge является частью создания виртуальной машины с помощью скрипта cloud-init, упоминание выше.

Ниже приведены общие шаги по развертыванию виртуальной машины и среды выполнения IoT Edge.

  1. Получите образ виртуальной машины Ubuntu из Azure Marketplace. Подробные инструкции см. в статье "Использование образа Azure Marketplace" для создания образа виртуальной машины для Azure Stack Edge.

    1. В портал Azure перейдите в Azure Marketplace.
    2. Подключитесь к Azure Cloud Shell или клиенту с установленным Azure CLI. Подробные инструкции см . в кратком руководстве по Bash в Azure Cloud 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".

  4. Экспорт виртуального жесткого диска из управляемого диска в учетную запись служба хранилища Azure. Подробные инструкции см. в статье "Экспорт виртуального жесткого диска" с управляемого диска в служба хранилища Azure.

  5. Выполните следующие действия, чтобы создать виртуальную машину Ubuntu с помощью образа виртуальной машины.

    1. Укажите скрипт cloud-init на вкладке "Дополнительно". Сведения о создании виртуальной машины см. в статье "Развертывание виртуальной машины GPU с помощью портал Azure" или "Развертывание виртуальной машины с помощью портал Azure".

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

    2. Укажите соответствующие строка подключения устройства в cloud-init для подключения к устройству Центр Интернета вещей или DPS. Подробные инструкции см. в разделе "Подготовка с симметричными ключами" или "Подготовка" с помощью Центр Интернета вещей DPS.

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

Если вы не указали cloud-init во время создания виртуальной машины, необходимо вручную развернуть среду выполнения IoT Edge после создания виртуальной машины:

  1. Подключение на виртуальную машину через SSH.
  2. Установите подсистему контейнеров на виртуальной машине. Подробные инструкции см. в статье "Создание и подготовка устройства IoT Edge в Linux с помощью симметричные ключи или краткое руководство. Настройка Центр Интернета вещей DPS с помощью портал Azure".

Проверка среды выполнения IoT Edge

Используйте эти действия, чтобы убедиться, что среда выполнения IoT Edge запущена.

  1. Перейдите к ресурсу Центр Интернета вещей в портал Azure.

  2. Выберите устройство IoT Edge.

  3. Убедитесь, что среда выполнения IoT Edge запущена.

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

    Сведения об устранении неполадок с конфигурацией устройства IoT Edge см. в статье "Устранение неполадок устройства IoT Edge".

Обновление среды выполнения IoT Edge

Чтобы обновить виртуальную машину, следуйте инструкциям в разделе "Обновление IoT Edge". Последнюю версию Azure IoT Edge можно найти на сайте GitHub.

Следующие шаги

Чтобы развернуть и запустить модуль IoT Edge на виртуальной машине Ubuntu, ознакомьтесь с инструкциями по развертыванию модулей IoT Edge.

Сведения о развертывании модуля DeepStream Nvidia см. в статье "Развертывание модуля Nvidia DeepStream на виртуальной машине Ubuntu в Azure Stack Edge Pro с GPU".

Сведения о развертывании NVIDIA DIGITS см. в разделе "Включение GPU" в предварительно созданном модуле NVIDIA.