Distribuire IoT Edge in una macchina virtuale Ubuntu in Azure Stack Edge
SI APPLICA A:Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
Questo articolo descrive come distribuire un runtime IoT Edge in una macchina virtuale Ubuntu in esecuzione nel dispositivo Azure Stack Edge. Per il nuovo lavoro di sviluppo, usare il metodo di distribuzione self-service descritto in questo articolo perché usa la versione software più recente.
Il flusso generale è il seguente:
- Creare o identificare l'istanza del servizio Device Provisioning (DPS) hub IoT o hub IoT di Azure.
- Usare l'interfaccia della riga di comando di Azure per acquisire l'immagine della macchina virtuale Ubuntu 20.04 LTS.
- Caricare l'immagine Ubuntu nella libreria di immagini della macchina virtuale Azure Stack Edge.
- Distribuire l'immagine Ubuntu come macchina virtuale seguendo questa procedura:
- Specificare il nome della macchina virtuale, il nome utente e la password. La creazione di un altro disco è facoltativa.
- Configurare la configurazione di rete.
- Specificare uno script cloud-init preparato nella scheda Avanzate.
Prima di iniziare, verifica di disporre di:
Un dispositivo Azure Stack Edge attivato. Per i passaggi dettagliati, vedere Attivare Azure Stack Edge Pro GPU.
Accesso all'immagine di macchina virtuale Ubuntu 20.04 più recente, ovvero l'immagine di Azure Marketplace o un'immagine personalizzata che si sta portando:
$urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
Usare la procedura descritta in Cercare immagini di Azure Marketplace per acquisire l'immagine della macchina virtuale.
Per distribuire il runtime di IoT Edge nella macchina virtuale Ubuntu, usare uno script cloud-init durante la distribuzione della macchina virtuale.
Usare i passaggi in una delle sezioni seguenti:
- Preparare lo script cloud-init con il provisioning di chiavi simmetriche.
- Preparare lo script cloud-init con hub IoT DPS.
Per connettere il dispositivo a hub IoT senza DPS, seguire la procedura descritta in questa sezione per preparare uno script cloud-init per la pagina Avanzate di creazione della macchina virtuale per distribuire il runtime di IoT Edge e il runtime del contenitore nvidia.
Usare un hub IoT esistente o creare un nuovo hub. Usare questi passaggi per creare un hub IoT.
Seguire questa procedura per registrare il dispositivo Azure Stack Edge in hub IoT.
Recuperare la stringa di Connessione primaria da hub IoT per il dispositivo e quindi incollarla nel percorso seguente per Device Connessione ionString.
Script cloud-init per il provisioning di chiavi simmetriche
#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
Usare la procedura descritta in questa sezione per connettere il dispositivo a DPS e IoT Central. Si preparerà un file script.sh per distribuire il runtime di IoT Edge durante la creazione della macchina virtuale.
Usare la hub IoT esistente e il servizio Device Provisioning oppure creare un nuovo hub IoT.
- Usare questi passaggi per creare un hub IoT.
- Usare questi passaggi per creare il servizio Device Provisioning e quindi collegare l'hub IoT all'ambito dps.
Passare alla risorsa dps e creare una registrazione singola.
- Passare a Servizio>Device Provisioning Gestire le registrazioni>Aggiungi registrazione singola.
- Assicurarsi che la selezione per Chiave simmetrica per il tipo di attestazione e il dispositivo IoT Edge sia True. La selezione predefinita è False.
- Recuperare le informazioni seguenti dalla pagina della risorsa DPS:
- ID registrazione. È consigliabile usare lo stesso ID dell'ID dispositivo per il hub IoT.
- Ambito ID disponibile nel menu Panoramica.
- Chiave di firma di accesso condiviso primaria dal menu Registrazione singola.
Copiare e incollare valori da hub IoT (IDScope) e DPS (RegistrationID, Symmetric Key) negli argomenti dello script.
Script cloud-init per il servizio Device Provisioning di 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
La distribuzione del runtime di IoT Edge fa parte della creazione di macchine virtuali usando lo script cloud-init indicato in precedenza.
Ecco i passaggi generali per distribuire la macchina virtuale e il runtime di IoT Edge:
Acquisire l'immagine della macchina virtuale Ubuntu da Azure Marketplace. Per i passaggi dettagliati, seguire le istruzioni in Usare l'immagine di Azure Marketplace per creare un'immagine di macchina virtuale per Azure Stack Edge.
- Nel portale di Azure passare ad Azure Marketplace.
- Connessione ad Azure Cloud Shell o a un client con l'interfaccia della riga di comando di Azure installata. Per i passaggi dettagliati, vedere Avvio rapido per Bash in Azure Cloud Shell.
Nota
La chiusura della sessione della shell eliminerà tutte le variabili create durante la sessione della shell. La riapertura della sessione richiederà la ricreazione delle variabili.
c. Eseguire il comando seguente per impostare la sottoscrizione.
az account set –subscription <subscription id>
Usare la procedura descritta in Cercare immagini di Azure Marketplace per cercare un'immagine Ubuntu 20.04 LTS in Azure Marketplace.
Esempio di immagine Ubuntu 20.04 LTS:
$urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
Creare un nuovo disco gestito dall'immagine del Marketplace. Per informazioni dettagliate, vedere Usare l'immagine di Azure Marketplace per creare un'immagine di macchina virtuale per Azure Stack Edge.
Esportare un disco rigido virtuale dal disco gestito in un account Archiviazione di Azure. Per i passaggi dettagliati, vedere Esportare un disco rigido virtuale dal disco gestito in Archiviazione di Azure.
Seguire questa procedura per creare una macchina virtuale Ubuntu usando l'immagine della macchina virtuale.
Specificare lo script cloud-init nella scheda Avanzate. Per creare una macchina virtuale, vedere Distribuire una macchina virtuale GPU tramite portale di Azure o Distribuire una macchina virtuale tramite portale di Azure.
Specificare i stringa di connessione del dispositivo appropriati in cloud-init per connettersi al dispositivo hub IoT o DPS. Per i passaggi dettagliati, vedere Effettuare il provisioning con chiavi simmetriche o Effettuare il provisioning con hub IoT DPS.
Se non è stato specificato cloud-init durante la creazione della macchina virtuale, sarà necessario distribuire manualmente il runtime di IoT Edge dopo la creazione della macchina virtuale:
- Connessione alla macchina virtuale tramite SSH.
- Installare il motore del contenitore nella macchina virtuale. Per i passaggi dettagliati, vedere Creare ed effettuare il provisioning di un dispositivo IoT Edge in Linux usando chiavi simmetriche o Avvio rapido : Configurare hub IoT DPS con il portale di Azure.
Usare questi passaggi per verificare che il runtime di IoT Edge sia in esecuzione.
Passare a hub IoT risorsa nel portale di Azure.
Selezionare il dispositivo IoT Edge.
Verificare che il runtime di IoT Edge sia in esecuzione.
Per risolvere i problemi relativi alla configurazione del dispositivo IoT Edge, vedere Risolvere i problemi del dispositivo IoT Edge.
Per aggiornare la macchina virtuale, seguire le istruzioni riportate in Aggiornare IoT Edge. Per trovare la versione più recente di Azure IoT Edge, fare riferimento alle versioni di Azure IoT Edge.
Per distribuire ed eseguire un modulo IoT Edge nella macchina virtuale Ubuntu, vedere la procedura descritta in Distribuire moduli IoT Edge.
Per distribuire il modulo DeepStream di Nvidia, vedere Distribuire il modulo Nvidia DeepStream nella macchina virtuale Ubuntu in Azure Stack Edge Pro con GPU.
Per distribuire NVIDIA DIGITS, vedere Abilitare una GPU in un modulo NVIDIA prefabricato.