Azure Stack Edge의 Ubuntu VM에 IoT Edge 배포
적용 대상: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
이 문서에서는 IoT Edge 런타임을 Azure Stack Edge 디바이스에서 실행되는 Ubuntu VM에 배포하는 방법을 설명합니다. 새 개발 작업의 경우 최신 소프트웨어 버전을 사용하므로 이 문서에서 설명하는 셀프 서비스 배포 방법을 사용합니다.
상위 수준 흐름
대략적인 흐름은 다음과 같습니다.
- IoT Hub 또는 Azure IoT Hub DPS(Device Provisioning Service) 인스턴스를 만들거나 식별합니다.
- Azure CLI를 사용하여 Ubuntu 20.04 LTS VM 이미지를 가져옵니다.
- Ubuntu 이미지를 Azure Stack Edge VM 이미지 라이브러리에 업로드합니다.
- 다음 단계를 사용하여 Ubuntu 이미지를 VM으로 배포합니다.
- VM 이름, 사용자 이름 및 암호를 제공합니다. 다른 디스크를 만드는 것은 선택 사항입니다.
- 네트워크 구성을 설정합니다.
- 고급 탭에서 준비된 cloud-init 스크립트를 제공합니다.
필수 조건
시작하기 전에 다음을 확인합니다.
활성화한 Azure Stack Edge 디바이스. 자세한 단계는 Azure Stack Edge Pro GPU 활성화를 참조하세요.
최신 Ubuntu 20.04 VM 이미지(Azure Marketplace의 이미지 또는 가져오는 사용자 지정 이미지)에 액세스합니다.
$urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
Azure Marketplace 이미지 검색의 단계를 사용하여 VM 이미지를 가져옵니다.
cloud-init 스크립트 준비
IoT Edge 런타임을 Ubuntu VM에 배포하려면 VM 배포 중에 cloud-init 스크립트를 사용합니다.
다음 섹션 중 하나의 단계를 사용합니다.
대칭 키 프로비전 사용
DPS를 사용하지 않고 디바이스를 IoT Hub에 연결하려면 IoT Edge 런타임과 Nvidia의 컨테이너 런타임을 배포하기 위해 이 섹션의 단계를 사용하여 VM 만들기 고급 페이지에 대한 cloud-init 스크립트를 준비합니다.
기존 IoT Hub를 사용하거나 새 Hub를 만듭니다. IoT Hub를 만드는 단계를 사용합니다.
IoT Hub에서 Azure Stack Edge 디바이스를 등록하는 단계를 사용합니다.
디바이스에 대한 IoT Hub의 기본 연결 문자열을 검색한 다음, 아래의 DeviceConnectionString 위치에 붙여넣습니다.
대칭 키 프로비전용 cloud-init 스크립트
#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 사용
이 섹션의 단계를 사용하여 디바이스를 DPS 및 IoT Central에 연결합니다. VM을 만들 때 IoT Edge 런타임을 배포하는 script.sh 파일을 준비합니다.
기존 IoT Hub 및 DPS를 사용하거나 새 IoT Hub를 만듭니다.
- IoT Hub를 만드는 단계를 사용합니다.
- DPS를 만든 다음, IoT Hub를 DPS 범위에 연결하는 단계를 사용합니다.
DPS 리소스로 이동하여 개별 등록을 만듭니다.
- Device Provisioning Service>등록 관리>개별 등록 추가로 차례로 이동합니다.
- 증명 유형 및 IoT Edge 디바이스에 대한 대칭 키 선택 항목이 True인지 확인합니다. 기본 선택은 False입니다.
- DPS 리소스 페이지에서 다음 정보를 검색합니다.
- 등록 ID. IoT Hub에 대한 디바이스 ID와 동일한 ID를 사용하는 것이 좋습니다.
- 개요 메뉴에서 사용할 수 있는 ID 범위
- 개별 등록 메뉴의 기본 SAS 키
IoT Hub(IDScope) 및 DPS(RegistrationID, 대칭 키)의 값을 복사하여 스크립트 인수에 붙여넣습니다.
IoT Hub DPS용 cloud-init 스크립트
#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 런타임 배포
IoT Edge 런타임 배포는 위에서 언급한 cloud-init 스크립트를 사용하는 VM 만들기의 일부입니다.
VM 및 IoT Edge 런타임을 배포하는 대략적인 단계는 다음과 같습니다.
Azure Marketplace에서 Ubuntu VM 이미지를 가져옵니다. 자세한 단계는 Azure Marketplace 이미지를 사용하여 Azure Stack Edge용 VM 이미지 만들기의 지침을 따르세요.
- Azure Portal에서 Azure Marketplace로 이동합니다.
- Azure CLI가 설치된 Azure Cloud Shell 또는 클라이언트에 연결합니다. 자세한 단계는 Azure Cloud Shell의 Bash에 대한 빠른 시작을 참조하세요.
참고 항목
셸 세션을 닫으면 셸 세션 중에 만든 모든 변수가 삭제됩니다. 세션을 다시 열려면 변수를 다시 만들어야 합니다.
c. 다음 명령을 실행하여 구독을 설정합니다.
az account set –subscription <subscription id>
Azure Marketplace 이미지 검색의 단계를 사용하여 Azure Marketplace에서 Ubuntu 20.04 LTS 이미지를 검색합니다.
Ubuntu 20.04 LTS 이미지에 대한 예제:
$urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
Marketplace 이미지에서 새 관리 디스크를 만듭니다. 자세한 단계는 Azure Marketplace 이미지를 사용하여 Azure Stack Edge용 VM 이미지 만들기를 참조하세요.
VHD를 관리 디스크에서 Azure Storage 계정으로 내보냅니다. 자세한 단계는 관리 디스크에서 Azure Storage로 VHD 내보내기를 참조하세요.
다음 단계에 따라 VM 이미지를 사용하여 Ubuntu VM을 만듭니다.
고급 탭에서 cloud-init 스크립트를 지정합니다. VM을 만들려면 Azure Portal을 통해 GPU VM 배포 또는 Azure Portal을 통해 VM 배포를 참조하세요.
cloud-init에서 적절한 디바이스 연결 문자열을 지정하여 IoT Hub 또는 DPS 디바이스에 연결합니다. 자세한 단계는 대칭 키를 사용하여 프로비전 또는 IoT Hub DPS를 사용하여 프로비전을 참조하세요.
VM을 만드는 중에 cloud-init를 지정하지 않은 경우 VM이 만들어진 후 IoT Edge 런타임을 수동으로 배포해야 합니다.
- SSH를 통해 VM에 연결합니다.
- 컨테이너 엔진을 VM에 설치합니다. 자세한 단계는 대칭 키를 사용하여 Linux에서 IoT Edge 디바이스 만들기 및 프로비전 또는 빠른 시작 - Azure Portal에서 IoT Hub DPS 설정을 참조하세요.
IoT Edge 런타임 확인
다음 단계를 사용하여 IoT Edge 런타임이 실행되고 있는지 확인합니다.
Azure Portal에서 IoT Hub 리소스로 이동합니다.
IoT Edge 디바이스를 선택합니다.
IoT Edge 런타임이 실행되고 있는지 확인합니다.
IoT Edge 디바이스 구성 문제를 해결하려면 IoT Edge 디바이스 문제 해결을 참조하세요.
IoT Edge 런타임 업데이트
VM을 업데이트하려면 IoT Edge 업데이트의 지침을 따릅니다. 최신 버전의 Azure IoT Edge를 찾으려면 Azure IoT Edge 릴리스를 참조하세요.
다음 단계
IoT Edge 모듈을 Ubuntu VM에 배포하고 실행하려면 IoT Edge 모듈 배포의 단계를 참조하세요.
Nvidia의 DeepStream 모듈을 배포하려면 GPU가 있는 Azure Stack Edge Pro의 Ubuntu VM에 Nvidia DeepStream 모듈 배포를 참조하세요.
NVIDIA DIGITS를 배포하려면 조립식 NVIDIA 모듈에서 GPU 사용을 참조하세요.