Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы
Соглашение об уровне обслуживания платформы Azure применяется к виртуальным машинам под управлением операционной системы Linux только при использовании одного из утвержденных дистрибутивов. Для утвержденных дистрибутивов Azure Marketplace предоставляет предварительно настроенные образы Linux. Дополнительные сведения см. в разделе:
- Утвержденные дистрибутивы Linux в Azure
- Поддержка Linux и технологий с открытым исходным кодом в Azure
Все остальные дистрибутивы, работающие в Azure, включая поддерживаемые сообществом и не поддерживаемые дистрибутивы, имеют некоторые предварительные требования.
В этой статье приводятся общие рекомендации по работе с дистрибутивом Linux в Azure. Эта статья не может быть комплексной, так как каждое распределение отличается. Даже если вы соответствуете всем критериям, которые описаны в этой статье, может потребоваться значительно настроить систему Linux для правильной работы.
Общие заметки о установке Linux
Azure не поддерживает формат виртуального жесткого диска Hyper-V (VHDX). Azure поддерживает только VHD фиксированного размера. Диск можно преобразовать в формат VHD с помощью диспетчера Hyper-V или командлета Convert-VHD . Если вы используете VirtualBox, выберите фиксированный размер , а не значение по умолчанию (динамическое выделение) при создании диска.
Azure поддерживает виртуальные машины 1-го поколения (загрузка BIOS) и 2-го поколения (загрузка UEFI).
Модуль ядра таблицы распределения виртуальных файлов (VFAT) должен быть включен в ядре.
Максимально допустимый размер VHD составляет 1023 ГБ.
При установке системы Linux мы рекомендуем использовать стандартные разделы, а не Logical Volume Manager (LVM). LVM используется по умолчанию для многих установок.
Использование стандартных разделов позволит избежать конфликтов имён LVM между клонированными виртуальными машинами, особенно если диск ОС когда-либо будет подключён к другой идентичной виртуальной машине для устранения неполадок. На дисках данных можно использовать 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 (ядро-2.6.32-504).
Системы под управлением пользовательских ядер старше 2.6.37 или ядра на основе RHEL старше 2.6.32-504, должны задать параметр
numa=offзагрузки в командной строке ядра в grub.conf. Дополнительные сведения см. в статье 436883 в базе знаний Red Hat.Не настраивайте раздел подкачки на диске с ОС. Агент Linux можно настроить для создания файла буфера на диске временного ресурса, как описано далее в этой статье.
Все виртуальные жесткие диски в Azure должны иметь виртуальный размер, равный 1 МБ (1024 x 1024 байт). При преобразовании необработанного диска в формат VHD убедитесь, что размер необработанного диска кратен 1 МБ перед преобразованием, как описано далее в этой статье.
Используйте самую актуальную версию дистрибутива, пакеты и программное обеспечение.
Удалите пользователей и системные учетные записи, открытые ключи, конфиденциальные данные, ненужное программное обеспечение и приложения.
Примечание.
Cloud-init версии 21.2 или более поздней удаляет требование UDF. Но если модуль udf не включён, CD-ROM не будет монтироваться в процессе подготовки, из-за чего пользовательские данные не будут применены. Обходной путь — применение пользовательских данных. Однако, в отличие от пользовательских данных, пользовательские данные не шифруются. Дополнительные сведения см. в разделе Форматы пользовательских данных документации cloud-init.
Установка модулей ядра без Hyper-V
Так как Azure запускается на гипервизоре Hyper-V, Linux требует определенные модули ядра для запуска в Azure. Если у вас есть виртуальная машина, созданная за пределами Hyper-V, установщики Linux могут не включать драйверы для Hyper-V на начальном диске ОЗУ (initrd или initramfs), если только виртуальная машина не обнаруживает, что она работает в среде Hyper-V.
Если вы используете другую систему виртуализации (например, VirtualBox или KVM) для подготовки образа Linux, может потребоваться пересобрать initrd, чтобы по крайней мере модули ядра hv_vmbus и hv_storvsc были доступны в исходном образе RAM-диска. Это известная проблема встречается по крайней мере в системах на основе предшествующего дистрибутива 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 МБ. Как правило, виртуальные жесткие диски, созданные с помощью Hyper-V, выровнены правильно. Если виртуальный жесткий диск не выровнен правильно, может появиться сообщение об ошибке, аналогичное следующему примеру при попытке создать образ из виртуального жесткого диска:
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 есть известная ошибка в QEMU версии 2.2.1 и некоторых более поздних версиях, которая приводит к созданию некорректно сформированного VHD-файла. Проблема устранена в QEMU 2.6. Рекомендуется использовать версию 2.2.0 или более раннюю версию или версию 2.6 или более позднюю.
Непосредственное изменение размера VHD с помощью таких средств, как
qemu-imgилиvbox-manage, может привести к тому, что VHD станет незагружаемым. Рекомендуется сначала преобразовать VHD в необработанный образ диска с помощью следующего кода.Если образ виртуальной машины был создан как образ необработанного диска, этот шаг можно пропустить. Создание образа виртуальной машины в качестве образа необработанного диска является значением по умолчанию в некоторых гипервизорах, таких как KVM.
sudo 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:sudo qemu-img resize MyLinuxVM.raw $rounded_sizeПреобразуйте необработанный диск обратно в виртуальный жесткий диск фиксированного размера:
sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc MyLinuxVM.raw MyLinuxVM.vhdИли в версиях QEMU до 2.6 удалите параметр
force_size:sudo 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), эти драйверы уже доступны, или же в ядре предоставляются их более ранние версии.
Драйверы LIS постоянно обновляются в вышестоящем ядре с новыми исправлениями и функциями. По возможности рекомендуется запустить одобренное распространение , включающее эти исправления и обновления.
Если вы используете вариант RHEL версии 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
Агент Azure Linux (waagent) подготавливает виртуальную машину Linux в Azure. Вы можете получить последнюю версию, сообщить о проблемах или отправить pull request'ы в репозитории Linux Agent на GitHub.
Ниже приведены некоторые рекомендации по использованию агента Linux Azure.
- Агент Linux выпускается по лицензии Apache 2.0. Многие дистрибутивы уже предоставляют пакеты rpm или .deb для агента. Эти пакеты можно легко установить и обновить.
- Для работы агента Linux для Azure требуется Python v2.6+.
- Агенту также требуется модуль
python-pyasn1. В большинстве дистрибутивов он предоставляется в виде отдельно устанавливаемого пакета. - В некоторых случаях агент Linux Azure может быть несовместим с NetworkManager. Многие пакеты (.rpm или .deb), поставляемые дистрибутивами, указывают конфликт NetworkManager с пакетом
waagent. В этих случаях агент удаляет NetworkManager при установке пакета агента Linux. - Версия агента Linux для Azure должна быть выше минимальной поддерживаемой версии.
Примечание.
Убедитесь, что модули udf и vfat включены. Отключение модуля udf приведёт к сбою подготовки к работе. Отключение vfat модуля приведет к сбоям подготовки и загрузки. Cloud-init версии 21.2 или более поздней может подготавливать виртуальные машины без необходимости использовать UDF, если существуют оба этих условия:
- Вы создали виртуальную машину с помощью открытых ключей SSH, а не паролей.
- Вы не предоставили пользовательские данные.
Общие требования к системе 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 для initramfs с помощью
dracut:cd /boot sudo cp initramfs-<kernel-version>.img <kernel-version>.img.bak sudo dracut -f -v initramfs-<kernel-version>.img <kernel-version> --add-drivers "hv_vmbus hv_netvsc hv_storvsc" sudo grub-mkconfig -o /boot/grub/grub.cfg sudo grub2-mkconfig -o /boot/grub2/grub.cfgДобавьте модуль Hyper-V для инициализации с помощью
mkinitramfs:cd /boot sudo cp initrd.img-<kernel-version> initrd.img-<kernel-version>.bak sudo mkinitramfs -o initrd.img-<kernel-version> <kernel-version> --with=hv_vmbus,hv_netvsc,hv_storvsc sudo update-grubУбедитесь, что SSH-сервер установлен и настроен для включения во время загрузки. Как правило, эта конфигурация используется по умолчанию.
Установите агент Linux для Azure.
Агент Linux для Azure необходим для подготовки образа Linux в Azure. Многие дистрибутивы поставляют агент в виде пакета .rpm или .deb. Пакет обычно называется
WALinuxAgentилиwalinuxagent. Вы также можете установить агент вручную, выполнив действия, описанные в руководстве по агенту Linux Azure.Примечание.
Убедитесь, что модули
udfиvfatвключены. Их удаление или отключение приведет к сбою при подготовке или загрузке. Cloud-init версии 21.2 или более поздней удаляет требование UDF.Установите агент Azure Linux, cloud-init и другие необходимые служебные программы, выполнив одну из следующих команд.
Используйте эту команду для Red Hat или CentOS:
sudo yum install -y WALinuxAgent 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. Локальный диск ресурсов — временный диск, и его содержимое может быть удалено при деинициализации виртуальной машины. В следующих блоках показано, как настроить этот обмен.
Если вы выбрали агент Azure Linux, измените следующие параметры в файле /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 для выполнения первоначальной настройки:
sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/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Чтобы настроить cloud-init для форматирования и создания пространства подкачки, у вас есть два варианта:
- Передавайте конфигурацию cloud-init каждый раз при создании виртуальной машины через
customdata. Мы рекомендуем этот метод. - Используйте директиву cloud-init в образе для настройки пространства подкачки при каждом создании виртуальной машины.
Создайте CFG-файл для настройки пространства буфера с помощью cloud-init:
echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' | sudo tee -a /etc/systemd/system.conf cat << EOF | sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg #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/resource"] - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"] EOF- Передавайте конфигурацию cloud-init каждый раз при создании виртуальной машины через
Настройте cloud-init для обработки операций подготовки:
Настройте
waagentдля cloud-init:sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/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Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, задайте
Provisioning.Agent=disabledв конфигурации /etc/waagent.conf .Настройте точки монтирования:
echo "Adding mounts and disk_setup to init stage" sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg sudo 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 << EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOFУдалите существующий файл буфера, если вы настроили его:
if [[ -f /mnt/resource/swapfile ]]; then echo "Removing swapfile" #RHEL uses a swap file by default swapoff /mnt/resource/swapfile rm /mnt/resource/swapfile -f fiНастройте ведение журнала cloud-init:
echo "Add console log file" cat << EOF | sudo tee -a /etc/cloud/cloud.cfg.d/05_logging.cfg # 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 sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history sudo export HISTSIZE=0В VirtualBox после запуска
waagent -force -deprovisionможет появиться сообщение об ошибке:[Errno 5] Input/output error. Это сообщение об ошибке не является критическим, и его можно игнорировать.Завершите работу виртуальной машины и передайте виртуальный жесткий диск в Azure.
Следующие шаги
Создание виртуальной машины Linux с пользовательского диска с помощью Azure CLI