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 de fim de 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 SO (sistema operacional) Linux baseado em CentOS. Para saber mais, veja:

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

Notas de instalação do CentOS

  • Para obter mais dicas sobre como preparar o Linux para o Azure, veja Notas gerais de instalação 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ê está usando o VirtualBox, selecione Tamanho fixo em vez da opção padrão alocada dinamicamente quando você cria o disco.
  • O módulo de kernel vfat precisa ser habilitado no kernel.
  • Ao instalar o sistema Linux, recomendamos utilizar partições-padrão em vez do gerenciador de volume lógico (LVM), que geralmente é o padrão para muitas instalações. O uso de partições evita 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 também podem ser usados em discos de dados.
  • É necessário o suporte do kernel à montagem de sistemas de arquivos com UDFs (funções definidas pelo usuá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 cloud-init precisa 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 a 2.6.37 ou com base em RHEL (Red Hat Enterprise Linux) anteriores a 2.6.32-504 devem 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. Para obter mais informações, consulte Notas de Instalação do Linux.

Observação

Cloud-init >= 21.2 remove o requisito UDF. Porém, sem o módulo UDF habilitado, o CD-ROM não será montado durante o provisionamento, o que impede que os dados personalizados sejam aplicados. Uma solução alternativa para essa situação é 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. Para obter mais informações, confira a seção Formatos de dados de usuário.

CentOS 6.x

Importante

O CentOS 6 atingiu o Fim da EOL e não tem mais suporte da comunidade CentOS. 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 que você atualize para uma versão mais recente do CentOS para garantir a segurança e a estabilidade do seu sistema. Para obter mais assistência, consulte o departamento de TI ou o administrador do sistema.

  1. No Gerenciador do Hyper-V, selecione a VM.

  2. Selecione Conectar para abrir uma janela do console para a VM.

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

    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 causar problemas ao clonar uma máquina virtual no 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. Verifique se o serviço de rede é iniciado na hora de inicialização:

    sudo chkconfig network on
    
  8. Se você 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 também adiciona 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 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
    

    Observação

    O restante deste artigo pressupõe que você esteja usando pelo menos o repositório [openlogic], que é usado para instalar o agente Linux do Azure.

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

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

    Uma reinicialização poderá ser necessária depois que você 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 é opcional para versões posteriores.

    sudo rpm -e hypervkvpd  ## (might return an 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
    

    O pacote WALinuxAgent remove os pacotes NetworkManager e NetworkManager-gnome se eles ainda não foram removidos, conforme descrito na etapa 3.

  13. Modifique a linha de inicialização do kernel em sua configuração de GRUB para incluir mais parâmetros do kernel para o Azure. Para realizar esta etapa, 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
    

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

    Também recomendamos que você remova 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 você deseja que todos os logs sejam enviados para a porta serial. A opção crashkernel poderá ser deixada configurada se você desejar. Mas esse parâmetro reduz a quantidade de memória disponível na VM em 128 MB ou mais, o que pode ser um problema para tamanhos de VM menores.

    Importante

    CentOS 6.5 e anteriores também devem definir o parâmetro de kernel numa=off. Para obter mais informações, consulte o KB 436883 do Red Hat.

  14. Certifique-se de que o servidor Secure Shell está instalado e configurado para iniciar no tempo de inicialização. Essa configuração geralmente é 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 troca usando o disco de recurso local que é anexado à VM após o provisionamento da mesma 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 (consulte 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. Desprovisione a VM e prepare-a para provisionamento no Azure:

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

    Observação

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

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

CentOS 7.0+

Siga as etapas nas próximas seções se você estiver usando o CentOS 7.0+.

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

Preparar uma VM centOS 7 para o Azure é semelhante ao CentOS 6. Vale a pena observar várias diferenças significativas:

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

  • O GRUB2 agora é usado como carregador de inicialização padrão. Com isso, o procedimento de edição de parâmetros do kernel mudou. (Consulte a seção "Etapas de configuração".)

  • O XFS agora é o sistema de arquivos padrão. O sistema de arquivos ext4 ainda poderá ser usado, se você desejar.

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

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

Etapas de configuração

  1. No Gerenciador do Hyper-V, selecione a VM.

  2. Selecione Conectar para abrir uma janela do console para a VM.

  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 causar problemas ao clonar uma máquina virtual no Azure ou no Hyper-V:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    
  6. Se você quiser usar os espelhos OpenLogic hospedados nos 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 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
    

    Observação

    O restante deste artigo pressupõe que você esteja usando pelo menos o repositório [openlogic], que é usado para instalar o agente Linux do Azure.

  7. Desmarque os metadados yum atuais e instale todas as 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
    

    Uma reinicialização poderá ser necessária depois que você executar esse comando.

  8. Modifique a linha de inicialização do kernel em sua configuração de GRUB para incluir mais parâmetros do kernel para o Azure. Para realizar essa etapa, 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"
    

    Essa modificação também garantirá que todas as mensagens do console sejam enviadas para a primeira porta serial, o que pode auxiliar o suporte do Azure com problemas de depuração. Ela também desativa novas convenções de nomenclatura do CentOS 7 para placas de interface de rede. Também recomendamos que você remova 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 você deseja que todos os logs sejam enviados para a porta serial. A opção crashkernel poderá ser deixada configurada se você desejar. Mas esse parâmetro reduz a quantidade de memória disponível na VM em 128 MB ou mais, o que pode ser um problema para tamanhos de VM menores.

  9. Após concluir a edição de /etc/default/grub, recompile a configuração do grub:

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

    Observação

    Se você 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 vfat precisa ser habilitado no kernel. Caso contrário, o provisionamento falhará.

    Verifique se o módulo udf está habilitado. Remover ou desabilitar causará uma falha de provisionamento ou inicialização. (_Cloud-init >= 21,2 remove o requisito udf. Para obter mais informações, leia a parte superior do documento.)

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

    1. Edite /etc/dracut.conf e adicione o conteúdo:

      add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
      
    2. Recompile o initramfs:

      sudo dracut -f -v
      
  11. 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
    
  12. Instale cloud-init para lidar com o provisionamento:

    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. Configuração de troca:

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

      Anteriormente, o Agente Linux do Azure era usado para configurar automaticamente o espaço de troca usando o disco de recurso local que é anexado à VM após o provisionamento da mesma no Azure. No entanto, cloud-init agora lida com essa etapa. Você não pode usar o agente do Linux para formatar o disco de recurso para criar o arquivo de troca. Modifique os seguintes parâmetros adequadamente no /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
      
    2. Se deseja montar, formatar e criar o arquivo de troca, você pode:

      • Passar esse comando como uma configuração cloud-init sempre que você criar uma VM.

      • Usar uma diretiva cloud-init inclusa na imagem para executar essa etapa sempre 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
        
  14. Execute os comandos a seguir para desprovisionar a VM e prepará-la para provisionamento no Azure.

    Observação

    Se você está migrando uma máquina virtual específica e não quer 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
    
  15. Selecione Ação>Desligar no Gerenciador do Hyper-V. Agora, o VHD do Linux está pronto para ser carregado no Azure.

Agora você está pronto para usar o VHD do CentOS Linux para criar VMs 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.