Compartir por


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:

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.

  1. En el Administrador de Hyper-V, seleccione la máquina virtual.

  2. Seleccione Conectar para abrir una ventana de consola de la máquina virtual.

  3. En CentOS 6, NetworkManager pueden interferir con el agente de Linux de Azure. Desinstale este paquete:

    sudo rpm -e --nodeps NetworkManager
    
  4. Cree o edite el archivo /etc/sysconfig/network y agregue el siguiente texto:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. 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
    
  6. 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
    
  7. Asegúrese de que el servicio de red se inicia en tiempo de arranque:

    sudo chkconfig network on
    
  8. 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.

  9. Agregue la línea siguiente a /etc/yum.conf:

    http_caching=packages
    
  10. 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.

  11. 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.

  12. 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 y NetworkManager-gnome si aún no se han quitado, como se describe en el paso 3.

  13. 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.

  14. 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.

  15. 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.
    
  16. 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.

  17. 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

  1. En el Administrador de Hyper-V, seleccione la máquina virtual.

  2. Seleccione Conectar para abrir una ventana de consola de la máquina virtual.

  3. Cree o edite el archivo /etc/sysconfig/network y agregue el siguiente texto:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. 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
    
  5. 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
    
  6. 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.

  7. 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.

  8. 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ámetro GRUB_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.

  9. 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.)

  10. Si va a compilar la imagen desde VMware, VirtualBox o KVM, asegúrese de que los controladores de Hyper-V se incluyen en initramfs:

    1. Edite /etc/dracut.conf y agregue contenido:

      add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
      
    2. Vuelva a generar initramfs:

      sudo dracut -f -v
      
  11. 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
    
  12. Instale cloud-init para controlar el aprovisionamiento:

    sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
    • Configure waagent para 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. Configuración de intercambio:

    1. 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
      
    2. 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
        
  14. 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
    
  15. Seleccione Acción >Apagar en el Administrador de Hyper-V. El VHD de Linux ya está listo para cargarse en Azure.

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.