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

Внимание

Эта статья ссылается на CentOS, дистрибутив Linux, который приближается к состоянию конца жизни (EOL). Обратите внимание на использование и план соответствующим образом. Дополнительные сведения см. в руководстве centOS End Of Life.

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

Узнайте, как создать и передать виртуальный жесткий диск (VHD-файл) Azure, содержащий операционную систему Linux на основе CentOS

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

В этой статье предполагается, что вы уже установили операционную систему CentOS (или аналогичную производную) Linux на виртуальный жесткий диск. Существует несколько средств для создания VHD-файлов, например решение для виртуализации, такое как Hyper-V. Инструкции см. в разделе Установка роли Hyper-V и настройка виртуальной машины.

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

  • Дополнительные советы по подготовке Linux для Azure см. в общих заметках о установке Linux.
  • Формат VHDX не поддерживается в Azure, только фиксированный виртуальный жесткий диск. Можно преобразовать диск в формат VHD с помощью диспетчера Hyper-V или командлета convert-vhd. Если вы используете VirtualBox, это означает выбор фиксированного размера в отличие от динамического выделения по умолчанию при создании диска.
  • Модуль ядра vfat должен быть включен в ядре
  • При установке системы Linux рекомендуется использовать стандартные секции, а не LVM (часто по умолчанию для многих установок). Это позволяет избежать конфликтов имен LVM с клонированных виртуальных машин, особенно если диск ОС когда-либо должен быть подключен к другой идентичной виртуальной машине для устранения неполадок. Для дисков данных можно использовать LVM или RAID.
  • Требуется поддержка ядра для монтирования файловых систем UDF. При первой загрузке в Azure конфигурация подготовки передается в виртуальную машину Linux через UDF-носитель, подключенный к гостевой машине. Агент Azure Linux или cloud-init должен подключить файловую систему UDF для чтения конфигурации и подготовки виртуальной машины.
  • Версии ядра Linux ниже 2.6.37 не поддерживают NUMA в Hyper-V с большими размерами виртуальных машин. Эта проблема в первую очередь влияет на старые дистрибутивы с помощью ядра вышестоящий Centos 2.6.32 и исправлена в Centos 6.6 (ядро-2.6.32-504). Системы, работающие с пользовательскими ядрами старше 2.6.37 или на основе RHEL, старше 2.6.32-504, должны задать параметр numa=off загрузки в командной строке ядра в grub.conf. Дополнительные сведения см. в статье базы знаний Red Hat 436883.
  • Не настраивайте раздел подкачки на диске с ОС.
  • Размер виртуальной памяти всех виртуальных жестких дисков в Azure должен быть округлен до 1 МБ. Перед конвертацией диска RAW в формат VHD убедитесь, что размер диска RAW в несколько раз превышает 1 МБ. См. дополнительные сведения в примечаниях по установке Linux.

Примечание.

Cloud-init >= 21.2 удаляет требование udf. Однако без включения модуля udf cdrom не будет подключаться во время подготовки, предотвращая применение пользовательских данных. Решением для этого является применение пользовательских данных с помощью пользовательских данных. Однако, в отличие от пользовательских данных, пользовательские данные не шифруются. https://cloudinit.readthedocs.io/en/latest/topics/format.html

CentOS 6.x

Внимание

Обратите внимание, что CentOS 6 достигла своего конца жизни (EOL) и больше не поддерживается сообществом CentOS. Это означает, что для этой версии не будет выпущено никаких дополнительных обновлений или исправлений для системы безопасности, что приведет к уязвимости к потенциальным рискам безопасности. Настоятельно рекомендуем выполнить обновление до более последней версии CentOS, чтобы обеспечить безопасность и стабильность системы. Обратитесь к ИТ-отделу или системного администратора, чтобы получить дополнительную помощь.

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

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

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

    sudo chkconfig network on
    
  8. Если вы хотите использовать зеркала OpenLogic, размещенные в центрах обработки данных Azure, замените файл /etc/yum.repos.d/CentOS-Base.repo следующими репозиториями. Это также добавит репозиторий [openlogic] , который включает дополнительные пакеты, такие как агент Azure Linux:

    [openlogic]
    name=CentOS-$releasever - openlogic packages for $basearch
    baseurl=http://olcentgbl.trafficmanager.net/openlogic/$releasever/openlogic/$basearch/
    enabled=1
    gpgcheck=0
    
    [base]
    name=CentOS-$releasever - Base
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/os/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    
    #released updates
    [updates]
    name=CentOS-$releasever - Updates
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/updates/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    
    #additional packages that may be useful
    [extras]
    name=CentOS-$releasever - Extras
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/extras/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    
    #additional packages that extend functionality of existing packages
    [centosplus]
    name=CentOS-$releasever - Plus
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    
    #contrib - packages by Centos Users
    [contrib]
    name=CentOS-$releasever - Contrib
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/contrib/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    

    Примечание.

    В остальной части этого руководства предполагается, что вы используете по крайней мере [openlogic] репозиторий, который будет использоваться для установки агента Azure Linux ниже.

  9. Добавьте следующую строку в файл /etc/yum.conf:

    http_caching=packages
    
  10. Выполните следующую команду, чтобы очистить текущие метаданные yum и установить в системе последние обновления:

    sudo yum clean all
    

    Если вы не создаете образ для более старой версии CentOS, рекомендуется обновить все пакеты до последней версии:

    sudo yum -y update
    

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

  11. (Необязательно) Установите драйверы для служб интеграции Linux.

    Внимание

    Этот шаг является обязательным для CentOS 6.3 и более ранних версий и необязательным для более поздних.

    sudo rpm -e hypervkvpd  ## (may return error if not installed, that's OK)
    sudo yum install microsoft-hyper-v
    

    Или же следуйте инструкциям по установке на странице скачивания служб интеграции Linux, чтобы установить RPM в образе.

  12. Установите агент Linux для Azure и зависимости. Запустите и включите службу waagent:

    sudo yum install python-pyasn1 WALinuxAgent
    sudo service waagent start
    sudo chkconfig waagent on
    

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

  13. Измените строку загрузки ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте файл /boot/grub/menu.lst в текстовом редакторе и укажите для ядра по умолчанию следующие параметры:

    console=ttyS0 earlyprintk=ttyS0 rootdelay=300
    

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

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

    rhgb quiet crashkernel=auto
    

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

    Внимание

    Для CentOS 6.5 и более ранних версий необходимо также указать параметр ядра numa=off. См. посвященный Red Hat раздел 436883.

  14. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки. Обычно это сделано по умолчанию.

  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. Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в Azure:

    sudo waagent -force -deprovision+user
    sudo export HISTSIZE=0
    

