Preparar uma máquina virtual baseada em CentOS para o Azure

Cuidado

Este artigo faz referência ao CentOS, uma distribuição do Linux que está se aproximando do status de EOL (fim da vida útil). Considere seu uso e planeje adequadamente. Para obter mais informações, veja as Diretrizes sobre fim da vida útil do CentOS.

Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis

Saiba como criar e carregar um VHD (disco rígido virtual) do Azure que contenha um sistema operacional Linux baseado em CentOS.

Pré-requisitos

Este artigo pressupõe que você já instalou um sistema operacional Linux CentOS (ou derivado similar) em um disco rígido virtual. Existem várias ferramentas para criar arquivos .vhd, por exemplo, uma solução de virtualização como o Hyper-V. Para obter instruções, consulte Instalar a função Hyper-V e configurar uma máquina Virtual.

Notas de instalação do CentOS

  • Para obter mais dicas sobre como preparar o Linux para o Azure, veja Notas de Instalação Geral do Linux.
  • Não há suporte para o formato VHDX no Azure, somente para o VHD fixo. Você pode converter o disco em formato VHD usando o Gerenciador do Hyper-V ou o cmdlet convert-vhd. Se você estiver usando o VirtualBox, significa que você selecionar Tamanho fixo em vez do padrão alocado dinamicamente durante a criação do disco.
  • O módulo de kernel vfat precisa ser habilitado no kernel
  • Ao instalar o sistema Linux, recomendamos que você use partições padrão em vez de LVM (que costuma ser o padrão para muitas instalações). Isso irá evitar conflitos de nome LVM com VMs clonadas, especialmente se um disco do sistema operacional precisar ser anexado a outra VM idêntica para solução de problemas. LVM ou RAID podem ser usados nos discos de dados.
  • O suporte do kernel para a montagem de sistemas de arquivos UDF é necessário. Na primeira inicialização no Azure, a configuração de provisionamento é passada para a VM do Linux usando a mídia em formato UDF anexada ao convidado. O agente Linux do Azure ou o cloud-init deve montar o sistema de arquivos UDF para ler a configuração e provisionar a VM.
  • Versões de kernel do Linux abaixo de 2.6.37 não dão suporte ao NUMA no Hyper-V com tamanhos maiores de VM. Esse problema afeta principalmente as distribuições mais antigas que usam o kernel Centos 2.6.32 upstream e foi corrigido no Centos 6.6 (kernel-2.6.32-504). Sistemas que executam kernels personalizados anteriores à versão 2.6.37 ou baseados em RHEL anteriores à versão 2.6.32-504 precisam definir o parâmetro de inicialização numa=off na linha de comando do kernel em grub.conf. Para obter mais informações, consulte o KB 436883 do Red Hat.
  • Não configure uma partição de permuta no disco do sistema operacional.
  • Todos os VHDs no Azure devem ter um tamanho virtual alinhado a 1 MB. Ao converter de um disco não processado para VHD, certifique-se de que o tamanho do disco não processado seja um múltiplo de 1 MB antes da conversão. Consulte Notas de Instalação do Linux para obter mais informações.

Observação

O cloud-init >= 21.2 remove o requisito udf. No entanto, sem o módulo udf habilitado, o cd-rom não será montado durante o provisionamento, impedindo que dados personalizados sejam aplicados. Uma solução alternativa para isso é aplicar dados personalizados usando dados do usuário. No entanto, ao contrário dos dados personalizados, os dados do usuário não são criptografados. https://cloudinit.readthedocs.io/en/latest/topics/format.html

CentOS 6.x

Importante

