Preparación de una máquina virtual SLES u openSUSE Leap para Azure

Se aplica a: ✔️ Máquinas virtuales Linux ✔️ Conjuntos de escalado flexibles Se aplica a: ✔️ Conjuntos de escalado uniformes

En algunos casos, es posible que quiera usar máquinas virtuales (VM) de SUSE Linux Enterprise Server (SLES) personalizadas o de openSUSE Leap Linux en su entorno de Azure y poder compilar estos tipos de máquinas virtuales a través de la automatización. En este artículo se indica cómo crear y cargar un disco duro virtual (VHD) personalizado de Azure que contiene un sistema operativo SUSE Linux.

Requisitos previos

En este artículo se asume que ya ha instalado un SLES u openSUSE Leap en un disco duro virtual. Existen varias herramientas para crear archivos .vhd. Por ejemplo, puede usar una solución de virtualización como Hyper-V. Para obtener instrucciones, consulte Instalación de Hyper-V y creación de una máquina Virtual.

Notas sobre la instalación de SLES/openSUSE Leap

  • Consulte Notas generales sobre la instalación de Linux para obtener consejos sobre la preparación de imágenes de Linux para Azure.
  • Azure no admite archivos de imagen de disco duro (.vhdx) de Windows. Solo se admiten archivos VHD (.vhd) fuera de las máquinas virtuales. Puede convertir el disco al formato VHD mediante el Administrador de Hyper-V o el cmdlet Convert-VHD.
  • Azure admite máquinas virtuales de Gen1 (arranque del BIOS) y Gen2 (arranque UEFI).
  • El módulo del kernel de la tabla de asignación de archivos virtuales (VFAT) debe estar habilitado en el kernel.
  • No configure una partición de intercambio en el disco del SO. Es posible configurar el agente de Linux para crear un archivo de intercambio en el disco de recursos temporal. Los pasos que se indican más adelante en este artículo proporcionan más información sobre cómo configurar el espacio de intercambio.
  • En Azure, todos los discos duros virtuales deben tener un tamaño virtual alineado con 1 MB. Al convertir un disco sin formato en un disco duro virtual, asegúrese de que su tamaño es un múltiplo de 1 MB antes de la conversión. Para obtener más información, consulte las Notas generales sobre la instalación de Linux.

Nota:

La versión 21.2 o posterior de Cloud-init quita el requisito de función definida por el usuario (UDF). Pero sin el módulo udf habilitado, el CD-ROM no se montará durante el aprovisionamiento, lo que impide que se apliquen los datos personalizados. Una solución alternativa consiste en aplicar datos de usuario. Sin embargo, 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 en la documentación de cloud-init.

Uso de SUSE Studio

SUSE Studio puede crear y administrar fácilmente sus imágenes de SLES y openSUSE Leap para Hyper-V y Azure. SUSE Studio es el enfoque recomendado para personalizar sus propias imágenes SLES y openSUSE Leap.

Como alternativa a la creación de su propio VHD, SUSE también publica imágenes de BYOS (Siglas en inglés de "traiga su propia suscripción") para SLES en VM Depot.

