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

Внимание

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

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

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

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

В этой статье предполагается, что вы уже установили ОС Linux CentOS (или аналогичную производную) на VHD. Существует несколько средств для создания 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-носителя, подключенного к гостевой машине. Агент Linux Azure или cloud-init должен подключить файловую систему UDF для чтения конфигурации и подготовки виртуальной машины.
  • Версии ядра Linux ниже 2.6.37 не поддерживают NUMA в Hyper-V с большими размерами виртуальных машин. Эта проблема в основном влияет на старые дистрибутивы с помощью вышестоящего ядра Centos 2.6.32 и исправлена в Centos 6.6 (ядро-2.6.32-504). Системы, работающие с пользовательскими ядрами старше 2.6.37 или Red Hat Enterprise Linux (RHEL), старше 2.6.32-504, должны задать параметр numa=off загрузки в командной строке ядра в grub.conf. Дополнительные сведения см. в статье базы знаний Red Hat 436883.
  • Не настраивайте раздел подкачки на диске с ОС.
  • Размер виртуальной памяти всех виртуальных жестких дисков в Azure должен быть округлен до 1 МБ. При преобразовании из необработанного диска в VHD необходимо убедиться, что размер необработанного диска составляет 1 МБ перед преобразованием. Дополнительные сведения см . в заметках о установке Linux.

Примечание.

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

CentOS 6.x

Внимание

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

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

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

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

    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:

    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 might 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] репозиторий, который используется для установки агента Linux Azure.

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

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

    sudo yum clean all
    

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

    sudo yum -y update
    

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

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

    Внимание

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

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

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

  12. Установите агент Azure Linux и зависимости. Запустите и включите 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
    

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

    Внимание

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

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

  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
    

    Примечание.

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

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

CentOS 7.0+

Выполните действия, описанные в следующих разделах, если вы используете CentOS 7.0+.

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

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

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

  • 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. Эти правила могут вызвать проблемы при клонировании виртуальной машины в 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 might 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] репозиторий, который используется для установки агента Linux Azure.

  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. Дополнительные сведения см. в верхней части документа.)

  10. Если вы создаете образ из VMware, VirtualBox или KVM, убедитесь, что драйверы Hyper-V включены в initramfs:

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

      add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
      
    2. Выполните сборку initramfs заново:

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

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

    sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
    • Настройка 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
    
  13. Конфигурация переключения:

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

      Ранее агент 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
      
    2. Если вы хотите подключить, отформатировать и создать файл подкачки, можно:

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

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