Примечание.

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

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

CentOS 7.0+

Изменения в CentOS 7 (и аналогичных производных версиях)

Подготовка виртуальной машины CentOS 7 для Azure аналогична CentOS 6, однако стоит отметить несколько существенных различий:

  • Пакет NetworkManager больше не конфликтует с агентом Azure Linux. Этот пакет устанавливается по умолчанию и рекомендуется не удалять его.

  • В качестве загрузчика по умолчанию теперь используется GRUB2, поэтому изменилась процедура правки параметров ядра (см. ниже).

  • XFS теперь является файловой системой по умолчанию. При желании можно продолжать использование файловой системы ext4.

  • Так как CentOS 8 Stream и более поздней версии больше не включаются network.service по умолчанию, необходимо установить его вручную:

    sudo yum install network-scripts
    sudo systemctl enable network.service
    

Этапы настройки

  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
    NM_CONTROLLED=no
    
  5. Переместите или удалите правила udev, чтобы не создавать статические правила для интерфейса Ethernet. Эти правила приводят к появлению проблем при клонировании виртуальной машины в Microsoft Azure или Hyper-V:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    
  6. Если вы хотите использовать зеркала OpenLogic, размещенные в центрах обработки данных Azure, замените файл /etc/yum.repos.d/CentOS-Base.repo следующими репозиториями. При этом также будет добавлен репозиторий [openlogic] , включающий пакеты для агента Linux для Azure:

    [openlogic]
    name=CentOS-$releasever - openlogic packages for $basearch
    baseurl=http://olcentgbl.trafficmanager.net/openlogic/$releasever/openlogic/$basearch/
    enabled=1
    gpgcheck=0
    
    [base]
    name=CentOS-$releasever - Base
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/os/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    
    #released updates
    [updates]
    name=CentOS-$releasever - Updates
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/updates/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    
    #additional packages that may be useful
    [extras]
    name=CentOS-$releasever - Extras
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/extras/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    
    #additional packages that extend functionality of existing packages
    [centosplus]
    name=CentOS-$releasever - Plus
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
    baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    

    Примечание.

    В остальной части этого руководства предполагается, что вы используете по крайней мере [openlogic] репозиторий, который будет использоваться для установки агента Azure Linux ниже.

  7. Выполните следующую команду, чтобы очистить текущие метаданные yum и установить все обновления:

    sudo yum clean all
    

    Если вы не создаете образ для более старой версии CentOS, рекомендуется обновить все пакеты до последней версии:

    sudo yum -y update
    

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

  8. Измените строку загрузки ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте файл /etc/default/grub в текстовом редакторе и измените параметр GRUB_CMDLINE_LINUX, например:

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

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

    rhgb quiet crashkernel=auto
    

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

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

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

Примечание.

При отправке виртуальной машины с поддержкой UEFI команда для обновления GRUB имеет значение grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg. Кроме того, модуль ядра vfat должен быть включен в ядре в противном случае подготовка завершится ошибкой.

Убедитесь, что модуль udf включен. Удаление и отключение их приведет к сбою подготовки или загрузки. (_Cloud-init >= 21.2 удаляет требование udf. Дополнительные сведения см. в верхней части документа.)

  1. Создавая образ из VMWare, VirtualBox или KVM, убедитесь что драйверы Hyper-V включены в initramfs.

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

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Выполните сборку initramfs заново:

    sudo dracut -f -v
    
  2. Установите агент Linux для Azure и зависимости для расширений виртуальной машины Azure:

    sudo yum install python-pyasn1 WALinuxAgent
    sudo systemctl enable waagent
    
  3. Установите cloud-init для обработки операций подготовки:

    sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
    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
    
    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
    
    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
    
    if [[ -f /mnt/swapfile ]]; then
    echo Removing swapfile - RHEL uses a swapfile by default
    swapoff /mnt/swapfile
    rm /mnt/swapfile -f
    fi
    
    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
    
  4. Настройка подкачки

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

    Ранее агент Linux Azure использовался для автоматической настройки пространства буфера с помощью локального диска ресурсов, подключенного к виртуальной машине после подготовки виртуальной машины в Azure. Но теперь эту операцию выполняет cloud-init — вам не нужно использовать агент Linux для форматирования диска ресурсов. Создайте файл подкачки и соответствующим образом измените следующие параметры в файле /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, встроенную в образ, которая будет выполнять эту операцию при каждом создании виртуальной машины:

      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"]
        - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
      EOF
      
  5. Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в Azure:

    Примечание.

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

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

Следующие шаги

Теперь виртуальный жесткий диск CentOS Linux можно использовать для создания новых виртуальных машин Azure. Если вы отправляете VHD-файл в Azure впервые, см. раздел Вариант 1. Передача VHD.