Поделиться через


Подготовка виртуальной машины на основе Red Hat для Azure

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

Из этой статьи вы узнаете, как подготовить виртуальную машину Red Hat Enterprise Linux (RHEL) для использования в Azure. Версии RHEL, описанные в этой статье, — 6.X, 7.X и 8.X. Гипервизоры для подготовки, описанные в этой статье, представляют собой Hyper-V, виртуальную машину на основе ядра (KVM) и VMware.

Дополнительные сведения о требованиях к требованиям для участия в программе Cloud Access Red Hat см . на веб-сайте Red Hat Cloud Access и запуске RHEL в Azure. Способы автоматизации создания образов RHEL см. в разделе Конструктор образов Azure.

Примечание.

Помните о версиях, которые находятся в конце жизни (EOL) и больше не поддерживаются Red Hat. Загруженные образы, которые находятся в EOL или за пределами EOL, поддерживаются на разумной бизнес-основе. Дополнительные сведения см. в циклах жизненного цикла продукта Red Hat.

Диспетчер Hyper-V

В этом разделе показано, как подготовить виртуальную машину RHEL 6, RHEL 7 или RHEL 8 с помощью диспетчера Hyper-V.

Необходимые компоненты

В этом разделе предполагается, что вы уже получили ISO-файл с веб-сайта Red Hat и установили образ RHEL на виртуальный жесткий диск (VHD). Дополнительные сведения об использовании диспетчера Hyper-V для установки образа операционной системы см. в статье "Установка роли Hyper-V" и настройка виртуальной машины.

Замечания по установке RHEL

  • Azure не поддерживает формат VHDX. поддержка Azure только фиксированный виртуальный жесткий диск. Диспетчер Hyper-V можно использовать для преобразования диска в формат VHD или командлета convert-vhd . Если вы используете VirtualBox, при создании диска выберите фиксированный размер вместо динамически выделяемого (по умолчанию).
  • виртуальные машины поддержка Azure 1-го поколения (загрузка BIOS) и UEFI(UEFI).
  • Максимально допустимый размер виртуального жесткого диска составляет 1023 ГБ.
  • Модуль ядра vfat должен быть включен в ядро.
  • Диспетчер логических томов (LVM) поддерживается и может использоваться на диске ОС или на дисках данных в виртуальных машинах Azure. Как правило, рекомендуется использовать стандартные секции на диске ОС, а не LVM. Это позволит избежать конфликта имен LVM при клонировании виртуальных машин, особенно если нужно подключить диск с OC к другой идентичной виртуальной машине в целях устранения неполадок. Дополнительные сведения см. в документации по LVM и RAID .
  • Требуется поддержка ядра для подключения файловых систем UDF. При первой загрузке в Azure uDF-отформатированный носитель, подключенный к гостевой машине, передает конфигурацию подготовки виртуальной машине Linux. Агент Azure Linux должен иметь возможность подключать файловую систему UDF для считывания конфигурации и подготовки виртуальной машины. Без этого шага подготовка завершается ошибкой.
  • Не настраивайте раздел swap на диске операционной системы. Дополнительные сведения см. в следующих шагах.
  • Размер виртуальной памяти всех виртуальных жестких дисков в Azure должен быть округлен до 1 МБ. При преобразовании из необработанного диска в VHD необходимо убедиться, что размер необработанного диска составляет 1 МБ перед преобразованием. Дополнительные сведения см. в следующих шагах. См. также заметки о установке Linux.

Примечание.

Cloud-init >= 21.2 удаляет требование UDF. Однако без включения модуля UDF компакт-диск не будет подключаться во время подготовки, что предотвращает применение пользовательских данных. Обходным решением является применение пользовательских данных с помощью пользовательских данных. В отличие от пользовательских данных, пользовательские данные не шифруются. Дополнительные сведения см. в разделе "Форматы данных пользователей".

RHEL 6 с использованием диспетчера Hyper-V

Внимание

