Развертывание виртуальных машин на устройстве GPU Azure Stack Edge Pro с помощью Azure CLI и Python
ОБЛАСТЬ ПРИМЕНЕНИЯ: Azure Stack Edge Pro — GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
Вы можете создавать виртуальные машины на устройстве Azure Stack Edge и управлять ими с помощью API. Эти API являются стандартными API Azure Resource Manager, которые вызываются с помощью локальной конечной точки Azure Stack Edge. API Azure Resource Manager реализуют уровень согласованного управления, позволяя создавать, обновлять и удалять виртуальные машины в локальной подписке, существующей на устройстве. Вы можете подключиться к Azure Resource Manager в Azure Stack Edge с помощью командлетов Azure PowerShell.
В этом руководстве описывается создание виртуальной машины и управление ею на устройстве Azure Stack Edge Pro с помощью Python и API Azure.
Рабочий процесс развертывания виртуальной машины
Выполнение рабочего процесса развертывания показано на схеме ниже.
Общая сводка по рабочему процессу развертывания включает следующие действия:
- Подключение к Azure Resource Manager.
- Создание или изменение группы ресурсов
- Создание учетной записи хранилища
- Добавление URI BLOB-объекта в файл hosts.
- Установка сертификатов
- Передача VHD
- Создание управляемых дисков из VHD.
- Создание образа виртуальной машины на основе управляемого диска образа.
- Создание виртуальной машины с ранее созданными ресурсами.
- Создание виртуальной сети
- Создание виртуальной сетевой карты с использованием идентификатора подсети виртуальной сети.
Подробное описание схемы рабочего процесса см. в статье Развертывание виртуальных машин на устройстве Azure Stack Edge Pro с помощью Azure PowerShell. См. статью Подключение к Azure Resource Manager на устройстве Azure Stack Edge.
Необходимые компоненты
Прежде чем приступать к созданию виртуальной машины на устройстве Azure Stack Edge Pro и управлению ею с помощью Azure CLI и Python, необходимо выполнить следующие предварительные требования:
Вы выполнили параметры сети на устройстве Azure Stack Edge Pro, как описано на шаге 1. Настройка устройства Azure Stack Edge Pro.
Вы включили сетевой интерфейс для вычислений. IP-адрес этого сетевого интерфейса используется для создания виртуального коммутатора для развертывания виртуальной машины. Это можно сделать следующим образом:
Перейдите в раздел Вычисление. Выберите сетевой интерфейс, который будет использоваться для создания виртуального коммутатора.
Внимание
Для служб вычислений можно настроить только один порт.
Включите службы вычислений на сетевом интерфейсе. Azure Stack Edge Pro создает виртуальный коммутатор, соответствующий этому сетевому интерфейсу, и управляет им.
Создайте и установите все сертификаты на устройстве Azure Stack Edge Pro и в надежном хранилище клиента Выполните процедуру, описанную на шаге 2. Создание и установка сертификатов.
Создайте сертификат с расширением CER в кодировке Base-64 (формат PEM) для устройства Azure Stack Edge Pro. Этот сертификат уже отправлен как цепочка подписывания на устройство и установлен в доверенном корневом хранилище в клиенте. Этот сертификат в формате PEM также обеспечивает поддержку Python на этом клиенте.
Преобразуйте этот сертификат в формат
pem
с помощью команды certutil. Эту команду необходимо выполнить в каталоге, содержащем сертификат.certutil.exe <SourceCertificateName.cer> <DestinationCertificateName.pem>
Ниже показан пример выполнения команды:
PS C:\Certificates> certutil.exe -encode aze-root.cer aze-root.pem Input Length = 2150 Output Length = 3014 CertUtil: -encode command completed successfully. PS C:\Certificates>
Этот сертификат в формате
pem
позже будет добавлен в хранилище Python.Назначьте IP-адрес устройства на странице Сеть в локальном пользовательском веб-интерфейсе. Добавьте этот IP-адрес в:
- файл узла на клиенте; ИЛИ
- конфигурацию DNS-сервера.
Внимание
Рекомендуется изменить конфигурацию DNS-сервера для разрешения имен конечных точек.
Откройте Блокнот от имени администратора (для сохранения файла требуются привилегии администратора), а затем откройте файл hosts, расположенный в
C:\Windows\System32\Drivers\etc
.Добавьте следующие записи в файл hosts, указав соответствующие значения для вашего устройства:
<Device IP> login.<appliance name>.<DNS domain> <Device IP> management.<appliance name>.<DNS domain> <Device IP> <storage name>.blob.<appliance name>.<DNS domain>
Для справки используйте следующее изображение. Сохраните файл hosts.
Скачайте скрипт Python, используемый в этой процедуре.
Подготовьте среду к работе с Azure CLI:
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.
Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.
Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
Шаг 1. Настройка Azure CLI/Python на клиенте
Проверка профиля и установка Azure CLI
Установите Azure CLI на клиенте. В этом примере используется Azure CLI 2.0.80. Чтобы проверить версию Azure CLI, выполните команду az --version.
Ниже приведен пример выходных данных этой команды:
PS C:\windows\system32> az --version azure-cli 2.0.80 command-modules-nspkg 2.0.3 core 2.0.80 nspkg 3.0.4 telemetry 1.0.4 Extensions: azure-cli-iot-ext 0.7.1 Python location 'C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe' Extensions directory 'C:\.azure\cliextensions' Python (Windows) 3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 02:47:15) [MSC v.1900 32 bit (Intel)] Legal docs and information: aka.ms/AzureCliLegal Your CLI is up-to-date. Please let us know how we are doing: https://aka.ms/clihats PS C:\windows\system32>
Если у вас нет Azure CLI, скачайте и установите Azure CLI в Windows. Azure CLI можно запускать с помощью командной строки Windows или Windows PowerShell.
Запишите расположение Python в интерфейсе командной строки. Расположение Python потребуется для определения расположения хранилища доверенных корневых сертификатов для Azure CLI.
Чтобы запустить пример скрипта, используемый в этой статье, вам понадобятся следующие версии библиотеки Python:
azure-common==1.1.23 azure-mgmt-resource==2.1.0 azure-mgmt-network==2.7.0 azure-mgmt-compute==5.0.0 azure-mgmt-storage==1.5.0 azure-storage-blob==1.2.0rc1 haikunator msrestazure==0.6.2
Чтобы установить эти версии, выполните следующую команду:
.\python.exe -m pip install haikunator
В следующем примере выходных данных показана установка Haikunator:
PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> .\python.exe -m pip install haikunator Collecting haikunator Downloading https://files.pythonhosted.org/packages/43/fa/130968f1a1bb1461c287b9ff35c630460801783243acda2cbf3a4c5964a5/haikunator-2.1.0-py2.py3-none-any.whl Installing collected packages: haikunator Successfully installed haikunator-2.1.0 You are using pip version 10.0.1, however version 20.0.1 is available. You should consider upgrading using the 'python -m pip install --upgrade pip' command. PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
В следующем примере выходных данных показана установка pip для
msrestazure
:PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> .\python.exe -m pip install msrestazure==0.6.2 Requirement already satisfied: msrestazure==0.6.2 in c:\program files (x86)\microsoft sdks\azure\cli2\lib\site-packages (0.6.2) Requirement already satisfied: msrest<2.0.0,>=0.6.0 in c:\program files (x86)\microsoft sdks\azure\cli2\lib\site-packages (from msrestazure==0.6.2) (0.6.10) === CUT =========================== CUT ================================== Requirement already satisfied: cffi!=1.11.3,>=1.8 in c:\program files (x86)\microsoft sdks\azure\cli2\lib\site-packages (from cryptography>=1.1.0->adal<2.0.0,>=0.6.0->msrestazure==0.6.2) (1.13.2) Requirement already satisfied: pycparser in c:\program files (x86)\microsoft sdks\azure\cli2\lib\site-packages (from cffi!=1.11.3,>=1.8->cryptography>=1.1.0->adal<2.0.0,>=0.6.0->msrestazure==0.6.2) (2.18) You are using pip version 10.0.1, however version 20.0.1 is available. You should consider upgrading using the 'python -m pip install --upgrade pip' command. PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
Настройка доверия для корневого сертификата ЦС Azure Stack Edge Pro
Найдите расположение сертификата на своем компьютере. Это расположение зависит от того, куда вы установили
az cli
. Запустите Windows PowerShell от имени администратора. Перейдите по пути, куда с помощьюaz cli
вы установили Python:C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe
.Чтобы получить расположение сертификата, введите следующую команду:
.\python -c "import certifi; print(certifi.where())"
Командлет возвращает расположение сертификата, как показано ниже:
PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> .\python -c "import certifi; print(certifi.where())" C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\lib\site-packages\certifi\cacert.pem PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
Запишите это расположение, так как оно понадобится вам позже:
C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\lib\site-packages\certifi\cacert.pem
.Чтобы настроить доверие для корневого сертификата ЦС Azure Stack Edge Pro, добавьте его к существующему сертификату Python. Нужно указать расположение, где сохранен сертификат PEM.
$pemFile = "<Path to the pem format certificate>"
Пример пути: C:\VM-scripts\rootteam3device.pem.
В окне Windows PowerShell введите следующие команды:
$root = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $root.Import($pemFile) Write-Host "Extracting required information from the cert file" $md5Hash = (Get-FileHash -Path $pemFile -Algorithm MD5).Hash.ToLower() $sha1Hash = (Get-FileHash -Path $pemFile -Algorithm SHA1).Hash.ToLower() $sha256Hash = (Get-FileHash -Path $pemFile -Algorithm SHA256).Hash.ToLower() $issuerEntry = [string]::Format("# Issuer: {0}", $root.Issuer) $subjectEntry = [string]::Format("# Subject: {0}", $root.Subject) $labelEntry = [string]::Format("# Label: {0}", $root.Subject.Split('=')[-1]) $serialEntry = [string]::Format("# Serial: {0}", $root.GetSerialNumberString().ToLower()) $md5Entry = [string]::Format("# MD5 Fingerprint: {0}", $md5Hash) $sha1Entry= [string]::Format("# SHA1 Fingerprint: {0}", $sha1Hash) $sha256Entry = [string]::Format("# SHA256 Fingerprint: {0}", $sha256Hash) $certText = (Get-Content -Path $pemFile -Raw).ToString().Replace("`r`n","`n") $rootCertEntry = "`n" + $issuerEntry + "`n" + $subjectEntry + "`n" + $labelEntry + "`n" + ` $serialEntry + "`n" + $md5Entry + "`n" + $sha1Entry + "`n" + $sha256Entry + "`n" + $certText Write-Host "Adding the certificate content to Python Cert store" Add-Content "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem" $rootCertEntry Write-Host "Python Cert store was updated to allow the Azure Stack Edge Pro CA root certificate"
Подключение к Azure Stack Edge Pro
Зарегистрируйте среду Azure Stack Edge Pro, выполнив команду az cloud register.
В некоторых сценариях прямое исходящее подключение к Интернету маршрутизируется через прокси-сервер или брандмауэр, который принудительно использует перехват SSL. В таких случаях
az cloud register
команда может завершиться ошибкой, например "Не удается получить конечные точки из облака". Чтобы обойти эту ошибку, задайте следующие переменные среды в Windows PowerShell:$ENV:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION = 1 $ENV:ADAL_PYTHON_SSL_NO_VERIFY = 1
Задайте переменные среды для скрипта для конечной точки Azure Resource Manager, расположение, в котором создаются ресурсы, и путь к исходному виртуальному жесткому диску. Расположение ресурсов является общим на всех устройствах Azure Stack Edge Pro:
dbelocal
. Вам также нужно указать префиксы адресов и частный IP-адрес. Все следующие переменные среды представляют значения на основе ваших значений, кроме переменнойAZURE_RESOURCE_LOCATION
со значением"dbelocal"
, которое нужно прописать в коде.$ENV:ARM_ENDPOINT = "https://management.team3device.teatraining1.com" $ENV:AZURE_RESOURCE_LOCATION = "dbelocal" $ENV:VHD_FILE_PATH = "C:\Downloads\Ubuntu1604\Ubuntu13.vhd" $ENV:ADDRESS_PREFIXES = "5.5.0.0/16" $ENV:PRIVATE_IP_ADDRESS = "5.5.174.126"
Зарегистрируйте среду. При выполнении az cloud register используйте следующие параметры:
значение Описание Пример Имя среды Имя среды, к которой вы подключаетесь. Укажите имя, например aze-environ
.Конечная точка Resource Manager URL-адрес: https://Management.<appliancename><dnsdomain>
.
Чтобы получить этот URL-адрес, перейдите на страницу Устройства в локальном пользовательском веб-интерфейсе устройства.Например, https://management.team3device.teatraining1.com
.az cloud register -n <environmentname> --endpoint-resource-manager "https://management.<appliance name>.<DNS domain>"
Ниже показан пример выполнения команды:
PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> az cloud register -n az-new-env --endpoint-resource-manager "https://management.team3device.teatraining1.com"
Установите активную среду, используя следующую команду:
az cloud set -n <EnvironmentName>
Ниже показан пример выполнения команды:
PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> az cloud set -n az-new-env Switched active cloud to 'az-new-env'. Use 'az login' to log in to this cloud. Use 'az account set' to set the active subscription. PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
Войдите в среду Azure Stack Edge Pro с помощью команды az login. Вы можете войти в среду Azure Stack Edge Pro от имени пользователя или субъекта-службы.
Чтобы войти от имени пользователя, сделайте следующее.
Вы можете указать имя пользователя и пароль непосредственно в команде
az login
или выполнить аутентификацию в браузере. Если для вашей учетной записи включена многофакторная аутентификация, возможным будет только второй вариант.Ниже показан пример выполнения команды
az login
:PS C:\Certificates> az login -u EdgeARMuser
После выполнения команды для входа вам будет предложено ввести пароль. Укажите пароль Azure Resource Manager.
Ниже приведен пример выходных данных после ввода пароля и входа:
PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> az login -u EdgeARMuser Password: [ { "cloudName": "az-new-env", "id": "A4257FDE-B946-4E01-ADE7-674760B8D1A3", "isDefault": true, "name": "Default Provider Subscription", "state": "Enabled", "tenantId": "c0257de7-538f-415c-993a-1b87a031879d", "user": { "name": "EdgeArmUser@localhost", "type": "user" } } ] PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
Запишите значения
id
иtenantId
, так как они соответствуют идентификатору подписки и идентификатору арендатора Azure Resource Manager соответственно и будут использоваться на следующем этапе.Следующие переменные среды нужно настроить в качестве субъекта-службы:
$ENV:ARM_TENANT_ID = "c0257de7-538f-415c-993a-1b87a031879d" $ENV:ARM_CLIENT_ID = "cbd868c5-7207-431f-8d16-1cb144b50971" $ENV:ARM_CLIENT_SECRET - "<Your Azure Resource Manager password>" $ENV:ARM_SUBSCRIPTION_ID = "<Your subscription ID>"
Идентификатор клиента Azure Resource Manager задан непосредственно в коде. Ваш идентификатор клиента Azure Resource Manager и идентификатор подписки Azure Resource Manager присутствуют в выходных данных команды
az login
, которую вы выполнили ранее. Секрет клиента Azure Resource Manager — это указанный пароль Azure Resource Manager.Дополнительные сведения см. в статье Установка пароля Azure Resource Manager на устройстве GPU Azure Stack Edge.
Измените версию профиля на 2019-03-01-hybrid. Чтобы изменить версию профиля, выполните следующую команду:
az cloud update --profile 2019-03-01-hybrid
Ниже показан пример выполнения команды
az cloud update
:PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> az cloud update --profile 2019-03-01-hybrid PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
Шаг 2. Создание виртуальной машины
Для создания виртуальной машины предоставляется скрипт Python. В зависимости от того, как вы выполнили вход (от имени пользователя или субъекта-службы), скрипт принимает соответствующие входные данные и создает виртуальную машину.
- Выполните скрипт Python из того же каталога, в котором установлен Python.
.\python.exe example_dbe_arguments_name_https.py cli
При выполнении скрипта отправка виртуального жесткого диска занимает 20–30 минут. Чтобы просмотреть ход выполнения отправки, можно использовать Обозреватель службы хранилища Azure или AzCopy.
Ниже показан пример выходных данных после успешного выполнения скрипта. Скрипт создает все ресурсы в группе ресурсов, использует эти ресурсы для создания виртуальной машины и, наконец, удаляет группу ресурсов, включая все созданные ресурсы.
PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> .\python.exe example_dbe_arguments_name_https.py cli Create Resource Group Create a storage account Uploading to Azure Stack Storage as blob: ubuntu13.vhd Listing blobs... ubuntu13.vhd VM image resource id: /subscriptions/.../resourceGroups/azure-sample-group-virtual-machines118/providers/Microsoft.Compute/images/UbuntuImage Create Vnet Create Subnet Create NIC Creating Linux Virtual Machine Tag Virtual Machine Create (empty) managed Data Disk Get Virtual Machine by Name Attach Data Disk Detach Data Disk Deallocating the VM (to prepare for a disk resize) Update OS disk size Start VM Restart VM Stop VM List VMs in subscription VM: VmName118 List VMs in resource group VM: VmName118 Delete VM All example operations completed successfully! Delete Resource Group Deleted: azure-sample-group-virtual-machines118 PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>