Сведения о поддерживаемых и нерекомендованных дистрибутивах сообщества
Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы
Соглашение об уровне обслуживания для платформы Azure применяется для виртуальных машин с ОС Linux, только если используется один из рекомендованных дистрибутивов. Для рекомендованных дистрибутивов предоставляются предварительно настроенные образы Linux, представленные в коллекции в Azure Marketplace.
К любым дистрибутивам (не Azure Marketplace), выполняющимся в Azure, предъявляются определенные требования. Поскольку каждый дистрибутив имеет свои особенности, привести исчерпывающую информацию в рамках одной статьи невозможно. Даже при соблюдении всех приведенных ниже условий для надлежащей работы может потребоваться масштабная настройка системы Linux.
В этой статье приводятся общие рекомендации по работе с дистрибутивом Linux в Azure.
Общие замечания по установке Linux
Azure не поддерживает формат виртуального жесткого диска Hyper-V (VHDX) и может работать только с фиксированными виртуальными жесткими дисками. Можно преобразовать диск в формат VHD с помощью диспетчера Hyper-V или командлета Convert-VHD. Если вы используете VirtualBox, при создании диска нужно выбрать фиксированный размер вместо динамически выделяемого, который используется по умолчанию.
Azure поддерживает виртуальные машины 1-го поколения (загрузка в BIOS) и 2-го поколения (загрузка в UEFI).
Модуль ядра vfat должен быть включен в ядре.
Максимально допустимый размер виртуального жесткого диска составляет 1023 ГБ.
При установке системы Linux рекомендуется использовать стандартные разделы, а не диспетчер логических томов (LVM), который часто используется по умолчанию при установке. Это позволит избежать конфликта имен LVM c клонированными виртуальными машинами, особенно если диск с OC может быть подключен к другой идентичной виртуальной машине в целях устранения неполадок. Для дисков данных можно использовать LVM или RAID.
Требуется поддержка ядра для монтирования файловых систем UDF. При первой загрузке в Azure конфигурация подготовки передается в виртуальную машину Linux через UDF-носитель, подключенный к гостевой машине. Агент Azure Linux должен подключить файловую систему UDF для считывания конфигурации и подготовки виртуальной машины.
Версии ядра Linux ниже 2.6.37 не поддерживают NUMA в Hyper-V с виртуальными машинами большего размера. Эта проблема влияет в основном на дистрибутивы более ранних версий, в которых используется исходное ядро Red Hat 2.6.32, и была исправлена в Red Hat Enterprise Linux (RHEL) 6.6 (kernel-2.6.32-504). В системах под управлением модифицированных ядер старше версии 2.6.37 или ядер RHEL старше 2.6.32-504 в командной строке ядра необходимо задать параметр загрузки
numa=off
в файле grub.conf. Дополнительные сведения см. в статье базы знаний Red Hat 436883.Не настраивайте раздел подкачки на диске с ОС. Можно настроить агент Linux для создания файла подкачки на временном диске ресурсов, как описывается на следующих шагах.
Размер виртуальной памяти всех виртуальных жестких дисков в Azure должен быть округлен до 1 МБ (1024 × 1024 байт). Перед конвертацией диска RAW в формат VHD убедитесь, что размер диска RAW в несколько раз превышает 1 МБ, как описывается на следующих шагах.
Используйте самую актуальную версию дистрибутива, пакеты и программное обеспечение.
Удалите пользователей и системные учетные записи, открытые ключи, конфиденциальные данные, ненужное программное обеспечение и приложение.
Примечание
(Cloud-init >= 21.2 удаляет требование udf.) Однако без включения модуля UDF cdrom не будет подключаться во время подготовки, препятствуя применению пользовательских данных. Обходной путь для этого заключается в применении пользовательских данных с использованием пользовательских данных, однако в отличие от пользовательских данных пользовательские данные не шифруются. https://cloudinit.readthedocs.io/en/latest/topics/format.html
Установка модулей ядра без Hyper-V
Так как Azure запускается на гипервизоре Hyper-V, Linux требует определенные модули ядра для запуска в Azure. При наличии виртуальной машины, созданной вне Hyper-V, установщики Linux могут не включать драйверы для Hyper-V в начальный электронный диск (initrd или initramfs), если только виртуальная машина не обнаружит, что он работает в среде Hyper-V. Если для подготовки образа Linux используется другая система виртуализации (например, Virtualbox или KVM), вам может потребоваться выполнить повторную сборку initrd, чтобы на начальном электронном диске были доступны по крайней мере модули ядра hv_vmbus и hv_storvsc. Это известная проблема встречается по крайней мере в системах на основе предшествующего дистрибутива Red Hat. Также она может встречаться в других версиях.
Механизм повторной сборки образа initrd или initramfs может отличаться в зависимости от дистрибутива. Чтобы узнать правильную процедуру для вашего дистрибутива, см. документацию по дистрибутиву или раздел поддержки. Ниже приведен пример выполнения повторной сборки initrd с помощью служебной программы mkinitrd
:
Создайте резервную копию существующего образа initrd:
cd /boot sudo cp initrd-`uname -r`.img initrd-`uname -r`.img.bak
Выполните повторную сборку
initrd
с помощью модулей ядраhv_vmbus
иhv_storvsc
:sudo mkinitrd --preload=hv_storvsc --preload=hv_vmbus -v -f initrd-`uname -r`.img `uname -r`
Изменение размера VHD
Размер виртуальной памяти образов VHD в Azure должен быть округлен до 1 МБ. Как правило, размер VHD, созданных с помощью Hyper-V, настроен правильно. Если виртуальный жесткий диск (VHD) настроен неправильно, при попытке создать образ из VHD-файла может появиться следующее сообщение об ошибке.
The VHD http:\//\<mystorageaccount>.blob.core.windows.net/vhds/MyLinuxVM.vhd has an unsupported virtual size of 21475270656 bytes. The size must be a whole number (in MBs).
В таком случае вы можете изменить размер виртуальной машины с помощью консоли диспетчера Hyper-V или командлета Powershell Resize-VHD. Если вы работаете не в среде Windows, воспользуйтесь командой qemu-img
для преобразования (если необходимо) и изменения размера VHD.
Примечание
В команде qemu-img версии >=2.2.1 есть ошибка, которая приводит к созданию неверного формата VHD. Эта проблема устранена в QEMU версии 2.6. Рекомендуется использовать либо версию qemu-img
2.2.0 или более раннюю, либо версию 2.6 или более позднюю.
Изменение размера VHD с непосредственным использованием таких инструментов, как
qemu-img
илиvbox-manage
, может привести к сбою загрузки VHD. Мы советуем сначала преобразовать VHD в образ необработанного диска. Если образ виртуальной машины был создан в качестве образа необработанного диска (по умолчанию для некоторых гипервизоров, например, KVM), вы можете пропустить этот шаг.qemu-img convert -f vpc -O raw MyLinuxVM.vhd MyLinuxVM.raw
Рассчитайте необходимый размер образа диска, чтобы округлить размер виртуальной памяти до 1 МБ. Следующий скрипт для оболочки Bash использует
qemu-img info
для определения виртуального размера образа диска и вычисляет размер с округлением до 1 МБ в большую сторону.rawdisk="MyLinuxVM.raw" vhddisk="MyLinuxVM.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)) echo "Rounded Size = $rounded_size"
Измените размер необработанного диска с помощью
$rounded_size
, как показано выше.qemu-img resize MyLinuxVM.raw $rounded_size
А теперь преобразуйте необработанный диск обратно в VHD с фиксированным размером памяти.
qemu-img convert -f raw -o subformat=fixed,force_size -O vpc MyLinuxVM.raw MyLinuxVM.vhd
Или с версиями qemu до 2.6 удалите
force_size
параметр .qemu-img convert -f raw -o subformat=fixed -O vpc MyLinuxVM.raw MyLinuxVM.vhd
Рекомендации по ядру Linux
Драйверы Linux Integration Services (LIS) для Hyper-V и Azure встраиваются непосредственно в основное ядро Linux. Во многих дистрибутивах, которые включают последнюю версию ядра Linux (например, 3.x), эти драйверы уже доступны, или же в ядре предоставляются их более ранние версии. Эти ядра в основном ядре постоянно обновляются с помощью новых исправлений и функций, поэтому по возможности рекомендуется использовать рекомендованный дистрибутив, включающий все исправления и обновления.
Если вы работаете с одним из вариантов Red Hat Enterprise Linux версий 6.0–6.3, вам потребуется установить последние драйверы LIS для Hyper-V. Начиная с RHEL 6.4 и более поздних версий (и его производных вариантов), драйверы LIS уже включены в ядро. Поэтому дополнительные пакеты установки не требуются.
Если необходимо собственное ядро, рекомендуется использовать одну из последних версий (то есть 3.8 или более позднюю). Для дистрибутивов или поставщиков, предоставляющих собственное ядро, рекомендуется регулярно переносить драйверы LIS из основного ядра в собственное. Даже если вы работаете с относительно свежей версией ядра, настоятельно рекомендуется отслеживать исправления драйверов LIS в основном ядре и по мере необходимости обновлять драйверы. Расположение файлов исходного кода драйверов LIS указано в файле MAINTAINERS в дереве исходного кода ядра Linux:
F: arch/x86/include/asm/mshyperv.h
F: arch/x86/include/uapi/asm/hyperv.h
F: arch/x86/kernel/cpu/mshyperv.c
F: drivers/hid/hid-hyperv.c
F: drivers/hv/
F: drivers/input/serio/hyperv-keyboard.c
F: drivers/net/hyperv/
F: drivers/scsi/storvsc_drv.c
F: drivers/video/fbdev/hyperv_fb.c
F: include/linux/hyperv.h
F: tools/hv/
Ядро должно включать следующие исправления. Этот список не является исчерпывающим для всех дистрибутивов.
- ata_piix: предоставление дисков драйверам Hyper-V по умолчанию;
- storvsc: принятие во внимание передаваемых пакетов в папке RESET;
- storvsc: предотвращение использования WRITE_SAME;
- storvsc: отключение WRITE SAME для драйверов RAID и адаптеров виртуальных узлов;
- storvsc: исправление разыменования пустого указателя;
- storvsc: ошибки кольцевого буфера могут привести к заморозке операций ввода-вывода.
- scsi_sysfs: защита от двойного выполнения __scsi_remove_device.
Агент Linux для Azure
Агент Linux для Azurewaagent
выполняет подготовку виртуальной машины Linux в Azure. Можно получить его последнюю версию, узнать о проблемах с файлами или отправить запрос в репозитории GitHub для агента Linux.
- Агент Linux выпускается по лицензии Apache 2.0. Многие дистрибутивы уже предоставляют пакеты RPM или deb для этого агента, поэтому вы легко сможете установить и обновить такие пакеты.
- Для работы агента Linux для Azure требуется Python v2.6+.
- Для агента также необходим модуль python-pyasn1. В большинстве дистрибутивов он предоставляется в виде отдельно устанавливаемого пакета.
- В некоторых случаях агент Linux для Azure может быть несовместим с NetworkManager. Многие предоставляемые в дистрибутивах пакеты RPM или Deb настраивают NetworkManager, в результате чего возникает конфликт с пакетом waagent. В таких случаях при установке пакета агента Linux удаляется NetworkManager.
- Версия агента Linux для Azure должна быть выше минимальной поддерживаемой версии.
Примечание
Убедитесь, что включены модули udf и vfat . Отключение модуля UDF приведет к сбою подготовки. Отключение модуля VFAT приведет к сбоям подготовки и загрузки. Cloud-init >= 21.2 может подготавливать виртуальные машины без использования определяемой пользователем функции, если: 1) виртуальная машина была создана с использованием открытых ключей SSH, а не пароля и 2) не предоставлены пользовательские данные.
Общие системные требования для Linux
Измените строку загрузки ядра в GRUB или GRUB2 и включите в нее следующие параметры, задающие отправку всех сообщений консоли в первый последовательный порт. Эти сообщения могут использоваться службой поддержки Azure при отладке возникающих проблем.
GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
Кроме того, мы рекомендуем удалить следующие параметры (если они заданы).
rhgb quiet crashkernel=auto
Графическая и "тихая" загрузка бесполезны в облачной среде, в которой требуется, чтобы все журналы отправлялись на последовательный порт. При желании можно настроить параметр
crashkernel
, однако учитывайте, что он сокращает объем доступной памяти в виртуальной машине на 128 МБ или более, что может оказаться проблемой в виртуальных машинах небольшого размера.После внесения изменений в файл /etc/default/grub выполните следующую команду, чтобы повторно создать конфигурацию grub:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Добавьте модули Hyper-V в инструкции initrd и initramfs (Dracut).
Перестроение
initrd
илиinitramfs
.Initramfs
cp /boot/initramfs-$(uname -r).img /boot/initramfs-[latest kernel version ].img.bak dracut -f -v /boot/initramfs-[latest kernel version ].img [depending on the version of grub] grub-mkconfig -o /boot/grub/grub.cfg grub2-mkconfig -o /boot/grub2/grub.cfg
Initrd
mv /boot/[initrd kernel] /boot/[initrd kernel]-old mkinitrd /boot/initrd.img-[initrd kernel]-generic /boot/[initrd kernel]-generic-old update-initramfs -c -k [initrd kernel] update-grub
Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки. Как правило, эта конфигурация используется по умолчанию.
Установите агент Linux для Azure. Агент Linux для Azure необходим для подготовки образа Linux в Azure. Во многих дистрибутивах агент предоставляется в виде пакета RPM или deb (такой пакет обычно называется WALinuxAgent или walinuxagent). Агент также можно установить вручную, как описано в руководстве по агенту Linux.
Примечание
Убедитесь, что включены модули udf и vfat. Блокировка или удаление модуля UDF приведет к сбою подготовки. Создание списка блокировок или удаление модуля vfat приведет к сбоям подготовки и загрузки. (_Cloud-init >= 21.2 удаляет требование определяемой пользователем функции. Дополнительные сведения см. в верхней части документа)
Установите агент Linux для Azure, cloud-init и другие необходимые служебные программы, выполнив следующую команду:
RedHat или CentOS
sudo yum install -y [waagent] cloud-init cloud-utils-growpart gdisk hyperv-daemons
Ubuntu и Debian
sudo apt install walinuxagent cloud-init cloud-utils-growpart gdisk hyperv-daemons
SUSE
sudo zypper install python-azure-agent cloud-init cloud-utils-growpart gdisk hyperv-daemons
Затем включите агент и cloud-init для всех дистрибутивов с помощью:
sudo systemctl enable waagent.service sudo systemctl enable cloud-init.service
Переключение. Не создавайте пространство подкачки на диске ОС.
Агент Linux для Azure или Cloud-init можно использовать для настройки пространства подкачки с помощью локального диска ресурсов. Этот диск ресурсов подключен к виртуальной машине после подготовки в Azure. Локальный диск ресурсов является временным и может быть очищен при отмене подготовки виртуальной машины. В следующих блоках показано, как настроить этот переключение.
Агент Linux для Azure. Измените следующие параметры в файле /etc/waagent.conf
ResourceDisk.Format=y ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=2048 ## NOTE: Set this to your desired size.
Cloud-init Настройте cloud-init для обработки подготовки:
sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-auto/g' /etc/waagent.conf sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
Настройте Cloud-init для создания буфера.
Чтобы отформатировать и создать подкачку, у вас есть 2 варианта:
Передайте его в качестве конфигурации cloud-init каждый раз при создании виртуальной машины с помощью
customdata
. Рекомендуем использовать этот метод.Использовать директиву cloud-init, встроенную в образ, которая будет выполнять эту операцию при каждом создании виртуальной машины.
Создайте файл cfg для настройки подкачки с помощью Cloud-init:
echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF #cloud-config # Generated by Azure cloud image build disk_setup: ephemeral0: table_type: mbr layout: [66, [33, 82]] overwrite: True fs_setup: - device: ephemeral0.1 filesystem: ext4 - device: ephemeral0.2 filesystem: swap mounts: - ["ephemeral0.1", "/mnt"] - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"] EOF
Настройте cloud-init для обработки операций подготовки:
- Настройте waagent для cloud-init:
Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, установитеsed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
Provisioning.Agent=disabled
в конфигурации/etc/waagent.conf
. - Настройте подключения:
echo "Adding mounts and disk_setup to init stage" sed -i '/ - mounts/d' /etc/cloud/cloud.cfg sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
- Настройте источник данных Azure:
echo "Allow only Azure datasource, disable fetching network setting via IMDS" cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOF
- Удалите существующие файл подкачки, если он настроен:
if [[ -f /mnt/resource/swapfile ]]; then echo "Removing swapfile" #RHEL uses a swapfile by defaul swapoff /mnt/resource/swapfile rm /mnt/resource/swapfile -f fi
- Настройте waagent для cloud-init:
Настройте ведение журнала cloud-init:
echo "Add console log file" cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF # This tells cloud-init to redirect its stdout and stderr to # 'tee -a /var/log/cloud-init-output.log' so the user can see output # there without needing to look on the console. output: {all: '| tee -a /var/log/cloud-init-output.log'} EOF
Отзыв.
Внимание!
Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, пропустите отмену подготовки. Выполнение команды waagent -force -deprovision+user приведет к тому, что исходный компьютер станет непригодным для использования. Этот шаг предназначен только для создания обобщенного образа.
Выполните следующие команды, чтобы отозвать виртуальную машину.
# sudo rm -f /var/log/waagent.log # sudo cloud-init clean # waagent -force -deprovision+user # rm -f ~/.bash_history # export HISTSIZE=0 # logout
Примечание
В Virtualbox после выполнения команды
waagent -force -deprovision
может появиться следующая ошибка:[Errno 5] Input/output error
. Это сообщение об ошибке не является важным и может быть пропущено.Завершите работу виртуальной машины и передайте виртуальный жесткий диск в Azure.
Next Steps
Создание виртуальной машины Linux на основе пользовательского диска с помощью Azure CLI.