30 ноября 2020 года RHEL 6 достигла конца этапа обслуживания. За этапом обслуживания следует этап расширенной жизни. При переходе RHEL 6 из этапов полного или обслуживания настоятельно рекомендуется обновить до RHEL 7, 8 или 9. Если необходимо остаться в RHEL 6, рекомендуется добавить надстройку поддержки расширенного жизненного цикла RHEL.

  1. В диспетчере Hyper-V выберите виртуальную машину.

  2. Выберите Подключение, чтобы открыть окно консоли для виртуальной машины.

  3. В RHEL 6 NetworkManager может повлиять на агент Linux Azure. Удалите этот пакет:

    sudo rpm -e --nodeps NetworkManager
    
  4. Создайте или измените файл /etc/sysconfig/network, добавив следующий текст:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Создайте или измените файл /etc/sysconfig/network-scripts/ifcfg-eth0, добавив следующий текст:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Переместите (или удалите) правила udev, чтобы не создавать статические правила для интерфейса Ethernet. Эти правила вызывают проблемы при клонировании виртуальной машины в Azure или Hyper-V:

    Предупреждение

    Для многих виртуальных машин версии 5 и более новых размеров виртуальных машин требуется ускорение сети. Если он не включен, NetworkManager назначит один и тот же IP-адрес всем виртуальным интерфейсам функций. Чтобы предотвратить дублирование IP-адресов, обязательно включите это правило udev при миграции на новый размер.

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    

    Примечание.

    При использовании ускоренной сети искусственный интерфейс, созданный, необходимо настроить неуправляемый с помощью правила udev. Это действие предотвращает NetworkManager назначение того же IP-адреса ему, что и основной интерфейс.

    Чтобы применить его, выполните указанные действия.

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparentlybonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  7. Убедитесь, что сетевая служба начинается во время загрузки:

    sudo chkconfig network on
    
  8. Зарегистрируйте подписку Red Hat, чтобы включить установку пакетов из репозитория RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  9. Пакет WALinuxAgent WALinuxAgent-<version> был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  10. Измените загрузочную строку ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте /boot/grub/menu.lst текстовый редактор. Убедитесь, что ядро по умолчанию включает следующие параметры:

    console=ttyS0 earlyprintk=ttyS0
    

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

    Мы также рекомендуем удалить следующие параметры:

    rhgb quiet crashkernel=auto
    

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

  11. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки (что обычно задано по умолчанию). Измените файл /etc/ssh/sshd_config , добавив в него следующую строку:

    ClientAliveInterval 180
    
  12. Установите агент Azure Linux:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    

    Установка пакета WALinuxAgent удаляет NetworkManager и NetworkManager-gnome пакеты, если они еще не удалены на шаге 3.

  13. Не создавайте пространство подкачки на диске ОС.

    Агент Linux Azure может автоматически настроить пространство подкачки с помощью локального диска ресурсов, подключенного к виртуальной машине после подготовки виртуальной машины в 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 whatever you need it to be.
    
  14. Отмена регистрации подписки (при необходимости):

    sudo subscription-manager unregister
    
  15. Отмените подготовку виртуальной машины и подготовьте ее к подготовке в Azure:

    Примечание.

    Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, пропустите этап отмены подготовки.

        sudo waagent -force -deprovision
        sudo export HISTSIZE=0
    
  16. В диспетчере Hyper-V выберите Действие>Завершение работы. Виртуальный жесткий диск Linux готов к передаче в Azure.

RHEL 7 с использованием диспетчера Hyper-V

  1. В диспетчере Hyper-V выберите виртуальную машину.

  2. Выберите Подключение, чтобы открыть окно консоли для виртуальной машины.

  3. Создайте или измените файл /etc/sysconfig/network, добавив следующий текст:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. Создайте или измените файл /etc/sysconfig/network-scripts/ifcfg-eth0, добавив следующий текст:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    

    Примечание.

    При использовании ускоренной сети искусственный интерфейс, созданный, необходимо настроить неуправляемый с помощью правила udev. Это действие предотвращает NetworkManager назначение того же IP-адреса ему, что и основной интерфейс.

    Чтобы применить его, выполните указанные действия.

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparentlybonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  5. Убедитесь, что сетевая служба начинается во время загрузки:

    sudo systemctl enable network
    
  6. Зарегистрируйте подписку Red Hat, чтобы включить установку пакетов из репозитория RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. Измените загрузочную строку ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте /etc/default/grub текстовый редактор и измените GRUB_CMDLINE_LINUX параметр. Рассмотрим пример.

    GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0 net.ifnames=0"
    GRUB_TERMINAL_OUTPUT="serial console"
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    ENABLE_BLSCFG=true
    

    Примечание.

    Если ENABLE_BLSCFG=false присутствует /etc/default/grub вместо ENABLE_BLSCFG=trueэтого, такие средства, как grubedit или gubby, которые зависят от спецификации загрузчика (BLS) для управления загрузочными записями и конфигурациями, могут работать неправильно в RHEL 8 и 9. Если ENABLE_BLSCFG он отсутствует, по умолчанию используется falseповедение.

    Это изменение также гарантирует, что все сообщения консоли отправляются на первый последовательный порт и обеспечивают взаимодействие с последовательной консолью, что может помочь поддержка Azure с проблемами отладки. Эта конфигурация также отключает новые соглашения об именовании RHEL 7 для сетевых карт (сетевых карт).

    rhgb quiet crashkernel=auto
    

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

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

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    Примечание.

    Если вы отправляете виртуальную машину с поддержкой UEFI, выполните команду для обновления grub grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg.

  9. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки (что обычно задано по умолчанию). Измените файл /etc/ssh/sshd_config , добавив в него следующую строку:

    ClientAliveInterval 180
    
  10. Пакет WALinuxAgent WALinuxAgent-<version> был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  11. Установите агент cloud-initAzure Linux и другие необходимые служебные программы:

    sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  12. Настройте cloud-init для обработки подготовки:

    1. Настройка waagent для cloud-init:

      sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=auto/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 .

    2. Настройте подключения:

      sudo 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
      
    3. Настройте источник данных Azure:

      sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS"
      sudo 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 default
      swapoff /mnt/resource/swapfile
      rm /mnt/resource/swapfile -f
      fi
      
    5. Настройка cloud-init ведения журнала:

      sudo echo "Add console log file"
      sudo 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
      
      
  13. Конфигурация переключения:

    • Не создавайте пространство подкачки на диске ОС.

      Ранее агент Linux Azure использовался для автоматической настройки пространства буфера с помощью локального диска ресурсов, подключенного к виртуальной машине после подготовки виртуальной машины в Azure. Теперь это действие обрабатывается cloud-init. Не следует использовать агент Linux для форматирования диска ресурсов для создания файла буфера. Измените следующие параметры соответствующим /etc/waagent.conf образом:

      ResourceDisk.Format=n
      ResourceDisk.EnableSwap=n
      
    • Если вы хотите подключить, отформатировать и создать буфер, можно:

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

      • Используйте директиву, созданную cloud-init на образе, который выполняет этот шаг при каждом создании виртуальной машины.

        sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
        sudo 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/resource"]
          - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
        EOF
        
  14. Чтобы отменить регистрацию подписки, выполните следующую команду:

    sudo subscription-manager unregister
    
  15. Отмените подготовку виртуальной машины и подготовьте ее к подготовке в Azure:

    Внимание

    Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, пропустите этап отмены подготовки. При выполнении команды 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
    
  16. В диспетчере Hyper-V выберите Действие>Завершение работы. Виртуальный жесткий диск Linux готов к передаче в Azure.

