Wdrażanie usługi IoT Edge na maszynie wirtualnej z systemem Ubuntu w usłudze Azure Stack Edge

DOTYCZY:Yes for Pro GPU SKU Azure Stack Edge Pro — GPUYes for Pro 2 SKUAzure Stack Edge Pro 2Yes for Pro R SKUAzure Stack Edge Pro R Azure Stack Edge Mini RYes for Mini R SKU

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 wysokiego poziomu

Przepływ wysokiego poziomu wygląda następująco:

  1. Utwórz lub zidentyfikuj wystąpienie usługi IoT Hub lub Azure IoT Hub Device Provisioning Service (DPS ).
  2. Użyj interfejsu wiersza polecenia platformy Azure, aby uzyskać obraz maszyny wirtualnej z systemem Ubuntu 20.04 LTS.
  3. Przekaż obraz z systemem Ubuntu do biblioteki obrazów maszyny wirtualnej usługi Azure Stack Edge.
  4. Wdróż obraz z systemem Ubuntu jako maszynę wirtualną, wykonując następujące kroki:
    1. Podaj nazwę maszyny wirtualnej, nazwę użytkownika i hasło. Tworzenie innego dysku jest opcjonalne.
    2. Skonfiguruj konfigurację sieci.
    3. 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:

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.

  1. Użyj istniejącego centrum IoT Lub utwórz nowe centrum. Wykonaj następujące kroki, aby utworzyć centrum IoT Hub.

  2. Wykonaj następujące kroki, aby zarejestrować urządzenie Azure Stack Edge w usłudze IoT Hub.

  3. Pobierz ciąg podstawowego Połączenie ion z usługi IoT Hub dla urządzenia, a następnie wklej go w poniższej lokalizacji dla pozycji Device Połączenie ionString.

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.

  1. Użyj istniejącego centrum IoT Hub i usługi DPS lub utwórz nowe centrum IoT Hub.

  2. Przejdź do zasobu usługi DPS i utwórz rejestrację indywidualną. 

    1. Przejdź do pozycji Device Provisioning Service Manage enrollments (Zarządzanie rejestracjami>w usłudze Device Provisioning)>Dodaj rejestrację indywidualną.
    2. 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.
    3. 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.
  3. 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:

  1. 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.

    1. W witrynie Azure Portal przejdź do witryny Azure Marketplace.
    2. Połączenie do usługi Azure Cloud Shell lub klienta 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>
    
  2. 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
    
  3. 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.

  4. 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.

  5. Wykonaj następujące kroki, aby utworzyć maszynę wirtualną z systemem Ubuntu przy użyciu obrazu maszyny wirtualnej.

    1. 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.

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

    2. 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.

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

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:

  1. Połączenie do maszyny wirtualnej za pośrednictwem protokołu SSH.
  2. 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.

  1. Przejdź do zasobu usługi IoT Hub w witrynie Azure Portal.

  2. Wybierz urządzenie usługi IoT Edge.

  3. Sprawdź, czy środowisko uruchomieniowe usługi IoT Edge jest uruchomione.

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

    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.