Share via


Prepare a CentOS-based virtual machine for Azure (Preparar uma máquina virtual baseada em CentOS para o Azure)

Atenção

Este artigo faz referência ao CentOS, uma distribuição Linux que está se aproximando do status de Fim da Vida Útil (EOL). Por favor, considere o seu uso e planeje de acordo. Para obter mais informações, consulte as diretrizes de Fim da Vida Útil do CentOS.

Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexível

Aprenda a criar e carregar um disco rígido virtual (VHD) do Azure que contém um sistema operacional Linux baseado em CentOS.

Pré-requisitos

Este artigo pressupõe que você já tenha instalado um sistema operacional Linux CentOS (ou derivado semelhante) 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, consulte Notas gerais de instalação do Linux.
  • O formato VHDX não é suportado no Azure, apenas VHD fixo. Você pode converter o disco para o formato VHD usando o Gerenciador do Hyper-V ou o cmdlet convert-vhd. Se você estiver usando o VirtualBox, isso significa selecionar Tamanho fixo em vez do padrão alocado dinamicamente ao criar o disco.
  • O módulo do kernel vfat deve ser ativado no kernel
  • Ao instalar o sistema Linux, recomendamos que você use partições padrão em vez de LVM (geralmente o padrão para muitas instalações). Isso evita conflitos de nome LVM com VMs clonadas, especialmente se um disco do sistema operacional precisar ser conectado a outra VM idêntica para solução de problemas. LVM ou RAID podem ser usados em discos de dados.
  • É necessário suporte kernel para a montagem de sistemas de ficheiros UDF. Na primeira inicialização no Azure, a configuração de provisionamento é passada para a VM Linux usando mídia formatada em UDF anexada ao convidado. O agente Linux do Azure ou cloud-init deve montar o sistema de arquivos UDF para ler sua configuração e provisionar a VM.
  • As versões do kernel Linux abaixo da versão 2.6.37 não suportam NUMA no Hyper-V com tamanhos de VM maiores. Esse problema afeta principalmente distribuições mais antigas usando o kernel upstream do Centos 2.6.32 e foi corrigido no Centos 6.6 (kernel-2.6.32-504). Sistemas que executam kernels personalizados mais antigos que 2.6.37 ou kernels baseados em RHEL mais antigos que 2.6.32-504 devem definir o parâmetro numa=off de inicialização na linha de comando do kernel em grub.conf. Para obter mais informações, consulte Red Hat KB 436883.
  • Não configure uma partição swap no disco do SO.
  • Todos os VHDs no Azure devem ter um tamanho virtual alinhado a 1 MB. Ao converter de um disco bruto para VHD, você deve garantir que o tamanho do disco bruto seja um múltiplo de 1 MB antes da conversão. Consulte Notas de instalação do Linux para obter mais informações.

Nota

Cloud-init >= 21.2 remove o requisito udf. No entanto, sem o módulo udf ativado, o cdrom 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

Por favor, note que o CentOS 6 atingiu seu Fim da Vida Útil (EOL) e não é mais suportado pela comunidade CentOS. Isto significa que não serão lançadas mais atualizações ou patches de segurança para esta versão, deixando-a vulnerável a potenciais riscos de segurança. É altamente recomendável atualizar para uma versão mais recente do CentOS para garantir a segurança e estabilidade do seu sistema. Consulte o seu departamento de TI ou 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 uma janela de console para a máquina virtual.

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

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

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

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Modifique as regras do udev para evitar a geração de regras estáticas para a(s) interface(s) Ethernet. Essas regras podem causar 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. Verifique se o serviço de rede é iniciado no momento da inicialização executando o seguinte comando:

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

    Nota

    O restante deste guia presumirá que você esteja usando pelo menos o [openlogic] repo, que será usado para instalar o agente Linux do Azure abaixo.

  9. Adicione a seguinte linha ao /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 o mais recente:

    sudo yum -y update
    

    Uma reinicialização pode ser necessária após a execução deste comando.

  11. (Opcional) Instale os drivers para o Linux Integration Services (LIS).

    Importante

    A etapa é necessária para o CentOS 6.3 e versões anteriores e opcional 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 na página de download do LIS para instalar o RPM em sua VM.

  12. Instale o Agente Linux do Azure e as dependências. Inicie e ative 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 tiverem sido removidos conforme descrito na etapa 3.

  13. Modifique a linha de inicialização do kernel em sua configuração grub para incluir parâmetros adicionais do 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, o que pode ajudar o suporte do Azure com problemas de depuração.

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

    rhgb quiet crashkernel=auto
    

    Gráficos e quiet boot não são úteis em um ambiente de nuvem onde queremos que todos os logs sejam enviados para a porta serial. A crashkernel opção pode ser deixada configurada, se desejado, mas observe que esse parâmetro reduzirá a quantidade de memória disponível na VM em 128 MB ou mais, o que pode ser problemático nos tamanhos menores da VM.

    Importante

    O CentOS 6.5 e versões anteriores também devem definir o parâmetro numa=offkernel. Consulte Red Hat KB 436883.

  14. Certifique-se de que o servidor SSH está instalado e configurado para iniciar no momento da inicialização. Este é geralmente o padrão.

  15. Não crie espaço de permuta no disco do SO.

    O Agente Linux do Azure pode configurar automaticamente o espaço de permuta usando o disco de recurso local 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 (consulte a etapa anterior), modifique os seguintes parâmetros adequadamente /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 seguintes comandos para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure:

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