RHEL 8+ с помощью диспетчера Hyper-V

  1. В диспетчере Hyper-V выберите виртуальную машину.

  2. Выберите Подключение, чтобы открыть окно консоли для виртуальной машины.

  3. Убедитесь, что служба Network Manager начинается во время загрузки:

    sudo systemctl enable NetworkManager.service
    
  4. Настройте сетевой интерфейс для автоматического запуска при загрузке и использования протокола конфигурации динамического узла:

    sudo nmcli con mod eth0 connection.autoconnect yes ipv4.method auto
    

    Примечание.

    При использовании ускоренной сети искусственный интерфейс, созданный, необходимо настроить неуправляемый с помощью правила udev. Это действие предотвращает NetworkManager назначение того же IP-адреса ему, что и основной интерфейс.

    Чтобы применить его, выполните указанные действия.

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparentlybonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  5. Зарегистрируйте подписку Red Hat, чтобы включить установку пакетов из репозитория RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  6. Измените строку загрузки ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure и включить последовательную консоль.

  7. Удалите текущие параметры GRUB:

    sudo grub2-editenv - unset kernelopts
    
  8. Измените /etc/default/grub текст в текстовом редакторе и добавьте следующие параметры:

    GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 earlyprintk=ttyS0 net.ifnames=0"
    GRUB_TERMINAL_OUTPUT="serial console"
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    

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

  9. Рекомендуется также удалить следующие параметры:

    rhgb quiet crashkernel=auto
    

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

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

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    Для виртуальной машины с поддержкой UEFI выполните следующую команду:

    sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    
  11. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки (что обычно задано по умолчанию). Измените файл /etc/ssh/sshd_config , добавив в него следующую строку:

    ClientAliveInterval 180
    
  12. Установите агент cloud-initAzure Linux и другие необходимые служебные программы:

    sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  13. Настройте cloud-init для обработки подготовки:

    1. Настройка 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 .

    2. Настройте подключения:

      sudo 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
      
    3. Настройте источник данных Azure:

      sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS"
      sudo 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
      
    5. Настройка cloud-init ведения журнала:

      sudo echo "Add console log file"
      sudo 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
      
  14. Конфигурация переключения:

    • Не создавайте пространство подкачки на диске ОС.

      Ранее агент Linux Azure использовался для автоматической настройки пространства буфера с помощью локального диска ресурсов, подключенного к виртуальной машине после подготовки виртуальной машины в Azure. Теперь это действие обрабатывается cloud-init. Не следует использовать агент Linux для форматирования диска ресурсов, создав файл буфера. Измените следующие параметры соответствующим /etc/waagent.conf образом:

      ResourceDisk.Format=n
      ResourceDisk.EnableSwap=n
      
      • Передайте этот код в качестве конфигурации каждый раз, когда вы создаете виртуальную cloud-init машину с помощью пользовательских данных. Мы рекомендуем этот метод.

      • Используйте директиву, созданную cloud-init на образе, который выполняет этот шаг при каждом создании виртуальной машины.

        sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
        sudo 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/resource"]
          - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"]
        EOF
        
  15. Чтобы отменить регистрацию подписки, выполните следующую команду:

    sudo subscription-manager unregister
    
  16. Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в Azure:

    sudo cloud-init clean
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo sudo rm -f /var/log/waagent.log
    sudo export HISTSIZE=0
    

    Внимание

    Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, пропустите этап отмены подготовки. При выполнении команды waagent -force -deprovision+user исходный компьютер не используется. Этот шаг предназначен только для создания обобщенного образа.

  17. В диспетчере Hyper-V выберите Действие>Завершение работы. Виртуальный жесткий диск Linux готов к передаче в Azure.

