Подготовка виртуальной машины на основе CentOS для Azure
Внимание
Эта статья ссылается на CentOS, дистрибутив Linux, который приближается к состоянию окончания срока действия (EOL). Думайте об использовании и планировании соответствующим образом. Дополнительные сведения см. в руководстве по окончании жизни CentOS.
Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы
Узнайте, как создать и отправить виртуальный жесткий диск Azure (VHD), содержащий операционную систему Linux на основе CentOS. Дополнительные сведения см. в разделе:
- Подготовка виртуальной машины CentOS 6.x для Azure
- Подготовка виртуальной машины CentOS 7.0+ для Azure
Необходимые компоненты
В этой статье предполагается, что вы уже установили ОС 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, чтобы обеспечить безопасность и стабильность системы. Для получения дополнительной помощи обратитесь к ИТ-отделу или системным администраторам.
В диспетчере Hyper-V выберите виртуальную машину.
Выберите Подключение, чтобы открыть окно консоли для виртуальной машины.
В CentOS 6
NetworkManager
может повлиять на агент Azure Linux. Удалите этот пакет:sudo rpm -e --nodeps NetworkManager
Создайте или измените файл
/etc/sysconfig/network
, добавив следующий текст:NETWORKING=yes HOSTNAME=localhost.localdomain
Создайте или измените файл
/etc/sysconfig/network-scripts/ifcfg-eth0
, добавив следующий текст:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no
Измените правила 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
Убедитесь, что сетевая служба начинается во время загрузки:
sudo chkconfig network on
Если вы хотите использовать зеркала 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.Добавьте следующую строку после
/etc/yum.conf
:http_caching=packages
Снимите текущие метаданные yum и обновите систему с помощью последних пакетов:
sudo yum clean all
Если вы не создаете образ для более старой версии CentOS, рекомендуется обновить все пакеты до последней версии:
sudo yum -y update
После выполнения этой команды может потребоваться перезагрузка.
Необязательно. Установите драйверы для служб 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 в образе.
Установите агент Azure Linux и зависимости. Запустите и включите
waagent
службу:sudo yum install python-pyasn1 WALinuxAgent sudo service waagent start sudo chkconfig waagent on
Пакет WALinuxAgent удаляет
NetworkManager
иNetworkManager-gnome
пакеты, если они еще не удалены, как описано на шаге 3.Измените загрузочную строку ядра в конфигурации 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.Убедитесь, что сервер Secure Shell установлен и настроен для запуска во время загрузки. Обычно этот параметр задан по умолчанию.
Не создавайте пространство подкачки на диске с ОС.
Агент 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.
Отмените подготовку виртуальной машины и подготовьте ее к подготовке в Azure:
sudo waagent -force -deprovision+user sudo export HISTSIZE=0
Примечание.
Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, пропустите этап отмены подготовки.
В диспетчере 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
Шаги настройки
В диспетчере Hyper-V выберите виртуальную машину.
Выберите Подключение, чтобы открыть окно консоли для виртуальной машины.
Создайте или измените файл
/etc/sysconfig/network
, добавив следующий текст:NETWORKING=yes HOSTNAME=localhost.localdomain
Создайте или измените файл
/etc/sysconfig/network-scripts/ifcfg-eth0
, добавив следующий текст:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no NM_CONTROLLED=no
Измените правила udev, чтобы избежать создания статических правил для интерфейсов Ethernet. Эти правила могут вызвать проблемы при клонировании виртуальной машины в Azure или Hyper-V:
sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
Если вы хотите использовать
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.Снимите текущие метаданные yum и установите все обновления:
sudo yum clean all
Если вы не создаете образ для более старой версии CentOS, рекомендуется обновить все пакеты до последней версии:
sudo yum -y update
После выполнения этой команды может потребоваться перезагрузка.
Измените загрузочную строку ядра в конфигурации 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 МБ или более, что может быть проблемой для небольших размеров виртуальных машин.После завершения редактирования
/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. Дополнительные сведения см. в верхней части документа.)
Если вы создаете образ из VMware, VirtualBox или KVM, убедитесь, что драйверы Hyper-V включены в initramfs:
Измените файл
/etc/dracut.conf
, добавив в него следующее содержимое:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Выполните сборку initramfs заново:
sudo dracut -f -v
Установите агент Azure Linux и зависимости для расширений виртуальных машин Azure:
sudo yum install python-pyasn1 WALinuxAgent sudo systemctl enable waagent
Установите
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
- Настройка
Конфигурация переключения:
Не создавайте пространство подкачки на диске с ОС.
Ранее агент 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
Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее к подготовке в 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
В диспетчере Hyper-V выберите Действие>Завершение работы. Виртуальный жесткий диск Linux готов к передаче в Azure.
Связанный контент
Теперь вы готовы использовать виртуальный жесткий диск CentOS Linux для создания новых виртуальных машин в Azure. Если вы отправляете VHD-файл в Azure впервые, см. раздел Вариант 1. Передача VHD.