Compartir a través de


Implementación de IoT Edge en una máquina virtual Ubuntu en Azure Stack Edge

SE APLICA A: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

En este artículo se describe cómo implementar un entorno de ejecución de IoT Edge en una máquina virtual Ubuntu que se ejecuta en el dispositivo Azure Stack Edge. Para nuevos trabajos de desarrollo, use el método de implementación de autoservicio descrito en este artículo, ya que usa la versión de software más reciente.

Flujo de alto nivel

El flujo resumido es el siguiente:

  1. Cree o identifique la instancia de IoT Hub o Azure IoT Hub Device Provisioning Service (DPS).
  2. Use la CLI de Azure para adquirir la imagen de máquina virtual de Ubuntu 20.04 LTS.
  3. Cargue la imagen de Ubuntu en la biblioteca de imágenes de máquina virtual de Azure Stack Edge.
  4. Implemente la imagen de Ubuntu como una máquina virtual mediante los pasos siguientes:
    1. Proporcione el nombre de la máquina virtual, el nombre de usuario y la contraseña. La creación de otro disco es opcional.
    2. Configure la configuración de red.
    3. Proporcione un script cloud-init preparado en la pestaña Opciones avanzadas.

Requisitos previos

Antes de empezar, asegúrese de que tiene:

  • Un dispositivo de Azure Stack Edge que ha activado. Para conocer los pasos detallados, consulte Activación de Azure Stack Edge Pro con GPU.

  • Acceda a la imagen de máquina virtual Ubuntu 20.04 más reciente, ya sea la imagen de Azure Marketplace o una imagen personalizada que aporte usted:

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

    Siga los pasos descritos en Búsqueda de imágenes de Azure Marketplace para adquirir la imagen de máquina virtual.

Preparación del script cloud-init

Para implementar el entorno de ejecución de IoT Edge en la máquina virtual Ubuntu, use un script cloud-init durante la implementación de la máquina virtual.

Siga los pasos que se describen en una de las secciones siguientes:

Uso del aprovisionamiento de claves simétricas

Para conectar el dispositivo a IoT Hub sin DPS, siga los pasos de esta sección para preparar un script cloud-init en la página Opciones avanzadas de la creación de máquinas virtuales con el fin de implementar el entorno de ejecución de IoT Edge y el entorno de ejecución de contenedor de NVIDIA.

  1. Use una instancia de IoT Hub o cree un centro de conectividad. Siga estos pasos para crear una instancia de IoT Hub.

  2. Siga estos pasos para registrar el dispositivo Azure Stack Edge en IoT Hub.

  3. Recupere la cadena de conexión principal de IoT Hub para el dispositivo y péguela en la ubicación siguiente para DeviceConnectionString.

Script cloud-init para el aprovisionamiento de claves simétricas


#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

Uso de DPS

Siga los pasos de esta sección para conectar el dispositivo a DPS e IoT Central. Preparará un archivo script.sh para implementar el entorno de ejecución de IoT Edge a medida que cree la máquina virtual.

  1. Use la instancia de IoT Hub y DPS, o cree una instancia de IoT Hub.

  2. Vaya al recurso de DPS y cree una inscripción individual. 

    1. Vaya a Device Provisioning Service>Administrar inscripciones>Agregar inscripción individual.
    2. Asegúrese de que la selección de Clave simétrica para el tipo de atestación y dispositivo IoT Edge sea Verdadero. El valor predeterminado es Falso.
    3. Recupere la siguiente información de la página de recursos de DPS:
      • Identificador de registro. Se recomienda usar el mismo identificador que el identificador de dispositivo de la instancia de IoT Hub.
      • Ámbito de identificador, que está disponible en el menú Información general.
      • Clave SAS principal, disponible en el menú Inscripción individual.
  3. Copie y pegue los valores de IoT Hub (IDScope) y DPS (RegistrationID, Clave simétrica) en los argumentos del script.

Script cloud-init para IoT Hub 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

Implementación del entorno de ejecución de IoT Edge

