Implementación de IoT Edge en una máquina virtual Ubuntu en Azure Stack Edge
SE APLICA A: Azure Stack Edge Pro: GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure 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:
- Cree o identifique la instancia de IoT Hub o Azure IoT Hub Device Provisioning Service (DPS).
- Use la CLI de Azure para adquirir la imagen de máquina virtual de Ubuntu 20.04 LTS.
- Cargue la imagen de Ubuntu en la biblioteca de imágenes de máquina virtual de Azure Stack Edge.
- Implemente la imagen de Ubuntu como una máquina virtual siguiendo los pasos siguientes:
- Proporcione el nombre de la máquina virtual, el nombre de usuario y la contraseña. La creación de otro disco es opcional.
- Configure la configuración de red.
- 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:
- Prepare el script cloud-init con aprovisionamiento de claves simétricas.
- Prepare el script cloud-init con IoT Hub DPS.
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.
Use una instancia de IoT Hub o cree un centro de conectividad. Siga estos pasos para crear una instancia de IoT Hub.
Siga estos pasos para registrar el dispositivo Azure Stack Edge en IoT Hub.
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.
Use la instancia de IoT Hub y DPS, o cree una instancia de IoT Hub.
- Siga estos pasos para crear una instancia de IoT Hub.
- Siga estos pasos para crear el DPS y, a continuación, vincule la instancia de IoT Hub al ámbito de DPS.
Vaya al recurso de DPS y cree una inscripción individual.
- Vaya a Device Provisioning Service>Administrar inscripciones>Agregar inscripción individual.
- 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.
- 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.
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:
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.
- En Azure Portal, vaya a Azure Marketplace.
- 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>
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
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.
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.
Siga estos pasos para crear una máquina virtual Ubuntu mediante la imagen de máquina virtual.
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.
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.
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:
- Conéctese a la máquina virtual a través de SSH.
- 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.
En Azure Portal, vaya hasta el recurso de IoT Hub.
Seleccione el dispositivo de IoT Edge.
Compruebe que el entorno de ejecución de IoT Edge esté en ejecución.
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.