Preparación de SLES para Azure

  1. Configure los módulos de Azure y Hyper-V si es necesario.

    Si el hipervisor de software no es Hyper-V, es necesario agregar otros módulos al disco RAM inicial (initramfs) para arrancar correctamente en Azure.

    Edite el archivo /etc/dracut.conf y agregue la siguiente línea al archivo:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Ejecute el comando dracut para recompilar el archivo initramfs:

    sudo dracut --verbose --force
    
  2. Configuración de la consola serie.

    Para trabajar correctamente con la consola serie, debe configurar varias variables en el archivo /etc/defaults/grub y volver a crear GRUB en el servidor:

    # Add console=ttyS0 and earlyprintk=ttS0 to the variable.
    # Remove "splash=silent" and "quiet" options.
    GRUB_CMDLINE_LINUX_DEFAULT="audit=1 no-scroll fbcon=scrollback:0 mitigations=auto security=apparmor crashkernel=228M,high crashkernel=72M,low console=ttyS0 earlyprintk=ttyS0"
    
    # Add "console serial" to GRUB_TERMINAL.
    GRUB_TERMINAL="console serial"
    
    # Set the GRUB_SERIAL_COMMAND variable.
    
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    
    /usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg
    
  3. Registre el sistema de SUSE Linux Enterprise para permitir que descargue actualizaciones e instale paquetes.

  4. Actualice el sistema con las revisiones más recientes:

    sudo zypper update
    
  5. Instale el agente de máquina virtual Linux de Azure (waagent) y cloud-init:

    sudo SUSEConnect -p sle-module-public-cloud/15.2/x86_64  (SLES 15 SP2)
    sudo zypper refresh
    sudo zypper install python-azure-agent
    sudo zypper install cloud-init
    
  6. Habilite waagent y cloud-init para que se inicien en el arranque:

    sudo systemctl enable  waagent
    sudo systemctl enable cloud-init-local.service
    sudo systemctl enable cloud-init.service
    sudo systemctl enable cloud-config.service
    sudo systemctl enable cloud-final.service
    sudo systemctl daemon-reload
    sudo cloud-init clean
    
  7. Actualice la configuración de cloud-init:

    cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg
    datasource_list: [ Azure ]
    datasource:
        Azure:
            apply_network_config: False
    
    EOF
    
    sudo cat <<EOF | sudo tee  /etc/cloud/cloud.cfg.d/05_logging.cfg
    # 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
    
    # Make sure mounts and disk_setup are in the init stage:
    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
    
  8. Si desea montar, dar formato y crear una partición de intercambio, una opción es pasar una configuración de cloud-init cada vez que cree una máquina virtual.

    Otra opción es usar una directiva cloud-init en la imagen para configurar el espacio de intercambio cada vez que se crea la máquina virtual:

    cat  <<EOF | sudo tee -a /etc/systemd/system.conf
    'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"'
    EOF
    
    cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg
    #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
    
  9. Antes, el agente Linux de Azure se usaba para configurar automáticamente un espacio de intercambio mediante el disco de recursos local que se asocia a la máquina virtual, después de que la máquina virtual se aprovisione en Azure. Como ahora es cloud-init quien administra este paso; no tiene que usar el agente de Linux de Azure para formatear el disco de recursos ni crear el archivo de intercambio. Use estos comandos para modificar /etc/waagent.conf adecuadamente:

    sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=auto/g' /etc/waagent.conf
    sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/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
    

    Nota:

    Si usa una versión de cloud-init anterior a la 21.2, asegúrese de que el módulo udf está habilitado. Al quitarlo o deshabilitarlo, se producirá un error de aprovisionamiento o de arranque. La versión 21.2 o posterior de Cloud-init quita el requisito de UDF.

  10. Asegúrese de que el archivo /etc/fstab hace referencia al disco mediante su UUID (by-uuid).

  11. Quite las reglas udev y los archivos de configuración del adaptador de red para evitar generar reglas estáticas para las interfaces Ethernet. Estas reglas pueden causar problemas al clonar una máquina virtual en Microsoft Azure o Hyper-V.

    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    sudo rm -f /etc/udev/rules.d/85-persistent-net-cloud-init.rules
    sudo rm -f /etc/sysconfig/network/ifcfg-eth*
    
  12. Le recomendamos editar el archivo /etc/sysconfig/network/dhcp y cambiar el parámetro DHCLIENT_SET_HOSTNAME por lo siguiente:

    DHCLIENT_SET_HOSTNAME="no"
    
  13. En el archivo /etc/sudoers, convierta en comentario o quite las líneas siguientes, si existen:

    Defaults targetpw   # Ask for the password of the target user i.e. root
    ALL    ALL=(ALL) ALL   # WARNING! Only use this setting together with 'Defaults targetpw'!
    
  14. Asegúrese de que el servidor Secure Shell (SSH) se haya instalado y configurado para iniciarse en el tiempo de arranque:

    sudo systemctl enable sshd
    
  15. Limpie la fase cloud-init:

    sudo cloud-init clean --seed --logs
    
  16. Ejecute los comandos siguientes para desaprovisionar la máquina virtual y prepararla para aprovisionarse en Azure.

    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 waagent -force -deprovision+user
    sudo export HISTSIZE=0
    sudo rm -f ~/.bash_history
    