La implementación del entorno de ejecución de IoT Edge forma parte de la creación de máquinas virtuales mediante el script cloud-init mencionado anteriormente.

Estos son los pasos resumidos para implementar la máquina virtual y el entorno de ejecución de IoT Edge:

  1. Adquiera la imagen de máquina virtual Ubuntu de Azure Marketplace. Para conocer los pasos detallados, siga las instrucciones de Uso de Azure Marketplace imagen para crear una imagen de máquina virtual para Azure Stack Edge.

    1. En Azure Portal, vaya a Azure Marketplace.
    2. Conéctese a Azure Cloud Shell o a un cliente que tenga instalada la CLI de Azure. Para conocer los pasos detallados, consulte Inicio rápido para Bash en Azure Cloud Shell.

    Nota:

    Al cerrar la sesión de shell, se eliminarán todas las variables creadas durante la sesión de shell. Volver a abrir la sesión requerirá volver a crear las variables.

    c. Ejecuta el siguiente comando para crear la suscripción.

    az account set –subscription <subscription id>
    
  2. Siga los pasos descritos en Búsqueda de imágenes de Azure Marketplace para buscar una imagen de Ubuntu 20.04 LTS.

    Ejemplo de una imagen de Ubuntu 20.04 LTS:

    $urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
    
  3. Cree un disco administrado nuevo a partir de la imagen de Marketplace. Para obtener los pasos detallados, consulta Uso de una imagen de Azure Marketplace para crear una imagen de máquina virtual para Azure Stack Edge Pro con GPU.

  4. Exporte un disco duro virtual del disco administrado a una cuenta de Azure Storage. Para obtener los pasos detallados, consulta Exportación de un disco duro virtual del disco administrado a Azure Storage.

  5. Siga estos pasos para crear una máquina virtual Ubuntu mediante la imagen de máquina virtual.

    1. Especifique el script cloud-init en la pestaña Opciones avanzadas. Para crear una máquina virtual, consulte Implementación de máquinas virtuales de GPU a través de Azure Portal o Implementación de máquinas virtuales a través de Azure Portal.

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

    2. Especifique las cadenas de conexión de dispositivo adecuadas en cloud-init para conectarse al dispositivo IoT Hub o DPS. Para conocer los pasos detallados, consulte Aprovisionamiento con claves simétricas o Aprovisionamiento con IoT Hub DPS.

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

Si no especificó cloud-init durante la creación de la máquina virtual, tendrá que implementar manualmente el entorno de ejecución de IoT Edge una vez creada la máquina virtual:

  1. Conéctese a la máquina virtual a través de SSH.
  2. Instale el motor de contenedor en la máquina virtual. Para conocer los pasos detallados, consulte Creación y aprovisionamiento de un dispositivo IoT Edge en Linux mediante claves simétricas o Inicio rápido: Configuración de IoT Hub DPS con Azure Portal.

Comprobación del entorno de ejecución de IoT Edge

Siga estos pasos para comprobar que el entorno de ejecución de IoT Edge se está ejecutando.

  1. En Azure Portal, vaya hasta el recurso de IoT Hub.

  2. Seleccione el dispositivo de IoT Edge.

  3. Compruebe que el entorno de ejecución de IoT Edge esté en ejecución.

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

    Para solucionar problemas de la configuración de tu dispositivo IoT Edge, consulta Solución de problemas del dispositivo IoT Edge.

Actualización del entorno de ejecución de IoT Edge

Para actualizar la máquina virtual, siga las instrucciones de Actualización de IoT Edge. Para obtener la versión más reciente de Azure IoT Edge, consulte Versiones de Azure IoT Edge.

Pasos siguientes

Para implementar y ejecutar un módulo de IoT Edge en la máquina virtual Ubuntu, consulte los pasos descritos en Implementación de módulos de IoT Edge.

Para implementar el módulo DeepStream de NVIDIA, consulte Implementación del módulo NVIDIA DeepStream en máquinas virtuales Ubuntu en Azure Stack Edge Pro con GPU.

Para implementar NVIDIA DIGITS, consulta Habilitación de una GPU en un módulo NVIDIA prefabricado.