Azure Stack Edge'de Ubuntu VM'sinde IoT Edge dağıtma

ŞUNLAR IÇIN GEÇERLIDIR:Pro GPU SKU için Evet Azure Stack Edge Pro - GPUPro 2 SKU için EvetAzure Stack Edge Pro 2Pro R SKU için EvetAzure Stack Edge Pro RMini R SKU için EvetAzure Stack Edge Mini R

Bu makalede, Azure Stack Edge cihazınızda çalışan bir Ubuntu VM'sine IoT Edge çalışma zamanının nasıl dağıtılacağı açıklanmaktadır. Yeni geliştirme çalışmaları için, en son yazılım sürümünü kullandığından bu makalede açıklanan self servis dağıtım yöntemini kullanın.

Yüksek seviyeli akış

Üst düzey akış aşağıdaki gibidir:

  1. IoT Hub veya Azure IoT Hub Cihaz Sağlama Hizmeti (DPS) örneğini oluşturun veya tanımlayın.
  2. Ubuntu 20.04 LTS VM görüntüsünü almak için Azure CLI'yi kullanın.
  3. Ubuntu görüntüsünü Azure Stack Edge VM görüntü kitaplığına yükleyin.
  4. Aşağıdaki adımları kullanarak Ubuntu görüntüsünü vm olarak dağıtın:
    1. VM'nin adını, kullanıcı adını ve parolayı belirtin. Başka bir disk oluşturmak isteğe bağlıdır.
    2. Ağ yapılandırmasını ayarlayın.
    3. Gelişmiş sekmesinde hazırlanmış bir cloud-init betiği sağlayın.

Önkoşullar

Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

  • Etkinleştirdiğiniz bir Azure Stack Edge cihazı. Ayrıntılı adımlar için bkz . Azure Stack Edge Pro GPU'larını etkinleştirme.

  • en son Ubuntu 20.04 VM görüntüsüne( Azure Market veya getirdiğiniz özel görüntüye) erişin:

    $urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160

    VM görüntüsünü almak için Azure Market görüntüleri arama'daki adımları kullanın.

cloud-init betiğini hazırlama

IoT Edge çalışma zamanını Ubuntu VM'sine dağıtmak için VM dağıtımı sırasında bir cloud-init betiği kullanın.

Aşağıdaki bölümlerden birinde yer alan adımları kullanın:

Simetrik anahtar sağlamayı kullanma

Cihazınızı DPS olmadan IoT Hub'a bağlamak için bu bölümdeki adımları kullanarak IoT Edge çalışma zamanını ve NVIDIA'nın kapsayıcı çalışma zamanını dağıtmak üzere VM oluşturma Gelişmiş sayfasına bir cloud-init betiği hazırlayın.

  1. Mevcut bir IoT Hub'ı kullanın veya yeni bir Hub oluşturun. IoT Hub oluşturmak için bu adımları kullanın.

  2. Azure Stack Edge cihazınızı IoT Hub'a kaydetmek için bu adımları kullanın.

  3. Cihazınız için IoT Hub'dan Birincil Bağlantı Dizesi'ni alın ve deviceConnectionString için aşağıdaki konuma yapıştırın.

Simetrik anahtar sağlama için cloud-init betiği


#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

DPS kullanma

Cihazınızı DPS ve IoT Central'a bağlamak için bu bölümdeki adımları kullanın. VM'yi oluştururken IoT Edge çalışma zamanını dağıtmak için bir script.sh dosyası hazırlayacaksınız.

  1. Mevcut IoT Hub'ı ve DPS'yi kullanın veya yeni bir IoT Hub oluşturun.

  2. DPS kaynağına gidin ve tek bir kayıt oluşturun. 

    1. Cihaz Sağlama Hizmeti>Kayıtları yönet Bireysel kayıt> ekle'ye gidin.
    2. Kanıtlama türü ve IoT Edge cihazı için Simetrik Anahtar seçiminin True olduğundan emin olun. Varsayılan seçim False'tur.
    3. DPS kaynak sayfasından aşağıdaki bilgileri alın:
      • Kayıt Kimliği. IoT Hub'ınızın Cihaz Kimliği ile aynı kimliği kullanmanızı öneririz.
      • Genel Bakış menüsünde bulunan Kimlik Kapsamı.
      • Bireysel Kayıt menüsünden Birincil SAS Anahtarı .
  3. IoT Hub (IDScope) ve DPS(RegistrationID, Simetrik Anahtar) değerlerini kopyalayıp betik bağımsız değişkenlerine yapıştırın.

IoT Hub DPS için Cloud-init betiği


#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

