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

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

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

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

Предварительные условия

Примечание.

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

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

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

Примечание.

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

  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 tee <<EOF /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules > /dev/null
    # 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 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_TIMEOUT=10
    GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0 net.ifnames=0 nvme_core.io_timeout=240"
    GRUB_TERMINAL="serial console"
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    

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

    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-<version>WALinuxAgent доступен из репозитория Extras.

    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 tee /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 tee <<EOF /etc/cloud/cloud.cfg.d/05_logging.cfg > /dev/null
      
      # 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 tee /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. Настройте cloud-init телеметрию для помощи в устранении неполадок с настройкой:

    sudo tee -a /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg <<EOF
    # This config enables cloud-init to report provisioning telemetry to aid with troubleshooting
    Reporting:
      logging:
        type: log
      telemetry:
        type: hyperv
    EOF
    
  15. Чтобы отменить регистрацию подписки, выполните следующую команду:

    
    sudo subscription-manager unregister
    
  16. Депровизируйте виртуальную машину и подготовьте ее к провизии в Azure.

    Внимание

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

    sudo rm -f /var/log/waagent.log
    sudo cloud-init clean --logs --seed
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  17. В диспетчере Hyper-V выберите Действие>Завершение работы. Ваш виртуальный жесткий диск Linux готов к загрузке в Azure.