KVM

В этом разделе показано, как использовать KVM для подготовки дистрибутива RHEL 6 или RHEL 7 к передаче в Azure.

RHEL 6 с использованием KVM

Внимание

30 ноября 2020 года RHEL 6 достигла конца этапа обслуживания. За этапом обслуживания следует этап расширенной жизни. При переходе RHEL 6 из этапов полного или обслуживания настоятельно рекомендуется обновить до RHEL 7, 8 или 9. Если необходимо остаться в RHEL 6, рекомендуется добавить надстройку поддержки расширенного жизненного цикла RHEL.

  1. Скачайте образ KVM RHEL 6 с веб-сайта Red Hat.

  2. Задайте пароль пользователя root.

    Создайте зашифрованный пароль и скопируйте результат выполнения команды:

    sudo openssl passwd -1 changeme
    

    Установите корневой пароль с помощью Guestfish:

    sudo guestfish --rw -a <image-name>
    > <fs> run
    > <fs> list-filesystems
    > <fs> mount /dev/sda1 /
    > <fs> vi /etc/shadow
    > <fs> exit
    

    Измените второе поле корневого пользователя на !! зашифрованный пароль.

  3. Создайте виртуальную машину в KVM из образа qcow2. Укажите тип диска qcow2 и задайте для модели устройства интерфейса виртуальной сети значение virtio. Затем запустите виртуальную машину и войдите в качестве корневого каталога.

  4. Создайте или измените файл /etc/sysconfig/network, добавив следующий текст:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Создайте или измените файл /etc/sysconfig/network-scripts/ifcfg-eth0, добавив следующий текст:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Переместите (или удалите) правила udev, чтобы не создавать статические правила для интерфейса Ethernet. Эти правила вызывают проблемы при клонировании виртуальной машины в Azure или Hyper-V:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    

    Примечание.

    При использовании ускоренной сети искусственный интерфейс, созданный, необходимо настроить неуправляемый с помощью правила udev. Это действие предотвращает NetworkManager назначение того же IP-адреса ему, что и основной интерфейс.

    Чтобы применить его, выполните указанные действия.

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparently bonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  7. Убедитесь, что сетевая служба начинается во время загрузки:

    sudo chkconfig network on
    
  8. Зарегистрируйте подписку Red Hat, чтобы включить установку пакетов из репозитория RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  9. Измените загрузочную строку ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте /boot/grub/menu.lst текстовый редактор. Убедитесь, что ядро по умолчанию включает следующие параметры:

    console=ttyS0 earlyprintk=ttyS0
    

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

    Мы также рекомендуем удалить следующие параметры:

    rhgb quiet crashkernel=auto
    

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

  10. Добавьте модули Hyper-V в initramfs.

    Измените файл /etc/dracut.conf, добавив следующее содержимое:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Повторно создайте initramfs:

    sudo dracut -f -v
    
  11. Удаление cloud-init:

    sudo yum remove cloud-init
    
  12. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки:

    sudo chkconfig sshd on
    

    Измените, /etc/ssh/sshd_config чтобы включить следующие строки:

    PasswordAuthentication yes
    ClientAliveInterval 180
    
  13. Пакет WALinuxAgent WALinuxAgent-<version> был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  14. Установите агент Azure Linux:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    
  15. Агент Linux Azure может автоматически настроить пространство подкачки с помощью локального диска ресурсов, подключенного к виртуальной машине после подготовки виртуальной машины в 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 whatever you need it to be.
    
  16. Отмена регистрации подписки (при необходимости):

    sudo subscription-manager unregister
    
  17. Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее к подготовке в Azure.

    Примечание.

    Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, пропустите этап отмены подготовки.

    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  18. Завершите работу виртуальной машины в KVM.

  19. Конвертируйте образ qcow2 в формат VHD.

    Примечание.

    Существует известная ошибка в версиях >qemu-img =2.2.1, что приводит к неправильно отформатированным VHD. Эта проблема устранена в QEMU версии 2.6. Рекомендуется использовать qemu-img 2.2.0 или более поздней версии или обновить до версии 2.6 или выше. Дополнительные сведения см. на этом веб-сайте.

    Для начала конвертируйте образ в формат RAW:

    sudo qemu-img convert -f qcow2 -O raw rhel-6.9.qcow2 rhel-6.9.raw
    

    Убедитесь, что размер образа в формате RAW соответствует 1 МБ. Если это не так, округлите размер до 1 МБ:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-6.9.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-6.9.raw $rounded_size
    

    Преобразуйте необработанный диск в виртуальный жесткий диск фиксированного размера:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd
    

    Иначе с помощью qemu версии 2.6 или выше добавьте параметр force_size:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-6.9.raw rhel-6.9.vhd
    

