Подготовка VHD Debian для Azure

Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы

Необходимые компоненты

В этом разделе предполагается, что вы уже установили на виртуальный жесткий диск (VHD) операционную систему Debian Linux из ISO-файла, полученного с веб-сайта Debian. Существует несколько средств для создания VHD-файлов. Hyper-V — это лишь один из примеров. Инструкции по работе с Hyper-V см. в разделе Установка роли Hyper-V и настройка виртуальной машины.

Замечания по установке

  • См. дополнительные сведения о подготовке Linux для Azure.
  • Более новый формат VHDX не поддерживается в Azure. Можно преобразовать диск в формат VHD с помощью диспетчера Hyper-V или командлета convert-vhd .
  • При установке Linux рекомендуется использовать стандартные разделы, а не LVM — значение по умолчанию во многих дистрибутивах. Это позволит избежать конфликта имен LVM при клонировании виртуальных машин, особенно если диск с OC может быть подключен к другой ВМ в целях устранения неполадок. Для дисков данных можно использовать LVM или RAID.
  • Не настраивайте раздел подкачки на диске с ОС. Можно настроить агент Linux для Azure для создания файла подкачки на временном диске ресурсов. Дополнительные сведения можно найти в инструкциях ниже.
  • Размер виртуальной памяти всех VHD в Azure должен быть округлен до 1 МБ. При конвертации неподготовленного диска в формат VHD убедитесь, что размер этого диска в несколько раз превышает 1 МБ. См. дополнительные сведения об установке Linux.

Создание виртуальных жестких дисков Debian с помощью Azure-Manage

Существуют средства для создания виртуальных жестких жестких знаков Debian для Azure, таких как сценарии управления azure из Instaclustr. Рекомендуется использовать их, а не создавать образ с нуля. Например, чтобы создать виртуальный жесткий диск Debian 8, выполните следующие команды для скачивания средства azure-manage (и зависимостей) и выполнения скрипта azure_build_image:

# sudo apt-get update
# sudo apt-get install git qemu-utils mbr kpartx debootstrap

# sudo apt-get install python3-pip python3-dateutil python3-cryptography
# sudo pip3 install azure-storage azure-servicemanagement-legacy azure-common pytest pyyaml
# git clone https://github.com/credativ/azure-manage.git
# cd azure-manage
# sudo pip3 install .

# sudo azure_build_image --option release=jessie --option image_size_gb=30 --option image_prefix=debian-jessie-azure section

Подготовка образа Debian для Azure

Вы можете создать базовый облачный образ Debian для Azure с помощью конструктора облачных образов FAI.

(Следующие команды git clone и apt install извлечены из репозитория облачных образов Debian.) Начните с клонирования репозитория и установки зависимостей:

$ git clone https://salsa.debian.org/cloud-team/debian-cloud-images.git
$ sudo apt install --no-install-recommends ca-certificates debsums dosfstools \
    fai-server fai-setup-storage make python3 python3-libcloud python3-marshmallow \
    python3-pytest python3-yaml qemu-utils udev
$ cd ./debian-cloud-images

При необходимости настройте сборку, добавив скрипты (например, скрипты оболочки) в ./config_space/scripts/AZURE.

Пример скрипта для настройки образа:

$ mkdir -p ./config_space/scripts/AZURE
$ cat > ./config_space/scripts/AZURE/10-custom <<EOF
#!/bin/bash

\$ROOTCMD bash -c "echo test > /usr/local/share/testing"
EOF
$ sudo chmod 755 ./config_space/scripts/AZURE/10-custom

Обратите внимание, что важно добавлять ко всем командам, с помощью которых требуется настроить образ, префикс $ROOTCMD, поскольку используется псевдоним chroot $target.

Сборка образа Debian 10 для Azure:

$ make image_buster_azure_amd64

В результате в текущий каталог будут записаны несколько файлов, в частности файл образа image_buster_azure_amd64.raw.

Чтобы преобразовать образ в формате RAW в формат VHD для Azure, выполните следующие действия:

rawdisk="image_buster_azure_amd64.raw"
vhddisk="image_buster_azure_amd64.vhd"

MB=$((1024*1024))
size=$(qemu-img info -f raw --output json "$rawdisk" | \
gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')

rounded_size=$(((($size+$MB-1)/$MB)*$MB))
rounded_size_adjusted=$(($rounded_size + 512))

echo "Rounded Size Adjusted = $rounded_size_adjusted"

sudo qemu-img resize "$rawdisk" $rounded_size
qemu-img convert -f raw -o subformat=fixed,force_size -O vpc "$rawdisk" "$vhddisk"

Будет создан виртуальный жесткий диск (VHD) image_buster_azure_amd64.vhd с округленным размером, чтобы этот диск можно было успешно скопировать на диск Azure.

Теперь нужно создать ресурсы Azure для этого образа (используется переменная $rounded_size_adjusted, поэтому это действие нужно выполнять в том же процессе оболочки, что и выше).

az group create -l $LOCATION -n $RG

az disk create \
    -n $DISK \
    -g $RG \
    -l $LOCATION \
    --for-upload --upload-size-bytes "$rounded_size_adjusted" \
    --sku standard_lrs --hyper-v-generation V1

ACCESS=$(az disk grant-access \
    -n $DISK -g $RG \
    --access-level write \
    --duration-in-seconds 86400 \
    --query accessSas -o tsv)

azcopy copy "$vhddisk" "$ACCESS" --blob-type PageBlob

az disk revoke-access -n $DISK -g $RG
az image create \
    -g $RG \
    -n $IMAGE \
    --os-type linux \
    --source $(az disk show \
        -g $RG \
        -n $DISK \
        --query id -o tsv)
az vm create \
    -g $RG \
    -n $VM \
    --ssh-key-value $SSH_KEY_VALUE \
    --public-ip-address-dns-name $VM \
    --image $(az image show \
        -g $RG \
        -n $IMAGE \
        --query id -o tsv)

Примечание.

Если из-за низкой пропускной способности обработка отправки с локального компьютера на диск Azure с помощью azcopy занимает слишком много времени, для ускорения процесса можно использовать jumpbox виртуальной машины Azure. Это можно реализовать следующим образом:

  1. Создайте tarball виртуального жесткого диска на локальном компьютере: tar -czvf ./image_buster_azure_amd64.vhd.tar.gz ./image_buster_azure_amd64.vhd.
  2. Создайте виртуальную машину Linux в Azure (дистрибутив по вашему усмотрению). При создании обязательно укажите достаточно большой размер диска для хранения извлеченного виртуального жесткого диска.
  3. Скачайте служебную программу azcopy на виртуальную машину Linux в Azure. Ее можно получить здесь.
  4. Скопируйте tarball на виртуальную машину: scp ./image_buster_azure_amd64.vhd.tar.gz <vm>:~.
  5. Извлеките виртуальный жесткий диск на виртуальной машине: tar -xf ./image_buster_azure_amd64.vhd.tar.gz (это займет некоторое время, учитывая размер файла).
  6. Наконец, на виртуальной машине скопируйте виртуальный жесткий диск на диск Azure с помощью команды azcopy (см. выше).

Следующие шаги. Теперь виртуальный жесткий диск Debian Linux можно использовать для создания новых виртуальных машин Azure. Если вы отправляете VHD-файл в Azure впервые, см. раздел Вариант 1. Передача VHD.