Nota

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

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

CentOS 7.0+

Alterações no CentOS 7 (e derivados semelhantes)

A preparação de uma máquina virtual do CentOS 7 para o Azure é semelhante ao CentOS 6, no entanto, há várias diferenças significativas que merecem ser observadas:

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

  • GRUB2 agora é usado como o carregador de inicialização padrão, então o procedimento para editar os parâmetros do kernel mudou (veja abaixo).

  • XFS é agora o sistema de arquivos padrão. O sistema de arquivos ext4 ainda pode ser usado, se desejado.

  • Como o CentOS 8 Stream e versões mais recentes não incluem network.service mais 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 máquina virtual.

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

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

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

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    NM_CONTROLLED=no
    
  5. Modifique as regras do udev para evitar a geração de regras estáticas para a(s) interface(s) Ethernet. Essas regras podem causar 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 você quiser usar os espelhos OpenLogic hospedados nos datacenters do Azure, substitua o /etc/yum.repos.d/CentOS-Base.repo arquivo pelos seguintes repositórios. Isso também adicionará 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
    

    Nota

    O restante deste guia presumirá que você esteja usando pelo menos o [openlogic] repo, que será usado para instalar o agente Linux do Azure abaixo.

  7. Execute o seguinte comando para limpar os metadados atuais do yum e instalar 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 o mais recente:

    sudo yum -y update
    

    Uma reinicialização pode ser necessária após a execução deste comando.

  8. Modifique a linha de inicialização do kernel em sua configuração grub para incluir parâmetros adicionais do kernel para o Azure. Para fazer isso, abra /etc/default/grub em um editor de texto e edite o GRUB_CMDLINE_LINUX parâmetro, 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, o que pode ajudar o suporte do Azure com problemas de depuração. Ele também desativa as novas convenções de nomenclatura do CentOS 7 para NICs. Além do acima, recomendamos remover os seguintes parâmetros:

    rhgb quiet crashkernel=auto
    

    A inicialização gráfica e silenciosa não é útil em um ambiente de nuvem onde queremos que todos os logs sejam enviados para a porta serial. A crashkernel opção pode ser deixada configurada, se desejado, mas observe que esse parâmetro reduzirá a quantidade de memória disponível na VM em 128 MB ou mais, o que pode ser problemático nos tamanhos menores da VM.

  9. Quando terminar a edição /etc/default/grub acima, execute o seguinte comando para reconstruir a configuração do grub:

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

Nota

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 do kernel vfat deve ser ativado no kernel, caso contrário, o provisionamento falhará.

Certifique-se de que o módulo 'udf' está ativado. Removê-los/desativá-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 criando a imagem a partir do VMware, VirtualBox ou KVM: verifique se os drivers Hyper-V estão incluídos no initramfs:

    Editar /etc/dracut.conf, adicionar conteúdo:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Reconstrua os initramfs:

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

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

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

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

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

    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 você quiser montar, formatar e criar swap, você pode:

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

    • Use uma diretiva cloud-init incorporada na imagem que fará isso 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
      
  5. Execute os seguintes comandos para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure:

    Nota

    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. Seu VHD do Linux agora está pronto para ser carregado no Azure.

Próximos passos

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