RHEL 7 с использованием KVM

  1. Скачайте образ KVM RHEL 7 с веб-сайта Red Hat. В этой процедуре в качестве примера используется RHEL 7.

  2. Задайте пароль пользователя root.

    Создайте зашифрованный пароль и скопируйте результат выполнения команды:

    sudo openssl passwd -1 changeme
    

    Установите корневой пароль с помощью Guestfish:

    sudo  guestfish --rw -a <image-name>
    > <fs> run
    > <fs> list-filesystems
    > <fs> mount /dev/sda1 /
    > <fs> vi /etc/shadow
    > <fs> exit
    

    Измените второе поле корневого пользователя на !! зашифрованный пароль.

  3. Создайте виртуальную машину в KVM из образа qcow2. Укажите тип диска qcow2 и задайте для модели устройства интерфейса виртуальной сети значение virtio. Затем запустите виртуальную машину и войдите в качестве корневого каталога.

  4. Создайте или измените файл /etc/sysconfig/network, добавив следующий текст:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Создайте или измените файл /etc/sysconfig/network-scripts/ifcfg-eth0, добавив следующий текст:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    

    Примечание.

    При использовании ускоренной сети искусственный интерфейс, созданный, необходимо настроить неуправляемый с помощью правила udev. Это действие предотвращает NetworkManager назначение того же IP-адреса ему, что и основной интерфейс.

    Чтобы применить его, выполните указанные действия.

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparentlybonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  6. Убедитесь, что сетевая служба начинается во время загрузки:

    sudo systemctl enable network
    
  7. Зарегистрируйте подписку Red Hat, чтобы включить установку пакетов из репозитория RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  8. Измените загрузочную строку ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте /etc/default/grub текстовый редактор и измените GRUB_CMDLINE_LINUX параметр. Например:

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

    Эта команда также гарантирует отправку всех сообщений консоли на первый последовательный порт, что может помочь технической поддержке Azure в плане отладки. Также будут отключены новые соглашения об именовании RHEL 7 для сетевых карт. Мы также рекомендуем удалить следующие параметры:

    rhgb quiet crashkernel=auto
    

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

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

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  10. Добавьте модули Hyper-V в initramfs.

    Измените файл /etc/dracut.conf , добавив в него следующее содержимое:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Повторно создайте initramfs:

    sudo dracut -f -v
    
  11. Удаление cloud-init:

    sudo yum remove cloud-init
    
  12. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки:

    sudo systemctl enable sshd
    

    Измените, /etc/ssh/sshd_config чтобы включить следующие строки:

    PasswordAuthentication yes
    ClientAliveInterval 180
    
  13. Пакет WALinuxAgent WALinuxAgent-<version> был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  14. Установите агент Azure Linux:

    sudo yum install WALinuxAgent
    

    waagent Включите службу:

    sudo systemctl enable waagent.service
    
  15. Установите cloud-init.

    Выполните действия, описанные в разделе "Подготовка виртуальной машины RHEL 7 из диспетчера Hyper-V", шаг 12 "Установка cloud-init для обработки подготовки".

  16. Конфигурация переключения:

    • Не создавайте пространство подкачки на диске ОС.
    • Выполните действия, описанные в разделе "Подготовка виртуальной машины RHEL 7 из диспетчера Hyper-V", шаг 13 "Переключение конфигурации".
  17. Отмена регистрации подписки (при необходимости):

    sudo subscription-manager unregister
    
  18. Отмена подготовки виртуальной машины RHEL 7 из диспетчера Hyper-V, шаг 15 "Отмена подготовки виртуальной машины RHEL 7".

  19. Завершите работу виртуальной машины в KVM.

  20. Конвертируйте образ qcow2 в формат VHD.

    Примечание.

    Существует известная ошибка в версиях >qemu-img =1.1.1, что приводит к неправильно отформатированным VHD. Проблема устранена в QEMU 1.6. Рекомендуется использовать qemu-img 1.1.0 или более поздней версии или обновить до версии 1.6 или выше. Дополнительные сведения см. на этом веб-сайте.

    Для начала конвертируйте образ в формат RAW:

    sudo qemu-img convert -f qcow2 -O raw rhel-7.4.qcow2 rhel-7.4.raw
    

    Убедитесь, что размер образа в формате RAW соответствует 1 МБ. Если это не так, округлите размер до 1 МБ:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-7.4.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-7.4.raw $rounded_size
    

    Преобразуйте необработанный диск в виртуальный жесткий диск фиксированного размера:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
    

    Или, используя qemu версии 1.6+, включите force_size этот параметр:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.4.raw rhel-7.4.vhd
    

