Подготовка виртуальной машины Ubuntu для Azure
Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы
Теперь Ubuntu публикует официальные виртуальные жесткие диски Azure, загрузить которые можно по адресу: https://cloud-images.ubuntu.com/. Если вам нужно создать собственный специализированный образ Ubuntu для Azure, а не использовать приведенную ниже процедуру вручную, рекомендуется начать с этих известных рабочих виртуальных жестких жестких машин и настроить их по мере необходимости. Последние выпуски образов можно всегда найти в следующих расположениях:
- Ubuntu 18.04 / Bionic: bionic-server-cloudimg-amd64-azure.vhd.zip
- Ubuntu 20.04 / Focal: focal-server-cloudimg-amd64-azure.vhd.zip
- Ubuntu 22.04/Jammy: jammy-server-cloudimg-amd64-azure.vhd.zip
Необходимые компоненты
В этой статье предполагается, что операционная система Ubuntu Linux уже установлена на виртуальный жесткий диск. Существует несколько средств для создания VHD-файлов, например решение для виртуализации, такое как Hyper-V. Инструкции см. в разделе Установка роли Hyper-V и настройка виртуальной машины.
Замечания по установке Ubuntu
- Дополнительные сведения о подготовке Linux для Azure см. в разделе Общие замечания по установке Linux.
- Формат VHDX не поддерживается в Azure, только фиксированный виртуальный жесткий диск. Вы можете преобразовать диск в формат VHD с помощью диспетчера Hyper-V или командлета
Convert-VHD
. - При установке системы Linux рекомендуется использовать стандартные секции, а не LVM (часто по умолчанию для многих установок). Это позволит избежать конфликта имен LVM при клонировании виртуальных машин, особенно если диск с OC может быть подключен к другой ВМ в целях устранения неполадок. Для дисков данных можно использовать LVM или RAID.
- Не настраивайте секцию буфера или файл буфера на диске ОС. Агент подготовки cloud-init можно настроить так, чтобы он создал файл или раздел подкачки на временном диске ресурсов. Дополнительные сведения описаны далее.
- Размер виртуальной памяти всех VHD в Azure должен быть округлен до 1 МБ. При конвертации диска в формате RAW в виртуальный жесткий диск убедитесь, что размер диска RAW в несколько раз превышает 1 МБ. См. дополнительные сведения в примечаниях по установке Linux.
Создание вручную
Примечание.
Прежде чем создавать собственный образ Ubuntu для Azure, попробуйте использовать предварительно созданные и проверенные образов с сайта https://cloud-images.ubuntu.com/.
На центральной панели диспетчера Hyper-V выберите виртуальную машину.
Щелкните Подключение , чтобы открыть окно виртуальной машины.
Замените текущие репозитории в образе репозиторием Azure для Ubuntu.
Перед редактированием
/etc/apt/sources.list
рекомендуется создать резервную копию:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo sed -i 's#http://archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
sudo sed -i 's#http://[a-z][a-z]\.archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
sudo sed -i 's#http://security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
sudo sed -i 's#http://[a-z][a-z]\.security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
sudo apt-get update
- Образы Ubuntu для Azure теперь используют специализированное ядро Azure. Обновите операционную систему до последней версии специализированного ядра Azure и установите инструменты Azure для Linux (включая зависимости Hyper-V), выполнив следующие команды:
sudo apt update
sudo apt install linux-azure linux-image-azure linux-headers-azure linux-tools-common linux-cloud-tools-common linux-tools-azure linux-cloud-tools-azure
sudo apt full-upgrade
sudo reboot
- Измените строку загрузки ядра в конфигурации Grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте файл
/etc/default/grub
в текстовом редакторе, найдите переменнуюGRUB_CMDLINE_LINUX_DEFAULT
(или добавьте ее, если это необходимо) и измените ее, включив следующие параметры:
GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300 quiet splash"
Сохраните и закройте файл, а затем выполните команду sudo update-grub
. Это гарантирует отправку всех сообщений консоли на первый последовательный порт, что может помочь технической поддержке Azure в плане отладки.
Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки. Обычно это сделано по умолчанию.
Установите cloud-init (агент подготовки) и агент Linux для Azure (обработчик гостевых расширений). В пакете cloud-init для настройки конфигурации сети системы (во время подготовки к работе и каждой последующей загрузки) используются
netplan
иgdisk
, чтобы разделить диски ресурсов.
sudo apt update
sudo apt install cloud-init gdisk netplan.io walinuxagent && systemctl stop walinuxagent
Примечание.
Установка пакета walinuxagent
приведет к удалению пакетов NetworkManager
и NetworkManager-gnome
(если они установлены).
- Удалите конфигурации cloud-init, используемые по умолчанию, и оставшиеся артефакты
netplan
, которые могут конфликтовать с процессом подготовки cloud-init в Azure:
sudo rm -f /etc/cloud/cloud.cfg.d/50-curtin-networking.cfg /etc/cloud/cloud.cfg.d/curtin-preserve-sources.cfg /etc/cloud/cloud.cfg.d/99-installer.cfg /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg
sudo rm -f /etc/cloud/ds-identify.cfg
sudo rm -f /etc/netplan/*.yaml
- Настройте cloud-init для подготовки системы к работе с помощью источника данных Azure:
cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg
datasource_list: [ Azure ]
EOF
cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/90-azure.cfg
system_info:
package_mirrors:
- arches: [i386, amd64]
failsafe:
primary: http://archive.ubuntu.com/ubuntu
security: http://security.ubuntu.com/ubuntu
search:
primary:
- http://azure.archive.ubuntu.com/ubuntu/
security: []
- arches: [armhf, armel, default]
failsafe:
primary: http://ports.ubuntu.com/ubuntu-ports
security: http://ports.ubuntu.com/ubuntu-ports
EOF
cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg
reporting:
logging:
type: log
telemetry:
type: hyperv
EOF
- Настройте агент Linux для Azure, чтобы он выполнял подготовку с помощью cloud-init. Дополнительные сведения об этих параметрах см. в проекте WALinuxAgent.
sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /etc/waagent.conf
sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=y/g' /etc/waagent.conf
sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
cat <<EOF | sudo tee -a /etc/waagent.conf
# For Azure Linux agent version >= 2.2.45, this is the option to configure,
# enable, or disable the provisioning behavior of the Linux agent.
# Accepted values are auto (default), waagent, cloud-init, or disabled.
# A value of auto means that the agent will rely on cloud-init to handle
# provisioning if it is installed and enabled, which in this case it will.
Provisioning.Agent=auto
EOF
- Очистите журналы и артефакты среды выполнения cloud-init и агента Linux для Azure:
sudo cloud-init clean --logs --seed
sudo rm -rf /var/lib/cloud/
sudo systemctl stop walinuxagent.service
sudo rm -rf /var/lib/waagent/
sudo rm -f /var/log/waagent.log
- Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в Azure:
Примечание.
Команда sudo waagent -force -deprovision+user
выполняет обобщение образа, пытаясь очистить систему и сделать ее пригодной для повторной подготовки. Команда +user
также удаляет последнюю подготовленную учетную запись пользователя и связанные с ней данные.
Предупреждение
Отмена подготовки с помощью приведенной выше команды не гарантирует, что образ очищается от всех конфиденциальных данных и подходит для распространения.
sudo waagent -force -deprovision+user
sudo rm -f ~/.bash_history
В диспетчере Hyper-V выберите Действие -> Завершение работы.
Azure принимает виртуальные жесткие диски только фиксированного размера. Если диск ОС виртуальной машины не является виртуальным жестким диском фиксированного размера, используйте
Convert-VHD
командлет PowerShell и укажите-VHDType Fixed
этот параметр. Ознакомьтесь с документацией поConvert-VHD
здесь.Чтобы перенести виртуальную машину 2-го поколения в Azure, выполните следующие действия:
Измените каталог на каталог загрузки EFI:
cd /boot/efi/EFI
- Скопируйте каталог Ubuntu в новый каталог с именем boot:
sudo cp -r ubuntu/ boot
- Смените каталог на только что созданный каталог загрузки:
cd boot
- Переименуйте файл shimx64.efi:
sudo mv shimx64.efi bootx64.efi
- Переименуйте файл grub.cfg в bootx64.cfg:
sudo mv grub.cfg bootx64.cfg
Следующие шаги
Теперь виртуальный жесткий диск Ubuntu Linux можно использовать для создания новых виртуальных машин Azure. Если вы отправляете VHD-файл в Azure впервые, см. раздел Вариант 1. Передача VHD.