Wdrażanie usługi IoT Edge na maszynie wirtualnej z systemem Ubuntu w usłudze Azure Stack Edge
DOTYCZY: Azure Stack Edge Pro — GPUAzure Stack Edge Pro 2Azure Stack Edge Pro R Azure Stack Edge Mini R
W tym artykule opisano sposób wdrażania środowiska uruchomieniowego usługi IoT Edge na maszynie wirtualnej z systemem Ubuntu uruchomionej na urządzeniu Azure Stack Edge. W przypadku nowych prac programistycznych użyj metody wdrażania samoobsługowego opisanej w tym artykule, ponieważ używa najnowszej wersji oprogramowania.
Przepływ na wysokim poziomie
Przepływ wysokiego poziomu wygląda następująco:
- Utwórz lub zidentyfikuj wystąpienie usługi IoT Hub lub Azure IoT Hub Device Provisioning Service (DPS ).
- Użyj interfejsu wiersza polecenia platformy Azure, aby uzyskać obraz maszyny wirtualnej z systemem Ubuntu 20.04 LTS.
- Przekaż obraz z systemem Ubuntu do biblioteki obrazów maszyny wirtualnej usługi Azure Stack Edge.
- Wdróż obraz z systemem Ubuntu jako maszynę wirtualną, wykonując następujące kroki:
- Podaj nazwę maszyny wirtualnej, nazwę użytkownika i hasło. Tworzenie innego dysku jest opcjonalne.
- Skonfiguruj konfigurację sieci.
- Udostępnij przygotowany skrypt cloud-init na karcie Zaawansowane .
Wymagania wstępne
Zanim się zacznie, upewnij się, że masz:
Aktywowane urządzenie Azure Stack Edge. Aby uzyskać szczegółowe instrukcje, zobacz Aktywowanie procesora GPU pro usługi Azure Stack Edge.
Dostęp do najnowszego obrazu maszyny wirtualnej z systemem Ubuntu 20.04 z witryny Azure Marketplace lub obrazu niestandardowego, który wprowadzasz:
$urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
Aby uzyskać obraz maszyny wirtualnej, wykonaj kroki opisane w artykule Wyszukiwanie obrazów witryny Azure Marketplace.
Przygotowywanie skryptu cloud-init
Aby wdrożyć środowisko uruchomieniowe usługi IoT Edge na maszynie wirtualnej z systemem Ubuntu, użyj skryptu cloud-init podczas wdrażania maszyny wirtualnej.
Wykonaj kroki opisane w jednej z następujących sekcji:
- Przygotuj skrypt cloud-init z aprowizacją klucza symetrycznego.
- Przygotuj skrypt cloud-init za pomocą usługi IoT Hub DPS.
Używanie aprowizacji klucza symetrycznego
Aby połączyć urządzenie z usługą IoT Hub bez usługi DPS, wykonaj kroki opisane w tej sekcji, aby przygotować skrypt cloud-init na stronę Zaawansowana tworzenia maszyny wirtualnej w celu wdrożenia środowiska uruchomieniowego usługi IoT Edge i środowiska uruchomieniowego kontenera firmy Nvidia.
Użyj istniejącego centrum IoT Lub utwórz nowe centrum. Wykonaj następujące kroki, aby utworzyć centrum IoT Hub.
Wykonaj następujące kroki, aby zarejestrować urządzenie Azure Stack Edge w usłudze IoT Hub.
Pobierz podstawowe parametry połączenia z usługi IoT Hub dla urządzenia, a następnie wklej je w poniższej lokalizacji dla parametru DeviceConnectionString.
Skrypt cloud-init na potrzeby aprowizacji klucza symetrycznego
#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
Korzystanie z usługi DPS
Wykonaj kroki opisane w tej sekcji, aby połączyć urządzenie z usługami DPS i IoT Central. Przygotujesz plik script.sh do wdrożenia środowiska uruchomieniowego usługi IoT Edge podczas tworzenia maszyny wirtualnej.
Użyj istniejącego centrum IoT Hub i usługi DPS lub utwórz nowe centrum IoT Hub.
- Wykonaj następujące kroki, aby utworzyć centrum IoT Hub.
- Wykonaj następujące kroki, aby utworzyć usługę DPS, a następnie połączyć usługę IoT Hub z zakresem usługi DPS.
Przejdź do zasobu usługi DPS i utwórz rejestrację indywidualną.
- Przejdź do pozycji Device Provisioning Service Manage enrollments (Zarządzanie rejestracjami>w usłudze Device Provisioning)>Dodaj rejestrację indywidualną.
- Upewnij się, że opcja Klucz symetryczny dla typu zaświadczania i urządzenie usługi IoT Edge ma wartość True. Domyślnym wyborem jest fałsz.
- Pobierz następujące informacje ze strony zasobu usługi DPS:
- Identyfikator rejestracji. Zalecamy użycie tego samego identyfikatora co identyfikator urządzenia dla usługi IoT Hub.
- Zakres identyfikatora , który jest dostępny w menu Przegląd.
- Podstawowy klucz sygnatury dostępu współdzielonego z menu Rejestracja indywidualna.
Skopiuj i wklej wartości z usługi IoT Hub (IDScope) i DPS (RegistrationID, Symmetric Key) do argumentów skryptu.
Skrypt cloud-init dla usługi 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
Wdrażanie środowiska uruchomieniowego usługi IoT Edge
Wdrażanie środowiska uruchomieniowego usługi IoT Edge jest częścią tworzenia maszyny wirtualnej przy użyciu skryptu cloud-init wymienionego powyżej.
Poniżej przedstawiono ogólne kroki wdrażania maszyny wirtualnej i środowiska uruchomieniowego usługi IoT Edge:
Uzyskaj obraz maszyny wirtualnej z systemem Ubuntu z witryny Azure Marketplace. Aby uzyskać szczegółowe instrukcje, postępuj zgodnie z instrukcjami w artykule Używanie obrazu witryny Azure Marketplace do tworzenia obrazu maszyny wirtualnej dla usługi Azure Stack Edge.
- W witrynie Azure Portal przejdź do witryny Azure Marketplace.
- Połącz się z usługą Azure Cloud Shell lub klientem z zainstalowanym interfejsem wiersza polecenia platformy Azure. Aby uzyskać szczegółowe instrukcje, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Uwaga
Zamknięcie sesji powłoki spowoduje usunięcie wszystkich zmiennych utworzonych podczas sesji powłoki. Ponowne otwarcie sesji będzie wymagać ponownego utworzenia zmiennych.
c. Uruchom następujące polecenie, aby ustawić subskrypcję.
az account set –subscription <subscription id>
Wykonaj kroki opisane w artykule Wyszukiwanie obrazów witryny Azure Marketplace, aby wyszukać obraz z systemem Ubuntu 20.04 LTS w witrynie Azure Marketplace.
Przykład obrazu LTS z systemem Ubuntu 20.04:
$urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
Utwórz nowy dysk zarządzany na podstawie obrazu witryny Marketplace. Aby uzyskać szczegółowe instrukcje, zobacz Tworzenie obrazu maszyny wirtualnej dla usługi Azure Stack Edge przy użyciu obrazu witryny Azure Marketplace.
Wyeksportuj dysk VHD z dysku zarządzanego do konta usługi Azure Storage. Aby uzyskać szczegółowe instrukcje, zobacz Eksportowanie dysku VHD z dysku zarządzanego do usługi Azure Storage.
Wykonaj następujące kroki, aby utworzyć maszynę wirtualną z systemem Ubuntu przy użyciu obrazu maszyny wirtualnej.
Określ skrypt cloud-init na karcie Zaawansowane. Aby utworzyć maszynę wirtualną, zobacz Wdrażanie maszyny wirtualnej z procesorem GPU za pośrednictwem witryny Azure Portal lub Wdrażanie maszyny wirtualnej za pośrednictwem witryny Azure Portal.
Określ odpowiednie parametry połączenia urządzenia w pliku cloud-init, aby nawiązać połączenie z urządzeniem usługi IoT Hub lub DPS. Aby uzyskać szczegółowe instrukcje, zobacz Aprowizuj przy użyciu kluczy symetrycznych lub Aprowizuj przy użyciu usługi IoT Hub DPS.
Jeśli podczas tworzenia maszyny wirtualnej nie określono pakietu cloud-init , musisz ręcznie wdrożyć środowisko uruchomieniowe usługi IoT Edge po utworzeniu maszyny wirtualnej:
- Nawiąż połączenie z maszyną wirtualną za pośrednictwem protokołu SSH.
- Zainstaluj aparat kontenera na maszynie wirtualnej. Aby uzyskać szczegółowe instrukcje, zobacz Tworzenie i aprowizowanie urządzenia usługi IoT Edge w systemie Linux przy użyciu kluczy symetrycznych lub Przewodnik Szybki start — konfigurowanie usługi IoT Hub DPS w witrynie Azure Portal.
Weryfikowanie środowiska uruchomieniowego usługi IoT Edge
Wykonaj następujące kroki, aby sprawdzić, czy środowisko uruchomieniowe usługi IoT Edge jest uruchomione.
Przejdź do zasobu usługi IoT Hub w witrynie Azure Portal.
Wybierz urządzenie usługi IoT Edge.
Sprawdź, czy środowisko uruchomieniowe usługi IoT Edge jest uruchomione.
Aby rozwiązać problemy z konfiguracją urządzenia usługi IoT Edge, zobacz Rozwiązywanie problemów z urządzeniem usługi IoT Edge.
Aktualizowanie środowiska uruchomieniowego usługi IoT Edge
Aby zaktualizować maszynę wirtualną, postępuj zgodnie z instrukcjami w temacie Aktualizowanie usługi IoT Edge. Aby znaleźć najnowszą wersję usługi Azure IoT Edge, zobacz Wersje usługi Azure IoT Edge.
Następne kroki
Aby wdrożyć i uruchomić moduł usługi IoT Edge na maszynie wirtualnej z systemem Ubuntu, zobacz kroki opisane w artykule Wdrażanie modułów usługi IoT Edge.
Aby wdrożyć moduł DeepStream firmy Nvidia, zobacz Wdrażanie modułu Nvidia DeepStream na maszynie wirtualnej z systemem Ubuntu w usłudze Azure Stack Edge Pro przy użyciu procesora GPU.
Aby wdrożyć procesor NVIDIA DIGITS, zobacz Włączanie procesora GPU w wstępnie utworzonym module NVIDIA.