VMware

В этом разделе показано, как подготовить дистрибутив RHEL 6 или RHEL 7 из VMware.

Необходимые компоненты

В этом разделе предполагается, что вы уже установили виртуальную машину RHEL в VMware. Сведения о том, как установить операционную систему в VMware, см. в руководстве по установке гостевой операционной системы VMware.

  • При установке операционной системы Linux мы рекомендуем использовать стандартные разделы, а не LVM (который зачастую используется по умолчанию при установке). Использование секций позволяет избежать конфликтов имен LVM с клонируемой виртуальной машиной, особенно если диск операционной системы когда-либо необходимо подключить к другой виртуальной машине для устранения неполадок. Если требуется, можно использовать LVM или RAID на дисках данных.
  • Не настраивайте раздел swap на диске операционной системы. Вы можете настроить агент Linux для создания файла подкачки на временном диске с ресурсами. Дополнительные сведения см. в следующих шагах.
  • При создании виртуального жесткого диска выберите "Сохранить виртуальный диск" в виде одного файла.

RHEL 6 с использованием VMware

Внимание

30 ноября 2020 года RHEL 6 достигла конца этапа обслуживания. За этапом обслуживания следует этап расширенной жизни. При переходе RHEL 6 из этапов полного или обслуживания настоятельно рекомендуется обновить до RHEL 7 или 8 или 9. Если необходимо остаться в RHEL 6, рекомендуется добавить надстройку поддержки расширенного жизненного цикла RHEL.

  1. В RHEL 6 NetworkManager может повлиять на агент Linux Azure. Удалите этот пакет:

    sudo rpm -e --nodeps NetworkManager
    
  2. Создайте файл с именем network в каталоге /etc/sysconfig/. Файл должен содержать следующий текст:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  3. Создайте или измените файл /etc/sysconfig/network-scripts/ifcfg-eth0, добавив следующий текст:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  4. Переместите (или удалите) правила udev, чтобы не создавать статические правила для интерфейса Ethernet. Эти правила вызывают проблемы при клонировании виртуальной машины в Azure или Hyper-V:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    

    Примечание.

    При использовании ускоренной сети искусственный интерфейс, созданный, необходимо настроить неуправляемый с помощью правила udev. Это действие предотвращает NetworkManager назначение того же IP-адреса ему, что и основной интерфейс.

    Чтобы применить его, выполните указанные действия.

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparently bonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  5. Убедитесь, что сетевая служба начинается во время загрузки:

    sudo chkconfig network on
    
  6. Зарегистрируйте подписку Red Hat, чтобы включить установку пакетов из репозитория RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. Пакет WALinuxAgent WALinuxAgent-<version> был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  8. Измените загрузочную строку ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте /etc/default/grub текстовый редактор и измените GRUB_CMDLINE_LINUX параметр. Например:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0"
    

    Этот шаг также гарантирует, что все сообщения консоли отправляются в первый последовательный порт, который может помочь поддержка Azure с проблемами отладки. Мы также рекомендуем удалить следующие параметры:

    rhgb quiet crashkernel=auto
    

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

  9. Добавьте модули Hyper-V в initramfs.

    Измените файл /etc/dracut.conf, добавив следующее содержимое:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Повторно создайте initramfs:

    sudo dracut -f -v
    
  10. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки (что обычно задано по умолчанию). Измените файл /etc/ssh/sshd_config , добавив в него следующую строку:

    ClientAliveInterval 180
    
  11. Установите агент Azure Linux:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    
  12. Не создавайте место на диске операционной системы.

    Агент Linux Azure может автоматически настроить пространство подкачки с помощью локального диска ресурсов, подключенного к виртуальной машине после подготовки виртуальной машины в 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 whatever you need it to be.
    
  13. Отмена регистрации подписки (при необходимости):

    sudo subscription-manager unregister
    
  14. Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в Azure:

    Примечание.

    Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, пропустите этап отмены подготовки.

    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  15. Завершите работу виртуальной машины и конвертируйте файл VMDK в формат VHD.

    Примечание.

    Существует известная ошибка в версиях >qemu-img =2.2.1, что приводит к неправильно отформатированным VHD. Эта проблема устранена в QEMU версии 2.6. Рекомендуется использовать qemu-img 2.2.0 или более поздней версии или обновить до версии 2.6 или выше. Дополнительные сведения см. на этом веб-сайте.

    Для начала конвертируйте образ в формат RAW:

    sudo qemu-img convert -f vmdk -O raw rhel-6.9.vmdk rhel-6.9.raw
    

    Убедитесь, что размер образа в формате RAW соответствует 1 МБ. Если это не так, округлите размер до 1 МБ:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-6.9.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-6.9.raw $rounded_size
    

    Преобразуйте необработанный диск в виртуальный жесткий диск фиксированного размера:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd
    

    Иначе с помощью qemu версии 2.6 или выше добавьте параметр force_size:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-6.9.raw rhel-6.9.vhd
    

