Подготовка 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. Это можно реализовать следующим образом:
- Создайте tarball виртуального жесткого диска на локальном компьютере:
tar -czvf ./image_buster_azure_amd64.vhd.tar.gz ./image_buster_azure_amd64.vhd
. - Создайте виртуальную машину Linux в Azure (дистрибутив по вашему усмотрению). При создании обязательно укажите достаточно большой размер диска для хранения извлеченного виртуального жесткого диска.
- Скачайте служебную программу azcopy на виртуальную машину Linux в Azure. Ее можно получить здесь.
- Скопируйте tarball на виртуальную машину:
scp ./image_buster_azure_amd64.vhd.tar.gz <vm>:~
. - Извлеките виртуальный жесткий диск на виртуальной машине:
tar -xf ./image_buster_azure_amd64.vhd.tar.gz
(это займет некоторое время, учитывая размер файла). - Наконец, на виртуальной машине скопируйте виртуальный жесткий диск на диск Azure с помощью команды
azcopy
(см. выше).
Следующие шаги. Теперь виртуальный жесткий диск Debian Linux можно использовать для создания новых виртуальных машин Azure. Если вы отправляете VHD-файл в Azure впервые, см. раздел Вариант 1. Передача VHD.