Compartilhar via


Implantar IoT Edge em uma VM do Ubuntu no Azure Stack Edge

APLICA-SE A: Sim, ao SKU do Pro GPUAzure Stack Edge Pro - GPUSim, ao SKU do Pro 2Azure Stack Edge Pro 2Sim, ao SKU do Pro RAzure Stack Edge Pro RSim, ao SKU do Mini RAzure Stack Edge Mini R

Este artigo descreve como implantar um runtime do IoT Edge em uma VM do Ubuntu em execução no dispositivo Azure Stack Edge. Para um novo trabalho de desenvolvimento, use o método de implantação de autoatendimento descrito neste artigo, pois ele usa a versão mais recente do software.

Fluxo de alto nível

O fluxo de alto nível é o seguinte:

  1. Crie ou identifique a instância do Hub IoT ou do DPS (Serviço de Provisionamento de Dispositivos) no Hub IoT do Azure.
  2. Use a CLI do Azure para adquirir a imagem da VM Ubuntu 20.04 LTS.
  3. Carregue a imagem do Ubuntu na biblioteca de imagens da VM do Azure Stack Edge.
  4. Implante a imagem do Ubuntu como uma VM usando as seguintes etapas:
    1. Forneça o nome da VM, o nome de usuário e a senha. A criação de outro disco é opcional.
    2. Defina a configuração de rede.
    3. Forneça um script cloud-init preparado na guia Avançado.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Um dispositivo do Azure Stack Edge que você ativou. Para obter etapas detalhadas, consulte Ativar a GPU do Azure Stack Edge Pro.

  • Acesso à imagem mais recente da VM do Ubuntu 20.04, seja a imagem do Azure Marketplace ou uma imagem personalizada que você está trazendo:

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

    Use as etapas na Pesquisa de imagens do Azure Marketplace para adquirir a imagem da VM.

Preparar o script cloud-init

Para implantar o runtime IoT Edge na VM do Ubuntu, use um script cloud-init durante a implantação da VM.

Use as etapas em uma das seguintes seções:

Usar provisionamento de chave simétrica

Para conectar seu dispositivo ao Hub IoT sem DPS, use as etapas nesta seção para preparar um script cloud-init para a página Avançada de criação de VM, para implantar o runtime de IoT Edge e o runtime de contêiner da Nvidia.

  1. Selecione um Hub IoT existente ou crie outro. Use estas etapas para criar um Hub IoT.

  2. Use estas etapas para registrar seu dispositivo do Azure Stack Edge em Hub IoT.

  3. Recupere a cadeia de conexão primária de Hub IoT para seu dispositivo e cole-a no local abaixo para DeviceConnectionString.

Script cloud-init para provisionamento de chave simétrica


#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

Usar DPS

Use as etapas nesta seção para conectar seu dispositivo ao DPS e ao IoT Central. Você preparará um arquivo script.sh para implantar o runtime IoT Edge ao criar a VM.

  1. Use o Hub IoT e o DPS existentes ou crie uma nova Hub IoT.

  2. Vá para o recurso DPS e crie um registro individual. 

    1. Acesse Serviço de Provisionamento de Dispositivos>Gerenciar Inscrições>Adicionar Inscrição Individual.
    2. Verifique se a seleção de Chave Simétrica para o tipo de atestado e o dispositivo de IoT Edge é True. A seleção padrão é False.
    3. Recupere as seguintes informações da página de recursos do DPS:
      • ID de registro. Recomendamos que você use a mesma ID que a ID do dispositivo para o Hub IoT.
      • Escopo da ID que está disponível no menu Visão Geral.
      • Chave SAS Primária do menu Registro Individual.
  3. Copie e cole valores de Hub IoT (IDScope) e DPS (RegistrationID, Symmetric Key) nos argumentos de script.

Script do cloud-init para DPS em Hub IoT


#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

Implementar o runtime do IoT Edge