RHEL 7 с использованием VMware

  1. Создайте или измените файл /etc/sysconfig/network, добавив следующий текст:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  2. Создайте или измените файл /etc/sysconfig/network-scripts/ifcfg-eth0, добавив следующий текст:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    

    Примечание.

    При использовании ускоренной сети искусственный интерфейс, созданный, необходимо настроить неуправляемый с помощью правила udev. Это действие предотвращает NetworkManager назначение того же IP-адреса ему, что и основной интерфейс.

    Чтобы применить его, выполните указанные действия.

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparentlybonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  3. Убедитесь, что сетевая служба начинается во время загрузки:

    sudo systemctl enable network
    
  4. Зарегистрируйте подписку Red Hat, чтобы включить установку пакетов из репозитория RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  5. Измените загрузочную строку ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте /etc/default/grub текстовый редактор и измените GRUB_CMDLINE_LINUX параметр. Например:

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

    Это также гарантирует отправку всех сообщений консоли на первый последовательный порт, что может помочь технической поддержке Azure в плане отладки. Также будут отключены новые соглашения об именовании RHEL 7 для сетевых карт. В дополнение к вышесказанному мы рекомендуем удалить следующие параметры:

    rhgb quiet crashkernel=auto
    

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

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

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  7. Добавьте модули Hyper-V в initramfs.

    Измените файл /etc/dracut.conf, добавив в него следующее содержимое:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Повторно создайте initramfs:

    sudo dracut -f -v
    
  8. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки. Обычно этот параметр задан по умолчанию. Измените файл /etc/ssh/sshd_config , добавив в него следующую строку:

    ClientAliveInterval 180
    
  9. Пакет WALinuxAgent WALinuxAgent-<version> был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  10. Установите агент Azure Linux:

    sudo yum install WALinuxAgent
    sudo systemctl enable waagent.service
    
  11. Установите cloud-init:

    Выполните действия, описанные в разделе "Подготовка виртуальной машины RHEL 7 из диспетчера Hyper-V", шаг 12 "Установка cloud-init для обработки подготовки".

  12. Конфигурация переключения:

    • Не создавайте пространство подкачки на диске ОС.
    • Выполните действия, описанные в разделе "Подготовка виртуальной машины RHEL 7 из диспетчера Hyper-V", шаг 13 "Переключение конфигурации".
  13. Чтобы отменить регистрацию подписки, выполните следующую команду:

    sudo subscription-manager unregister
    
  14. Отмена подготовки виртуальной машины RHEL 7 из диспетчера Hyper-V, шаг 15 "Отмена подготовки виртуальной машины RHEL 7".

  15. Завершите работу виртуальной машины и преобразуйте файл VMDK в формат VHD.

    Примечание.

    Существует известная ошибка в версиях >qemu-img =2.2.1, что приводит к неправильно отформатированным VHD. Эта проблема устранена в QEMU версии 2.6. Рекомендуется использовать qemu-img 2.2.0 или более поздней версии или обновить до версии 2.6 или выше. Дополнительные сведения см. на этом веб-сайте.

    Для начала конвертируйте образ в формат RAW:

    sudo qemu-img convert -f vmdk -O raw rhel-7.4.vmdk rhel-7.4.raw
    

    Убедитесь, что размер образа в формате RAW соответствует 1 МБ. Если это не так, округлите размер до 1 МБ:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-7.4.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-7.4.raw $rounded_size
    

    Преобразуйте необработанный диск в виртуальный жесткий диск фиксированного размера:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
    

    Иначе с помощью qemu версии 2.6 или выше добавьте параметр force_size:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.4.raw rhel-7.4.vhd
    

Файл kickstart

В этом разделе показано, как подготовить дистрибутив RHEL 7 из ISO с помощью файла запуска.

