Preparación de una máquina virtual basada en CentOS para Azure
Precaución
En este artículo se hace referencia a CentOS, una distribución de Linux que está casi al final del ciclo de vida (EOL). Tenga en cuenta su uso y planifique en consecuencia. Para obtener más información, consulte la guía de fin de vida de CentOS.
Se aplica a: ✔️ máquinas virtuales Linux ✔️ conjuntos de escalado flexibles
Aprenda a crear y cargar un disco duro virtual (VHD) de Azure que contenga un sistema operativo Linux (SO) basado en CentOS. Para más información, vea:
- Preparar una máquina virtual (VM) CentOS 6.x para Azure
- Preparar una máquina virtual CentOS 7.0+ para Azure
Requisitos previos
En este artículo se da por supuesto que ya ha instalado un sistema operativo Linux CentOS (o derivado similar) en un disco duro virtual. Existen varias herramientas para crear archivos .vhd. Un ejemplo es una solución de virtualización como Hyper-V. Para obtener instrucciones, consulte Instalación del rol Hyper-V y configuración de una máquina virtual.
Notas de instalación de CentOS
- Para obtener más sugerencias sobre cómo preparar Linux para Azure, consulte Notas generales de instalación de Linux.
- El formato VHDX no se admite en Azure, solo el VHD fijo. Puede convertir el disco al formato VHD mediante el Administrador de Hyper-V o el cmdlet
convert-vhd
. Si usa VirtualBox, seleccione Tamaño fijo en lugar del valor predeterminado asignado dinámicamente al crear el disco. - El módulo de kernel vfat debe estar habilitado en el kernel.
- Al instalar el sistema Linux, se recomienda usar particiones estándar en lugar de Administrador de volúmenes lógicos (LVM), que suele ser el valor predeterminado para muchas instalaciones. El uso de particiones evita conflictos de nombres LVM con máquinas virtuales clonadas, especialmente si un disco del sistema operativo alguna vez debe estar conectado a otra máquina virtual idéntica para solucionar problemas. LVM o RAID también se pueden usar en discos de datos.
- Se necesita soporte de kernel para montar sistemas de archivos de funciones definidas por el usuario (UDF). En el primer arranque de Azure, la configuración de aprovisionamiento se pasa a la máquina virtual Linux mediante medios con formato UDF adjuntos al invitado. El agente de Linux de Azure o
cloud-init
debe montar el sistema de archivos UDF para leer su configuración y aprovisionar la máquina virtual. - Las versiones de kernel de Linux inferiores a la versión 2.6.37 no admiten NUMA en Hyper-V con tamaños de VM más grandes. Este problema afecta principalmente a las distribuciones anteriores que usan el kernel de Centos 2.6.32 ascendente y se corrigió en Centos 6.6 (kernel-2.6.32-504). Los sistemas que ejecutan kernels personalizados anteriores a 2.6.37 o los kernels basados en Red Hat Enterprise Linux (RHEL) anteriores a 2.6.32-504 deben establecer el parámetro de arranque
numa=off
en la línea de comandos del kernel en grub.conf. Para más información, consulte Red Hat KB 436883. - No configure una partición de intercambio en el disco del SO.
- En Azure, todos los discos duros virtuales deben tener un tamaño virtual alineado con 1 MB. Al convertir de un disco sin formato a VHD, debe asegurarse de que el tamaño del disco sin procesar sea un múltiplo de 1 MB antes de la conversión. Para obtener más información, consulte notas de instalación de Linux.
Nota:
Cloud-init >= 21.2 quita el requisito de UDF. Pero sin el módulo UDF habilitado, el CD-ROM no se montará durante el aprovisionamiento, lo que impide que se apliquen datos personalizados. Una solución alternativa para esta situación es aplicar datos personalizados mediante datos de usuario. A diferencia de los datos personalizados, los datos de usuario no se cifran. Para obtener más información, consulte Formatos de datos de usuario.
CentOS 6.x
Importante
CentOS 6 ha alcanzado su EOL y ya no es compatible con la comunidad de CentOS. No se publicarán más actualizaciones ni revisiones de seguridad para esta versión, lo que deja vulnerable a posibles riesgos de seguridad. Se recomienda encarecidamente actualizar a una versión más reciente de CentOS para garantizar la seguridad y la estabilidad del sistema. Para obtener más ayuda, consulte con el departamento de TI o el administrador del sistema.
En el Administrador de Hyper-V, seleccione la máquina virtual.
Seleccione Conectar para abrir una ventana de consola de la máquina virtual.
En CentOS 6,
NetworkManager
pueden interferir con el agente de Linux de Azure. Desinstale este paquete:sudo rpm -e --nodeps NetworkManager
Cree o edite el archivo
/etc/sysconfig/network
y agregue el siguiente texto:NETWORKING=yes HOSTNAME=localhost.localdomain
Cree o edite el archivo
/etc/sysconfig/network-scripts/ifcfg-eth0
y agregue el siguiente texto:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no
Modifique las reglas udev para evitar generar reglas estáticas para las interfaces Ethernet. Estas reglas pueden causar problemas al clonar una máquina virtual en Azure o 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
Asegúrese de que el servicio de red se inicia en tiempo de arranque:
sudo chkconfig network on
Si desea usar los reflejos de OpenLogic hospedados en los centros de datos de Azure, reemplace el archivo
/etc/yum.repos.d/CentOS-Base.repo
por los repositorios siguientes. Esta acción también agrega el repositorio [openlogic] que incluye paquetes adicionales, como el agente de Linux de 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-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
Nota:
En el resto de este artículo se supone que usa al menos el repositorio de
[openlogic]
, que se usa para instalar el agente de Linux de Azure.Agregue la línea siguiente a
/etc/yum.conf
:http_caching=packages
Borre los metadatos de yum actuales y actualice el sistema con los paquetes más recientes:
sudo yum clean all
A menos que cree una imagen para una versión anterior de CentOS, se recomienda actualizar todos los paquetes a la versión más reciente:
sudo yum -y update
Es posible que se requiera un reinicio después de ejecutar este comando.
Opcional: instale los controladores para Linux Integration Services (LIS).
Importante
El paso es necesario para CentOS 6.3 y versiones anteriores y es opcional para versiones posteriores.
sudo rpm -e hypervkvpd ## (might return an error if not installed, that's OK) sudo yum install microsoft-hyper-v
Como alternativa, puede seguir las instrucciones de instalación manual de la página de descarga de LIS para instalar el RPM en la máquina virtual.
Instale el agente y las dependencias de Linux de Azure. Inicie y habilite el servicio
waagent
:sudo yum install python-pyasn1 WALinuxAgent sudo service waagent start sudo chkconfig waagent on
El paquete WALinuxAgent quita los paquetes de
NetworkManager
yNetworkManager-gnome
si aún no se han quitado, como se describe en el paso 3.Modifique la línea de arranque del kernel en la configuración de grub para incluir otros parámetros de kernel para Azure. Para realizar este paso, abra
/boot/grub/menu.lst
en un editor de texto y asegúrese de que el kernel predeterminado incluye los parámetros siguientes:console=ttyS0 earlyprintk=ttyS0 rootdelay=300
Esta modificación también garantiza que todos los mensajes de consola se envíen al primer puerto serie, lo que puede ayudar a la compatibilidad de Azure con problemas de depuración.
También se recomienda quitar los parámetros siguientes:
rhgb quiet crashkernel=auto
El arranque gráfico y silencioso no es útil en un entorno en la nube en el que desea que todos los registros se envíen al puerto serie. La opción
crashkernel
se puede dejar configurada si lo desea. Pero este parámetro reduce la cantidad de memoria disponible en la máquina virtual en 128 MB o más, lo que podría ser un problema para tamaños de máquina virtual más pequeños.Importante
CentOS 6.5 y las versiones anteriores también deben establecer el parámetro
numa=off
del kernel. Para más información, consulte Red Hat KB 436883.Asegúrese de que el servidor de Secure Shell está instalado y configurado para iniciarse en el momento del arranque. Esta configuración es normalmente el valor predeterminado.
No cree un espacio de intercambio en el disco del sistema operativo.
El agente de Linux de Azure puede configurar automáticamente el espacio de intercambio mediante el disco de recursos local que está conectado a la máquina virtual después de aprovisionar la máquina virtual en Azure. El disco de recursos local es un disco temporal que podría tener que vaciarse cuando la máquina virtual se desaprovisiona. Después de instalar el agente de Linux de Azure (consulte el paso anterior), modifique los parámetros siguientes en
/etc/waagent.conf
correctamente: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.
Desaprovisione la máquina virtual y prepárela para el aprovisionamiento en Azure:
sudo waagent -force -deprovision+user sudo export HISTSIZE=0
Nota:
Si va a migrar una máquina virtual específica y no desea crear una imagen generalizada, omita el paso de desaprovisionamiento.
Seleccione Acción >Apagar en el Administrador de Hyper-V. El disco duro virtual con Linux ya está listo para cargarse en Azure.
CentOS 7.0+
Siga los pasos de las secciones siguientes si usa CentOS 7.0+ y versiones posteriores.
Cambios en CentOS 7 (y derivados similares)
Preparar una máquina virtual CentOS 7 para Azure es similar a CentOS 6. Cabe destacar varias diferencias significativas:
El paquete
NetworkManager
ya no entra en conflicto con el agente de Linux de Azure. Este paquete se instala de forma predeterminada y se recomienda no quitarlo.GRUB2 ahora se usa como cargador de arranque predeterminado, por lo que el procedimiento para editar los parámetros del kernel ha cambiado. (Consulte la sección "Pasos de configuración".)
XFS es ahora el sistema de archivos predeterminado. El sistema de archivos ext4 todavía se puede usar si lo desea.
Dado que CentOS 8 Stream y versiones más recientes ya no incluyen
network.service
de forma predeterminada, debe instalarlo manualmente:sudo yum install network-scripts sudo systemctl enable network.service
Pasos de configuración
En el Administrador de Hyper-V, seleccione la máquina virtual.
Seleccione Conectar para abrir una ventana de consola de la máquina virtual.
Cree o edite el archivo
/etc/sysconfig/network
y agregue el siguiente texto:NETWORKING=yes HOSTNAME=localhost.localdomain
Cree o edite el archivo
/etc/sysconfig/network-scripts/ifcfg-eth0
y agregue el siguiente texto:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no NM_CONTROLLED=no
Modifique las reglas udev para evitar generar reglas estáticas para las interfaces Ethernet. Estas reglas pueden causar problemas al clonar una máquina virtual en Azure o Hyper-V:
sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
Si desea usar los reflejos de
OpenLogic
hospedados en los centros de datos de Azure, reemplace el /etc/yum.repos.d/CentOS-Base.repo por los repositorios siguientes. Esta acción también agrega el repositorio [openlogic] que incluye paquetes para el agente Linux de 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
Nota:
En el resto de este artículo se supone que usa al menos el repositorio de
[openlogic]
, que se usa para instalar el agente de Linux de Azure.Borre los metadatos de yum actuales e instale las actualizaciones:
sudo yum clean all
A menos que cree una imagen para una versión anterior de CentOS, se recomienda actualizar todos los paquetes a la versión más reciente:
sudo yum -y update
Es posible que se requiera un reinicio después de ejecutar este comando.
Modifique la línea de arranque del kernel en la configuración de grub para incluir otros parámetros de kernel para Azure. Para realizar este paso, abra
/etc/default/grub
en un editor de texto y edite el parámetroGRUB_CMDLINE_LINUX
. Por ejemplo:GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
Esta modificación también garantiza que todos los mensajes de consola se envíen al primer puerto serie, lo que puede ayudar a la compatibilidad de Azure con problemas de depuración. También desactiva las nuevas convenciones de nomenclatura de CentOS 7 para tarjetas de interfaz de red. También se recomienda quitar los parámetros siguientes:
rhgb quiet crashkernel=auto
El arranque gráfico y silencioso no es útil en un entorno en la nube en el que desea que todos los registros se envíen al puerto serie. La opción
crashkernel
se puede dejar configurada si lo desea. Pero este parámetro reduce la cantidad de memoria disponible en la máquina virtual en 128 MB o más, lo que podría ser un problema para tamaños de máquina virtual más pequeños.Una vez que haya terminado de editar
/etc/default/grub
, vuelva a generar la configuración de grub:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Nota:
Si va a cargar una máquina virtual habilitada para UEFI, el comando para actualizar grub es
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
. Además, el módulo de kernel vfat debe estar habilitado en el kernel. De lo contrario, se produce un error en el aprovisionamiento.Asegúrese de que el módulo udf está habilitado. Al quitarlo o deshabilitarlo, se producirá un error de aprovisionamiento o de arranque. (_Cloud-init >= 21.2 quita el requisito de udf. Para obtener más información, lea la parte superior del documento.)
Si va a compilar la imagen desde VMware, VirtualBox o KVM, asegúrese de que los controladores de Hyper-V se incluyen en initramfs:
Edite
/etc/dracut.conf
y agregue contenido:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Vuelva a generar initramfs:
sudo dracut -f -v
Instale el agente de Linux de Azure y las dependencias para las extensiones de máquina virtual de Azure:
sudo yum install python-pyasn1 WALinuxAgent sudo systemctl enable waagent
Instale
cloud-init
para controlar el aprovisionamiento:sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
- Configure
waagent
paracloud-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
- Configure
Configuración de intercambio:
No cree un espacio de intercambio en el disco del sistema operativo.
Anteriormente, el agente de Linux de Azure se usaba para configurar automáticamente el espacio de intercambio mediante el disco de recursos local que está conectado a la máquina virtual después de que la máquina virtual se aprovisione en Azure. Sin embargo, ahora
cloud-init
controla este paso. No debe usar el agente de Linux para dar formato al disco de recursos para crear el archivo de intercambio. Modifique los parámetros siguientes de/etc/waagent.conf
forma adecuada: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
Si desea montar, dar formato y crear el archivo de intercambio, puede:
Pase este comando como una
cloud-init
configuración cada vez que cree una máquina virtual.Use una directiva
cloud-init
horneada en la imagen para realizar este paso cada vez que se cree la máquina virtual: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
Ejecute los siguientes comandos para desaprovisionar la máquina virtual y prepararla para el aprovisionamiento en Azure.
Nota:
Si va a migrar una máquina virtual específica y no desea crear una imagen generalizada, omita el paso de desaprovisionamiento.
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
Seleccione Acción >Apagar en el Administrador de Hyper-V. El VHD de Linux ya está listo para cargarse en Azure.
Contenido relacionado
Ya está listo para usar el disco duro virtual Linux de CentOS para crear nuevas máquinas virtuales en Azure. Si es la primera vez que carga el archivo .vhd en Azure, vea Crear una VM Linux a partir de un disco personalizado.