IoT Edge çalışma zamanını dağıtma

IoT Edge çalışma zamanının dağıtılması, yukarıda bahsedilen cloud-init betiğini kullanarak VM oluşturma işleminin bir parçasıdır.

VM ve IoT Edge çalışma zamanını dağıtmaya yönelik üst düzey adımlar şunlardır:

  1. Azure Market'dan Ubuntu VM görüntüsünü alın. Ayrıntılı adımlar için Azure Stack Edge'iniz için VM görüntüsü oluşturmak üzere Azure Market görüntüsünü kullanma başlığındaki yönergeleri izleyin.

    1. Azure portalında Azure Market gidin.
    2. Azure Cloud Shell'e veya Azure CLI yüklü bir istemciye bağlanın. Ayrıntılı adımlar için bkz . Azure Cloud Shell'de Bash için Hızlı Başlangıç.

    Not

    Kabuk oturumunun kapatılması, kabuk oturumu sırasında oluşturulan tüm değişkenleri siler. Oturumu yeniden açmak için değişkenlerin yeniden oluşturması gerekir.

    c. Aboneliği ayarlamak için aşağıdaki komutu çalıştırın.

    az account set –subscription <subscription id>
    
  2. Ubuntu 20.04 LTS görüntüsünün Azure Market aramak için Azure Market resim arama'daki adımları kullanın.

    Ubuntu 20.04 LTS görüntüsü örneği:

    $urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
    
  3. Market görüntüsünden yeni bir yönetilen disk oluşturun. Ayrıntılı adımlar için bkz. Azure Stack Edge'iniz için VM görüntüsü oluşturmak için Azure Market görüntüsünü kullanma.

  4. Yönetilen diskten bir VHD'yi Azure Depolama hesabına aktarın. Ayrıntılı adımlar için bkz . Yönetilen diskten Azure Depolama'ya VHD aktarma.

  5. VM görüntüsünü kullanarak Ubuntu VM oluşturmak için bu adımları izleyin.

    1. Gelişmiş sekmesinde cloud-init betiğini belirtin. VM oluşturmak için bkz. Azure portalı aracılığıyla GPU VM dağıtma veya Azure portalı aracılığıyla VM dağıtma.

      Azure portalında VM yapılandırmasının Gelişmiş sekmesinin ekran görüntüsü.

    2. IoT Hub veya DPS cihazına bağlanmak için cloud-init içinde uygun cihaz bağlantı dizesi belirtin. Ayrıntılı adımlar için bkz . Simetrik anahtarlarla sağlama veya IoT Hub DPS ile sağlama.

      Azure portalında VM yapılandırmasının Özel veri alanının ekran görüntüsü.

VM oluşturma sırasında cloud-init belirtmediyseniz, VM oluşturulduktan sonra IoT Edge çalışma zamanını el ile dağıtmanız gerekir:

  1. SSH aracılığıyla VM'ye bağlanın.
  2. Kapsayıcı altyapısını VM'ye yükleyin. Ayrıntılı adımlar için bkz . Simetrik anahtarları kullanarak Linux'ta IoT Edge cihazı oluşturma ve sağlama veya Hızlı Başlangıç - Azure portalı ile IoT Hub DPS'yi ayarlama.

IoT Edge çalışma zamanını doğrulama

IoT Edge çalışma zamanınızın çalıştığını doğrulamak için bu adımları kullanın.

  1. Azure portalında IoT Hub kaynağına gidin.

  2. IoT Edge cihazını seçin.

  3. IoT Edge çalışma zamanının çalıştığını doğrulayın.

    Azure portalında IoT Edge çalışma zamanı durumunun ekran görüntüsü.

    IoT Edge cihaz yapılandırmanızın sorunlarını gidermek için bkz . IoT Edge cihazınızda sorun giderme.

IoT Edge çalışma zamanını güncelleştirme

VM'yi güncelleştirmek için IoT Edge'i güncelleştirme başlığındaki yönergeleri izleyin. Azure IoT Edge'in en son sürümünü bulmak için bkz . Azure IoT Edge sürümleri.

Sonraki adımlar

Ubuntu VM'nizde bir IoT Edge modülü dağıtmak ve çalıştırmak için IoT Edge modüllerini dağıtma sayfasındaki adımlara bakın.

NVIDIA'nın DeepStream modülünü dağıtmak için bkz . GPU ile Azure Stack Edge Pro'da Ubuntu VM'de NVIDIA DeepStream modülünü dağıtma.

NVIDIA DIGITS'ı dağıtmak için bkz . Prefabrik bir NVIDIA modülünde GPU'ları etkinleştirme.