Preparación de openSUSE 15.2 y versiones posteriores

  1. Seleccione la máquina virtual en el panel central del Administrador de Hyper-V.

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

  3. En un terminal, ejecute el comando zypper lr. Si este comando devuelve una salida similar al ejemplo siguiente, los repositorios se configuran según lo previsto y no es necesario realizar ningún ajuste. (Los números de versión pueden variar).

    # Alias Nombre habilitado Actualizar
    1 Cloud:Tools_15.2 Cloud:Tools_15.2
    2 openSUSE_15.2_OSS openSUSE_15.2_OSS
    3 openSUSE_15.2_Updates openSUSE_15.2_Updates

    Si el comando devuelve el mensaje "No se han definido repositorios...", utilice los comandos siguientes para agregar estos repositorios:

    sudo zypper ar -f http://download.opensuse.org/repositories/Cloud:Tools/openSUSE_15.2 Cloud:Tools_15.2
    sudo zypper ar -f https://download.opensuse.org/distribution/15.2/repo/oss openSUSE_15.2_OSS
    sudo zypper ar -f http://download.opensuse.org/update/15.2 openSUSE_15.2_Updates
    

    Puede verificar entonces que se han agregado los repositorios al volver a ejecutar el comando zypper lr. Si no hay repositorios de actualizaciones pertinentes habilitados, habilítelos con el comando siguiente:

    sudo zypper mr -e [NUMBER OF REPOSITORY]
    
  4. Actualice el kernel a la versión más reciente disponible:

    sudo zypper up kernel-default
    

    O para actualizar el sistema operativo con todas las revisiones más recientes:

    sudo zypper update
    
  5. Instale el Agente de Linux de Azure:

    sudo zypper install WALinuxAgent
    
  6. Modifique la línea de arranque de kernel de su configuración GRUB para que incluya otros parámetros de kernel para Azure. Para ello, 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
    

    Esta opción garantiza que todos los mensajes de la consola se envíen al primer puerto serie, lo que puede ayudar al Soporte técnico de Azure con los problemas de depuración. Además, elimine los parámetros siguientes de la línea de arranque de kernel, si es que están:

     libata.atapi_enabled=0 reserve=0x1f0,0x8
    
  7. Se recomienda editar el archivo /etc/sysconfig/network/dhcp y cambiar el parámetro DHCLIENT_SET_HOSTNAME por el siguiente valor:

     DHCLIENT_SET_HOSTNAME="no"
    
  8. En el archivo /etc/sudoers, convierta en comentario o quite las líneas siguientes, si existen. Este es un paso importante.

    Defaults targetpw   # ask for the password of the target user i.e. root
    ALL    ALL=(ALL) ALL   # WARNING! Only use this together with 'Defaults targetpw'!
    
  9. Asegúrese de que el servidor SSH se haya instalado y configurado para iniciarse en el tiempo de arranque.

  10. No cree un espacio de intercambio en el disco del sistema operativo.

    El agente de Linux de Azure puede configurar automáticamente un espacio de intercambio usando el disco de recursos local que se adjunta a la máquina virtual después de aprovisionarse en Azure. El disco de recursos local es un disco temporal y se vaciará cuando la máquina virtual se desaprovisione.

    Después de instalar el agente Linux de Azure, modifique los parámetros en /etc/waagent.conf de la siguiente manera:

    ResourceDisk.Format=n
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=n
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set the size to whatever you need it to be.
    
  11. Asegúrese de que el Agente de Linux de Azure se ejecute al inicio:

    sudo systemctl enable waagent.service
    
  12. Ejecute los comandos siguientes para desaprovisionar la máquina virtual y prepararla para aprovisionarse en Azure.

    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 ~/.bash_history # Remove current user history
        sudo rm -rf /var/lib/waagent/
        sudo rm -f /var/log/waagent.log
        sudo waagent -force -deprovision+user
        sudo rm -f ~/.bash_history # Remove root user history
        sudo export HISTSIZE=0
    
  13. Seleccione Acción >Apagar en el Administrador de Hyper-V.

Pasos siguientes

Ya está listo para usar el VHD de SUSE Linux 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.