Сведения о поддерживаемых и нерекомендованных дистрибутивах сообщества

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

Соглашение об уровне обслуживания для платформы Azure применяется для виртуальных машин с ОС Linux, только если используется один из рекомендованных дистрибутивов. Для рекомендованных дистрибутивов предоставляются предварительно настроенные образы Linux, представленные в коллекции в Azure Marketplace.

К любым дистрибутивам (не Azure Marketplace), выполняющимся в Azure, предъявляются определенные требования. Поскольку каждый дистрибутив имеет свои особенности, привести исчерпывающую информацию в рамках одной статьи невозможно. Даже при соблюдении всех приведенных ниже условий для надлежащей работы может потребоваться масштабная настройка системы Linux.

В этой статье приводятся общие рекомендации по работе с дистрибутивом Linux в Azure.

Общие замечания по установке Linux

  1. Azure не поддерживает формат виртуального жесткого диска Hyper-V (VHDX) и может работать только с фиксированными виртуальными жесткими дисками. Можно преобразовать диск в формат VHD с помощью диспетчера Hyper-V или командлета Convert-VHD. Если вы используете VirtualBox, при создании диска нужно выбрать фиксированный размер вместо динамически выделяемого, который используется по умолчанию.

  2. Azure поддерживает виртуальные машины 1-го поколения (загрузка в BIOS) и 2-го поколения (загрузка в UEFI).

  3. Модуль ядра vfat должен быть включен в ядре.

  4. Максимально допустимый размер виртуального жесткого диска составляет 1023 ГБ.

  5. При установке системы Linux рекомендуется использовать стандартные разделы, а не диспетчер логических томов (LVM), который часто используется по умолчанию при установке. Это позволит избежать конфликта имен LVM c клонированными виртуальными машинами, особенно если диск с OC может быть подключен к другой идентичной виртуальной машине в целях устранения неполадок. Для дисков данных можно использовать LVM или RAID.

  6. Требуется поддержка ядра для монтирования файловых систем UDF. При первой загрузке в Azure конфигурация подготовки передается в виртуальную машину Linux через UDF-носитель, подключенный к гостевой машине. Агент Azure Linux должен подключить файловую систему UDF для считывания конфигурации и подготовки виртуальной машины.

  7. Версии ядра 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.

  8. Не настраивайте раздел подкачки на диске с ОС. Можно настроить агент Linux для создания файла подкачки на временном диске ресурсов, как описывается на следующих шагах.

  9. Размер виртуальной памяти всех виртуальных жестких дисков в Azure должен быть округлен до 1 МБ (1024 × 1024 байт). Перед конвертацией диска RAW в формат VHD убедитесь, что размер диска RAW в несколько раз превышает 1 МБ, как описывается на следующих шагах.

  10. Используйте самую актуальную версию дистрибутива, пакеты и программное обеспечение.

  11. Удалите пользователей и системные учетные записи, открытые ключи, конфиденциальные данные, ненужное программное обеспечение и приложение.

Примечание

(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:

  1. Создайте резервную копию существующего образа initrd:

    cd /boot
    sudo cp initrd-`uname -r`.img  initrd-`uname -r`.img.bak
    
  2. Выполните повторную сборку 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 или более позднюю.

  1. Изменение размера VHD с непосредственным использованием таких инструментов, как qemu-img или vbox-manage, может привести к сбою загрузки VHD. Мы советуем сначала преобразовать VHD в образ необработанного диска. Если образ виртуальной машины был создан в качестве образа необработанного диска (по умолчанию для некоторых гипервизоров, например, KVM), вы можете пропустить этот шаг.

    qemu-img convert -f vpc -O raw MyLinuxVM.vhd MyLinuxVM.raw
    
  2. Рассчитайте необходимый размер образа диска, чтобы округлить размер виртуальной памяти до 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"
    
  3. Измените размер необработанного диска с помощью $rounded_size, как показано выше.

    qemu-img resize MyLinuxVM.raw $rounded_size
    
  4. А теперь преобразуйте необработанный диск обратно в 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/

Ядро должно включать следующие исправления. Этот список не является исчерпывающим для всех дистрибутивов.

Агент 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

  1. Измените строку загрузки ядра в GRUB или GRUB2 и включите в нее следующие параметры, задающие отправку всех сообщений консоли в первый последовательный порт. Эти сообщения могут использоваться службой поддержки Azure при отладке возникающих проблем.

    GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    Кроме того, мы рекомендуем удалить следующие параметры (если они заданы).

    rhgb quiet crashkernel=auto
    

    Графическая и "тихая" загрузка бесполезны в облачной среде, в которой требуется, чтобы все журналы отправлялись на последовательный порт. При желании можно настроить параметр crashkernel, однако учитывайте, что он сокращает объем доступной памяти в виртуальной машине на 128 МБ или более, что может оказаться проблемой в виртуальных машинах небольшого размера.

  2. После внесения изменений в файл /etc/default/grub выполните следующую команду, чтобы повторно создать конфигурацию grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  3. Добавьте модули Hyper-V в инструкции initrd и initramfs (Dracut).

  4. Перестроение 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 
    
  5. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки. Как правило, эта конфигурация используется по умолчанию.

  6. Установите агент 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
    
  7. Переключение. Не создавайте пространство подкачки на диске ОС.

    Агент 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 варианта:

    1. Передайте его в качестве конфигурации cloud-init каждый раз при создании виртуальной машины с помощью customdata. Рекомендуем использовать этот метод.

    2. Использовать директиву 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
    
  8. Настройте cloud-init для обработки операций подготовки:

    1. Настройте 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.
    2. Настройте подключения:
      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
      
    3. Настройте источник данных 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
      
    4. Удалите существующие файл подкачки, если он настроен:
      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
      
  9. Настройте ведение журнала 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
    
  10. Отзыв.

    Внимание!

    Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, пропустите отмену подготовки. Выполнение команды 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. Это сообщение об ошибке не является важным и может быть пропущено.

  11. Завершите работу виртуальной машины и передайте виртуальный жесткий диск в Azure.

Next Steps

Создание виртуальной машины Linux на основе пользовательского диска с помощью Azure CLI.