A implantação do runtime do IoT Edge faz parte da criação da VM, usando o script cloud-init mencionado acima.

Aqui estão as etapas de alto nível para implantar a VM e o runtime do IoT Edge:

  1. Adquira a imagem da VM do Ubuntu no Azure Marketplace. Para obter etapas detalhadas, siga as instruções em Usar a imagem do Azure Marketplace para criar uma imagem de VM para o Azure Stack Edge.

    1. No portal do Azure, acesse Azure Marketplace.
    2. Conecte o Azure Cloud Shell ou um cliente com a CLI do Azure instalada. Para obter etapas detalhadas, consulte Início Rápido para Bash no Cloud Shell do Azure.

    Observação

    O fechamento da sessão do shell excluirá todas as variáveis criadas durante a sessão do shell. A reabertura da sessão exigirá a recriação das variáveis.

    c. Execute o seguinte comando para definir a assinatura.

    az account set –subscription <subscription id>
    
  2. Use as etapas em Procurar imagens do Azure Marketplace para pesquisar a imagem do Ubuntu 20.04 LTS no Azure Marketplace.

    Exemplo de uma imagem do Ubuntu 20.04 LTS:

    $urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
    
  3. Crie um novo disco gerenciado a partir da imagem do Marketplace. Para obter as etapas detalhadas, confira Usar a imagem do Azure Marketplace para criar uma imagem de VM para Azure Stack Edge.

  4. Exporte um VHD do disco gerenciado para uma conta de Armazenamento do Microsoft Azure. Para obter etapas detalhadas, confira Exportar um VHD do disco gerenciado para o Armazenamento do Azure.

  5. Siga estas etapas para criar uma VM Ubuntu usando a imagem da VM.

    1. Especifique o script cloud-init na guia Avançado. Para criar uma VM, consulte Implantar VM de GPU por meio de portal do Azure ou Implantar VM por meio de portal do Azure.

      Captura de tela da guia Avançado da configuração da VM no portal do Azure.

    2. Especifique as cadeias de conexão de dispositivo apropriadas no cloud-init para se conectar ao dispositivo Hub IoT ou DPS. Para obter etapas detalhadas, consulte Provisionar com chaves simétricas ou Provisionar com DPS em Hub IoT.

      Captura de tela do campo Dados personalizados da configuração de VM no portal do Azure.

Se você não especificou o cloud-init durante a criação da VM, precisará implantar manualmente o runtime IoT Edge após a criação da VM:

  1. Conexão para a VM via SSH.
  2. Instale o mecanismo de contêiner na VM. Para obter etapas detalhadas, consulte Criar e provisionar um dispositivo IoT Edge no Linux usando chaves simétricas ou Início Rápido – Configurar DPS em Hub IoT com o portal do Azure.

Implantar o runtime do IoT Edge

Use estas etapas para verificar se o runtime do IoT Edge está em execução.

  1. No portal do Azure, vá para o recurso de Hub IoT.

  2. Selecione esse dispositivo do IOT Edge.

  3. Verifique se o runtime do IoT Edge está sendo executado.

    Captura de tela do status de runtime do IoT Edge no portal do Azure.

    Para solucionar problemas de configuração do dispositivo IoT Edge, confira Solução de problemas do dispositivo IoT Edge.

Atualizar o runtime do IoT Edge

Para atualizar a VM, siga as instruções em Atualizar o IoT Edge. Para localizar a versão mais recente do Azure IoT Edge, confira Versões do Azure IoT Edge.

Próximas etapas

Para implantar e executar um módulo do IoT Edge em sua VM do Ubuntu, consulte as etapas em Implantar módulos do IoT Edge.

Para implantar o módulo do Nvidia DeepStream, consulte Implantar o módulo do Nvidia DeepStream na VM do Ubuntu no Azure Stack Edge Pro com GPU.

Para implantar o NVIDIA DIGITS, confira Habilitar uma GPU em um módulo NVIDIA pré-fabricado.