Déployer IoT Edge sur une machine virtuelle Ubuntu sur Azure Stack Edge
S’APPLIQUE À :Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
Cet article explique comment déployer un runtime IoT Edge sur une machine virtuelle Ubuntu s’exécutant sur votre appareil Azure Stack Edge. Pour le nouveau travail de développement, utilisez la méthode de déploiement libre-service décrite dans cet article, car elle utilise la dernière version logicielle.
Flux général
Le flux de haut niveau est le suivant :
- Créez ou identifiez l’instance DPS (Device Provisioning Service) Azure IoT Hub ou IoT Hub.
- Utilisez Azure CLI pour acquérir l’image de machine virtuelle Ubuntu 20.04 LTS.
- Chargez l’image Ubuntu sur la bibliothèque d’images de machine virtuelle Azure Stack Edge.
- Déployez l’image Ubuntu en tant que machine virtuelle en procédant comme suit :
- Indiquez le nom de la machine virtuelle, le nom d’utilisateur et le mot de passe. La création d’un autre disque est facultative.
- Définissez la configuration réseau.
- Fournissez un script cloud-init préparé sous l’onglet Avancé.
Prérequis
Avant de commencer, assurez-vous d’avoir :
Appareil Azure Stack Edge que vous avez activé. Pour des étapes détaillées, consultez Activer Azure Stack Edge Pro GPU.
Accédez à la dernière image de machine virtuelle Ubuntu 20.04, soit à partir de Place de marché Azure, soit d’une image personnalisée que vous apportez :
$urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
Suivez les étapes de Recherche d’images de la Place de marché Azure pour acquérir l’image de machine virtuelle.
Préparer le script cloud-init
Pour déployer le runtime IoT Edge sur la machine virtuelle Ubuntu, utilisez un script cloud-init pendant le déploiement de la machine virtuelle.
Suivez la procédure décrite dans l’une des sections suivantes :
- Préparez le script cloud-init avec l’approvisionnement de clés symétriques.
- Préparez le script cloud-init avec IoT Hub DPS.
Utiliser le provisionnement de clé symétrique
Pour connecter votre appareil à IoT Hub sans DPS, suivez les étapes décrites dans cette section pour préparer un script cloud-init pour la page Avancé de création de machine virtuelle pour déployer le runtime IoT Edge et le runtime de conteneur de Nvidia.
Utilisez un IoT Hub existant ou créez-en un. Utilisez ces étapes pour créer un IoT Hub.
Utilisez ces étapes pour inscrire votre appareil Azure Stack Edge dans IoT Hub.
Récupérez la chaîne de connexion principale d’IoT Hub pour votre appareil, puis collez-la dans l’emplacement ci-dessous pour DeviceConnectionString.
Script cloud-init pour l’approvisionnement de clés symétriques
#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
Utiliser DPS
Suivez les étapes décrites dans cette section pour connecter votre appareil à DPS et IoT Central. Vous préparerez un fichier script.sh pour déployer le runtime IoT Edge lorsque vous allez créer la machine virtuelle.
Utilisez les instances IoT Hub et DPS existantes ou créez un IoT Hub.
- Utilisez ces étapes pour créer un IoT Hub.
- Utilisez ces étapes pour créer le DPS, puis lier le IoT Hub à l’étendue DPS.
Accédez à la ressource DPS et créez une inscription individuelle.
- Accédez au service Device Provisioning Service>Gérer les inscriptions>Ajouter une inscription individuelle.
- Vérifiez que la sélection de la clé symétrique pour le type d’attestation et l’appareil IoT Edge est True. La sélection par défaut est False.
- Récupérez les informations suivantes à partir de la page de ressources DPS :
- ID d’inscription. Nous vous recommandons d’utiliser le même ID que l’ID d’appareil de votre IoT Hub.
- Étendue d’ID disponible dans le menu Vue d’ensemble.
- Clé SAS principale dans le menu Inscription individuelle.
Copiez et collez des valeurs de IoT Hub (IDScope) et DPS (RegistrationID, Clé symétrique) dans les arguments de script.
Script cloud-init pour 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
Déployer le runtime IoT Edge
Le déploiement du runtime IoT Edge fait partie de la création de machines virtuelles, à l’aide du script cloud-init mentionné ci-dessus.
Voici les étapes générales pour déployer la machine virtuelle et le runtime IoT Edge :
Acquérir l’image VM Ubuntu dans la Place de marché Azure. Pour obtenir des étapes détaillées, suivez les instructions décrites dans Utiliser une image de la Place de marché Azure pour créer une image de machine virtuelle pour votre instance Azure Stack Edge.
- Dans le Portail Azure, accédez à Place de marché Azure.
- Connectez-vous à Azure Cloud Shell ou à un client sur lequel Azure CLI est installé. Pour obtenir des étapes détaillées, consultez Démarrage rapide pour Bash dans Azure Cloud Shell.
Remarque
La fermeture de la session d’interpréteur de commandes supprime toutes les variables créées pendant la session. La réouverture de la session nécessite la recréation des variables.
c. Exécutez la commande suivante pour définir l’abonnement.
az account set –subscription <subscription id>
Suivez les étapes de Rechercher des images de la Place de marché Azure pour rechercher une image Ubuntu 20.04 LTS dans la Place de marché Azure.
Exemple d’image Ubuntu 20.04 LTS :
$urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
Créez un nouveau disque managé à partir de l’image de la Place de marché. Pour obtenir les étapes détaillées, consultez Utiliser une image de la Place de marché Azure pour créer une image VM pour votre Azure Stack Edge.
Exportez un VHD du disque managé vers le compte de stockage Azure. Pour obtenir les étapes détaillées, consultez Exporter un VHD à partir du disque managé vers le Stockage Azure.
Suivez ces étapes pour créer une machine virtuelle Ubuntu à l’aide de l’image de machine virtuelle.
Spécifiez le script cloud-init sous l’onglet Avancé. Pour créer une machine virtuelle, consultez Déployer une machine virtuelle GPU via le Portail Azure ou Déployer une machine virtuelle via le Portail Azure.
Spécifiez les chaînes de connexion d’appareil appropriées dans cloud-init pour vous connecter à l’appareil IoT Hub ou DPS. Pour obtenir des étapes détaillées, consultez Provisionner avec des clés symétriques ou Provisionner avec IoT Hub DPS.
Si vous n’avez pas spécifié le cloud-init lors de la création de la machine virtuelle, vous devez déployer manuellement le runtime IoT Edge une fois la machine virtuelle créée :
- Connectez-vous à la machine virtuelle via SSH.
- Installez le moteur de conteneur sur la machine virtuelle. Pour obtenir des étapes détaillées, consultez Créer et approvisionner un appareil IoT Edge sur Linux à l’aide de clés symétriques ou Démarrage rapide : Configurer IoT Hub DPS avec le Portail Azure.
Vérifier le runtime IoT Edge
Utilisez ces étapes pour vérifier que votre runtime IoT Edge est en cours d’exécution.
Dans le portail Azure, accédez à la ressource IoT Hub.
Sélectionnez l’appareil IoT Edge.
Vérifiez que le runtime IoT Edge est en cours d’exécution.
Pour résoudre les problèmes de configuration de votre appareil IoT Edge, consultez Résoudre les problèmes de votre appareil IoT Edge.
Mettre à jour le runtime IoT Edge
Pour mettre à jour la machine virtuelle, suivez les instructions de Mettre à jour IoT Edge. Pour rechercher la dernière version d’Azure IoT Edge, consultez Versions d’Azure IoT Edge.
Étapes suivantes
Pour déployer et exécuter un module IoT Edge sur votre machine virtuelle Ubuntu, consultez les étapes décrites dans Déployer des modules IoT Edge.
Pour déployer le module DeepStream de Nvidia, consultez Déployer le module Nvidia DeepStream sur une machine virtuelle Ubuntu sur Azure Stack Edge Pro avec GPU.
Pour déployer NVIDIA DIGITS, consultez Activer un processeur graphique dans un module NVIDIA préfabriqué.