Observe que o CentOS 6 atingiu o Fim da Vida Útil (EOL) e não tem mais suporte da comunidade CentOS. Isso significa que nenhuma atualização adicional ou patches de segurança serão lançados para esta versão, deixando-a vulnerável a possíveis riscos de segurança. É altamente recomendável atualizar para uma versão mais recente do CentOS para garantir a segurança e a estabilidade do seu sistema. Consulte o departamento de TI ou o administrador do sistema para obter mais assistência.

  1. No Gerenciador do Hyper-V, selecione a máquina virtual.

  2. Clique em Conectar para abrir a janela do console para a máquina virtual.

  3. No CentOS 6, NetworkManager pode interferir com o agente Linux do Azure. Desinstale este pacote ao executar o seguinte comando:

    sudo rpm -e --nodeps NetworkManager
    
  4. Crie ou edite o arquivo /etc/sysconfig/network e adicione o texto a seguir:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Crie ou edite o arquivo /etc/sysconfig/network-scripts/ifcfg-eth0 e adicione o texto a seguir:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Modifique as regras de udev para evitar a geração de regras estáticas das interfaces Ethernet. Essas regras podem provocar problemas ao clonar uma máquina virtual no Microsoft Azure ou no 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. Certifique-se de que o serviço de rede será iniciado na inicialização executando o seguinte comando:

    sudo chkconfig network on
    
  8. Se quiser usar os espelhos OpenLogic hospedados em datacenters do Azure, substitua o arquivo /etc/yum.repos.d/CentOS-Base.repo pelos repositórios a seguir. Isso também adicionará o repositório [openlogic], que inclui pacotes adicionais como o agente Linux do 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 may 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
    

    Observação

    O restante deste guia parte do pressuposto de que você esteja usando, no mínimo, o repositório [openlogic], que será usado para instalar o agente Linux do Azure abaixo.

  9. Adicione a seguinte linha a /etc/yum.conf:

    http_caching=packages
    
  10. Execute o seguinte comando para limpar os metadados atuais do yum e atualizar o sistema com os pacotes mais recentes:

    sudo yum clean all
    

    A menos que você esteja criando uma imagem para uma versão mais antiga do CentOS, recomendamos atualizar todos os pacotes para a versão mais recente:

    sudo yum -y update
    

    Pode ser necessária uma reinicialização depois de executar esse comando.

  11. (Opcional) Instale os drivers dos LIS (Serviços de Integração do Linux).

    Importante

    A etapa é necessária para CentOS 6.3 e anteriores e opcionais para versões posteriores.

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

    Como alternativa, você pode seguir as instruções de instalação manual página de download do LIS para instalar o RPM para sua VM.

  12. Instale o Agente Linux do Azure e as dependências. Inicie e habilite o serviço waagent:

    sudo yum install python-pyasn1 WALinuxAgent
    sudo service waagent start
    sudo chkconfig waagent on
    

    A instalação do pacote WALinuxAgent removerá o NetworkManager e os pacotes NetworkManager-gnome se eles já não tiverem sido removidos conforme descrito na etapa 3.

  13. Modifique a linha de inicialização do kernel em sua configuração de grub para incluir parâmetros adicionais de kernel para o Azure. Para fazer isso, abra /boot/grub/menu.lst em um editor de texto e verifique se o kernel padrão inclui os seguintes parâmetros:

    console=ttyS0 earlyprintk=ttyS0 rootdelay=300
    

    Isso também garantirá que todas as mensagens do console sejam enviadas para a primeira porta serial, que pode auxiliar o suporte do Azure com problemas de depuração.

    Além dos itens acima, recomendamos remover os seguintes parâmetros:

    rhgb quiet crashkernel=auto
    

    O Gráfico e o quiet boot não são úteis em ambientes de rede, quando queremos que todos os logs sejam enviados para a porta serial. Você pode deixar a opção crashkernel configurada, mas esse parâmetro reduz a memória disponível na VM em 128 MB ou mais, o que pode ser um problema em máquinas virtuais menores.

    Importante

    CentOS 6.5 e anteriores também devem definir o parâmetro de kernel numa=off. Consulte Red Hat KB 436883.

  14. Confira se o servidor SSH está instalado e configurado para iniciar no tempo de inicialização. Geralmente, esse é o padrão.

  15. Não crie espaço de troca no disco do sistema operacional.

    O Agente Linux do Azure pode configurar automaticamente o espaço de permuta usando o disco de recurso local que é anexado à VM após o provisionamento no Azure. O disco de recurso local é um disco temporário e pode ser esvaziado quando a VM é desprovisionada. Depois de instalar o Agente Linux do Azure (confira a etapa anterior), modifique adequadamente os seguintes parâmetros em /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. Execute os comandos a seguir para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure:

    sudo waagent -force -deprovision+user
    sudo export HISTSIZE=0
    

Observação

Se você estiver migrando uma máquina virtual específica e não quiser criar uma imagem generalizada, ignore a etapa de desprovisionamento.

  1. Clique em Ação –> Desligar no Gerenciador do Hyper-V. Agora, seu VHD Linux está pronto para ser carregado no Azure.

CentOS 7.0+

Alterações no CentOS 7 (e em derivativos similares)

A preparação de uma máquina virtual CentOS 7 para o Azure é semelhante à da CentOS 6, mas existem diversas diferenças significativas que devem ser ressaltadas:

  • O pacote do NetworkManager não entra mais em conflito com o agente Linux do Azure. Esse pacote é instalado por padrão e recomendamos que não seja removido.

  • O GRUB2 agora é usado como carregador de inicialização padrão. Com isso, o procedimento de edição de parâmetros do kernel mudou (confira abaixo).

  • O XFS agora é o sistema de arquivos padrão. Ainda é possível usar o sistema de arquivos ext4 se você preferir.

  • Como o CentOS 8 Stream e versões mais recentes não incluem mais o network.service por padrão, você precisará instalá-lo manualmente:

    sudo yum install network-scripts
    sudo systemctl enable network.service
    