RHEL 7 из файла kickstart

  1. Создайте файл kickstart, содержащий следующее содержимое и сохраните файл. Дополнительные сведения о установке kickstart см. в руководстве по установке Kickstart.

    # Kickstart for provisioning a RHEL 7 Azure VM
    
    # System authorization information
      auth --enableshadow --passalgo=sha512
    
    # Use graphical install
    text
    
    # Don't run the Setup Agent on first boot
    firstboot --disable
    
    # Keyboard layouts
    keyboard --vckeymap=us --xlayouts='us'
    
    # System language
    lang en_US.UTF-8
    
    # Network information
    network  --bootproto=dhcp
    
    # Root password
    rootpw --plaintext "to_be_disabled"
    
    # System services
    services --enabled="sshd,waagent,NetworkManager"
    
    # System timezone
    timezone Etc/UTC --isUtc --ntpservers 0.rhel.pool.ntp.org,1.rhel.pool.ntp.org,2.rhel.pool.ntp.org,3.rhel.pool.ntp.org
    
    # Partition clearing information
    clearpart --all --initlabel
    
    # Clear the MBR
    zerombr
    
    # Disk partitioning information
    part /boot --fstype="xfs" --size=500
    part / --fstyp="xfs" --size=1 --grow --asprimary
    
    # System bootloader configuration
    bootloader --location=mbr
    
    # Firewall configuration
    firewall --disabled
    
    # Enable SELinux
    selinux --enforcing
    
    # Don't configure X
    skipx
    
    # Power down the machine after install
    poweroff
    
    %packages
    @base
    @console-internet
    chrony
    sudo
    parted
    -dracut-config-rescue
    
    %end
    
    %post --log=/var/log/anaconda/post-install.log
    
    #!/bin/bash
    
    # Register Red Hat Subscription
    subscription-manager register --username=XXX --password=XXX --auto-attach --force
    
    # Install latest repo update
    yum update -y
    
    # Enable extras repo
    subscription-manager repos --enable=rhel-7-server-extras-rpms
    
    # Install WALinuxAgent
    yum install -y WALinuxAgent
    
    # Unregister Red Hat subscription
    subscription-manager unregister
    
    # Enable waaagent at boot-up
    systemctl enable waagent
    
    # Install cloud-init
    yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
    # Configure waagent for 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
    
    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
    
    # Disable the root account
    usermod root -p '!!'
    
    # Configure swap using 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.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"]
    EOF
    
    # Set the cmdline
    sed -i 's/^\(GRUB_CMDLINE_LINUX\)=".*"$/\1="console=tty1 console=ttyS0 earlyprintk=ttyS0"/g' /etc/default/grub
    
    # Enable SSH keepalive
    sed -i 's/^#\(ClientAliveInterval\).*$/\1 180/g' /etc/ssh/sshd_config
    
    # Build the grub cfg
    grub2-mkconfig -o /boot/grub2/grub.cfg
    
    # Configure network
    cat << EOF > /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    EOF
    
    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparentlybonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
    # Deprovision and prepare for Azure if you are creating a generalized image
    sudo cloud-init clean --logs --seed
    sudo rm -rf /var/lib/cloud/
    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    
    sudo waagent -force -deprovision+user
    rm -f ~/.bash_history
    export HISTSIZE=0
    
    %end
    
  2. Поместите файл kickstart в место, доступное для системы установки.

  3. В диспетчере Hyper-V создайте новую виртуальную машину. На странице "Подключение виртуального жесткого диска" выберите "Подключить виртуальный жесткий диск" позже и завершите работу мастера создания виртуальной машины.

  4. Откройте параметры виртуальной машины:

    1. Подключите новый виртуальный жесткий диск к виртуальной машине. Выберите параметры VHD Format (Формат VHD) и Фиксированный размер.

    2. Подключите установочный ISO-образ к DVD-дисководу.

    3. В BIOS выберите загрузку с компакт-диска.

  5. Запустите виртуальную машину. Когда появится руководство по установке, выберите клавишу TAB , чтобы настроить параметры загрузки.

  6. Введите inst.ks=<the location of the kickstart file> в конце параметров загрузки и нажмите клавишу ВВОД .

  7. Дождитесь завершения процесса установки. По завершении виртуальная машина завершает работу автоматически. Виртуальный жесткий диск Linux готов к передаче в Azure.

Известные проблемы

Известна следующая проблема.

Не удалось включить драйвер Hyper-V в начальный электронный диск при использовании низкоуровневой оболочки Hyper V

В некоторых случаях установщики Linux могут не включать драйверы для Hyper-V в начальный электронный диск (initrd или initramfs), если только не обнаружат, что он работает в среде Hyper-V.

При использовании другой системы виртуализации (например, VirtualBox или Xen) для подготовки образа Linux может потребоваться перестроить инициализацию, чтобы обеспечить доступность по крайней мере hv_vmbus hv_storvsc модулей ядра на начальном диске ОЗУ. Эта проблема известна, по крайней мере, в системах, основанных на вышестоящем дистрибутиве Red Hat.

Чтобы устранить эту проблему, необходимо добавить модули Hyper-V в initramfs и выполнить повторную сборку:

Измените файл /etc/dracut.conf, добавив следующее содержимое:

add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "

Повторно создайте initramfs:

sudo dracut -f -v

Дополнительные сведения см. в разделе "Перестроение инициамфов".

  • Теперь вы готовы использовать виртуальный жесткий диск RHEL для создания новых виртуальных машин в Azure. Если вы отправляете VHD-файл в Azure впервые, см. раздел Вариант 1. Передача VHD.
  • Дополнительные сведения о гипервизорах, сертифицированных для запуска RHEL, см. на веб-сайте Red Hat.
  • Чтобы узнать больше об использовании образов RHEL BYOS, готовых к работе, перейдите на страницу документации для создания собственной подписки.