Etapas da configuração

  1. No Gerenciador do Hyper-V, selecione a máquina virtual.

  2. Clique em Conectar para abrir a janela do console para a máquina virtual.

  3. Crie ou edite o arquivo /etc/sysconfig/network e adicione o texto a seguir:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. Crie ou edite o arquivo /etc/sysconfig/network-scripts/ifcfg-eth0 e adicione o texto a seguir:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    NM_CONTROLLED=no
    
  5. Modifique as regras de udev para evitar a geração de regras estáticas das interfaces Ethernet. Essas regras podem provocar problemas ao clonar uma máquina virtual no Microsoft Azure ou no Hyper-V:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    
  6. Se quiser usar os espelhos OpenLogic hospedados em datacenters do Azure, substitua o arquivo /etc/yum.repos.d/CentOS-Base.repo pelos repositórios a seguir. Essa ação adiciona o repositório [openlogic] que inclui pacotes para o agente Linux do 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 may 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
    

    Observação

    O restante deste guia parte do pressuposto de que você esteja usando, no mínimo, o repositório [openlogic], que será usado para instalar o agente Linux do Azure abaixo.

  7. Execute o comando a seguir para limpar os metadados atuais do yum e instalar atualizações:

    sudo yum clean all
    

    A menos que você esteja criando uma imagem para uma versão mais antiga do CentOS, recomendamos atualizar todos os pacotes para a versão mais recente:

    sudo yum -y update
    

    Pode ser necessária uma reinicialização depois de executar esse comando.

  8. Modifique a linha de inicialização do kernel em sua configuração de grub para incluir parâmetros adicionais de kernel para o Azure. Para fazer isso, abra /etc/default/grub em um editor de texto e edite o parâmetro GRUB_CMDLINE_LINUX, por exemplo:

    GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    Isso também garantirá que todas as mensagens do console sejam enviadas para a primeira porta serial, que pode auxiliar o suporte do Azure com problemas de depuração. Ele também desativa novas convenções de nomenclatura do CentOS 7 para NICs. Além dos itens acima, recomendamos remover os seguintes parâmetros:

    rhgb quiet crashkernel=auto
    

    As inicializações gráfica e silenciosa não são úteis em um ambiente de rede, quando queremos que todos os logs sejam enviados para a porta serial. Você pode deixar a opção crashkernel configurada, mas esse parâmetro reduz a memória disponível na VM em 128 MB ou mais, o que pode ser um problema em VMs menores.

  9. Depois de editar /etc/default/grub como mostrado acima, execute o comando a seguir para recompilar a configuração do grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

Observação

Se estiver carregando uma VM habilitada para UEFI, o comando para atualizar o grub será grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg. Além disso, o módulo de kernel do vfat deve ser habilitado no kernel. Caso contrário, o provisionamento falhará.

Verifique se o módulo "udf" está habilitado. Removê-los/desabilitá-los causará uma falha de provisionamento/inicialização. (_Cloud-init >= 21,2 remove o requisito udf. Leia a parte superior do documento para obter mais detalhes.)

  1. Se estiver compilando a imagem de VMware, VirtualBox ou KVM: assegure-se de que os drivers do Hyper-V estejam incluídos no initramfs:

    Edite /etc/dracut.confe adicione o conteúdo:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Recompile o initramfs:

    sudo dracut -f -v
    
  2. Instale o agente Linux do Azure e as dependências para Extensões de VM do Azure:

    sudo yum install python-pyasn1 WALinuxAgent
    sudo systemctl enable waagent
    
  3. Instalar cloud-init para lidar com o provisionamento

    sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
    1. Configurar o waagent para o 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
    
  4. Configuração de troca

    Não crie o espaço de troca no disco do sistema operacional.

    Antes, o agente de Linux do Azure era usado para configurar automaticamente o espaço de troca usando o disco de recurso local anexado à máquina virtual, depois que esta era provisionada no Azure. No entanto, isso agora é tratado por cloud-init; você não deve usar o agente do Linux para formatar o disco de recursos criar o arquivo de troca, modificar os seguintes parâmetros em /etc/waagent.conf de forma adequada:

    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
    

    Se quiser montar, formatar e criar uma troca, você pode:

    • Passar isso como uma configuração de cloud-init toda vez que criar uma VM

    • Usar uma diretiva cloud-init inclusa na imagem que fará isso toda vez que a VM for criada:

      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
      
  5. Execute os comandos a seguir para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure:

    Observação

    Se você estiver migrando uma máquina virtual específica e não desejar criar uma imagem generalizada, ignore a etapa de desprovisionamento.

    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
    
  6. Clique em Ação –> Desligar no Gerenciador do Hyper-V. Agora, seu VHD Linux está pronto para ser carregado no Azure.

Próximas etapas

Agora, você está pronto para usar o disco rígido virtual CentOS Linux para criar novas máquinas virtuais no Azure. Se esta é a primeira vez que você está carregando o arquivo .vhd para o Azure, consulte Criar uma VM do Linux a partir de um disco personalizado.