Partilhar 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á perto do status de fim de vida útil (EOL). Considere a sua utilização e planeie em conformidade. Para obter mais informações, consulte as diretrizes de fim de 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. Para obter mais informações, consulte:

Pré-requisitos

Este artigo pressupõe que você já tenha instalado um sistema operacional Linux CentOS (ou derivado semelhante) em um VHD. Existem várias ferramentas para criar ficheiros .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, 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 convert-vhd cmdlet. Se você estiver usando o VirtualBox, selecione Tamanho fixo em vez do padrão alocado dinamicamente quando você cria o disco.
  • O módulo do kernel vfat deve ser ativado no kernel.
  • Quando você instala o sistema Linux, recomendamos que você use partições padrão em vez de Logical Volume Manager (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 conectado a outra VM idêntica para solução de problemas. LVM ou RAID também podem ser usados em discos de dados.
  • É necessário suporte kernel para a montagem de sistemas de ficheiros de funções definidas pelo utilizador (UDF). Na primeira inicialização no Azure, a configuração de provisionamento é passada para a VM do 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). Os sistemas que executam kernels personalizados mais antigos que 2.6.37 ou kernels baseados no Red Hat Enterprise Linux (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. Para obter mais informações, consulte Notas de instalação do Linux.

Nota

Cloud-init >= 21.2 remove o requisito UDF. Mas sem o módulo UDF ativado, o CD-ROM não será montado durante o provisionamento, o que impede que dados personalizados sejam aplicados. Uma solução alternativa para essa situação é aplicar dados personalizados usando dados do usuário. Ao contrário dos dados personalizados, os dados do usuário não são criptografados. Para obter mais informações, consulte Formatos de dados do usuário.

CentOS 6.x

Importante

O CentOS 6 atingiu sua EOL e não é mais suportado pela comunidade CentOS. 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 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 de 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 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 as interfaces Ethernet. Essas regras podem causar problemas quando você clona uma VM 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. Certifique-se de que o serviço de rede inicia no momento da inicialização:

    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. Esta ação também adiciona 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 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

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

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

    http_caching=packages
    
  10. Limpe os metadados atuais do yum e atualize 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 que você atualize todos os pacotes para o mais recente:

    sudo yum -y update
    

    Uma reinicialização pode ser necessária depois de executar este 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  ## (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 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 habilite o waagent serviço:

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

    O pacote WALinuxAgent remove os NetworkManager pacotes 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 de grub para incluir outros parâmetros do kernel para o Azure. Para fazer 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 garante 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.

    Também recomendamos que você remova os seguintes parâmetros:

    rhgb quiet crashkernel=auto
    

    A inicialização gráfica e silenciosa não é útil em um ambiente de nuvem onde você deseja que todos os logs sejam enviados para a porta serial. A crashkernel opção pode ser deixada configurada, se 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 menores de VM.

    Importante

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

  14. Certifique-se de que o servidor Secure Shell está instalado e configurado para iniciar no momento da inicialização. Essa configuração 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 depois que a VM é provisionada 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. Desprovisione a VM e prepare-a para provisionamento no Azure:

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

    Nota

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

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

CentOS 7.0+

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

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

A preparação de uma VM do CentOS 7 para o Azure é semelhante ao CentOS 6. Várias diferenças significativas são dignas de nota:

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

  • GRUB2 agora é usado como o carregador de inicialização padrão, então o procedimento para editar os parâmetros do kernel mudou. (Consulte a seção "Etapas de configuração").

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

  • 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
    

Passos de configuração

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

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

  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 as interfaces Ethernet. Essas regras podem causar problemas quando você clona uma VM 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 OpenLogic espelhos hospedados nos datacenters do Azure, substitua o arquivo /etc/yum.repos.d/CentOS-Base.repo pelos repositórios a seguir. Esta ação também 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
    

    Nota

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

  7. Limpe os metadados atuais do yum 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 que você atualize todos os pacotes para o mais recente:

    sudo yum -y update
    

    Uma reinicialização pode ser necessária depois de executar este comando.

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

    Essa modificação também garante 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 placas de interface de rede. Também recomendamos que você remova os seguintes parâmetros:

    rhgb quiet crashkernel=auto
    

    A inicialização gráfica e silenciosa não é útil em um ambiente de nuvem onde você deseja que todos os logs sejam enviados para a porta serial. A crashkernel opção pode ser deixada configurada, se 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 menores de VM.

  9. Depois de terminar de editar /etc/default/grub, reconstrua a configuração do grub:

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

    Nota

    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 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ê-lo ou desativá-lo 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 criando a imagem a partir do VMware, VirtualBox ou KVM, verifique se os drivers Hyper-V estão incluídos no initramfs:

    1. Editar /etc/dracut.conf e adicionar conteúdo:

      add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
      
    2. Reconstrua os 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 swap:

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

      Anteriormente, o agente Linux do Azure era usado para configurar automaticamente o espaço de permuta usando o disco de recurso local anexado à VM depois que a VM é provisionada no Azure. No entanto, cloud-init agora lida com esta etapa. Você não deve usar o agente Linux para formatar o disco de recursos para criar o arquivo de permuta. Modifique 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
      
    2. Se você quiser montar, formatar e criar o arquivo de permuta, você pode:

      • Passe este comando como uma cloud-init configuração sempre que criar uma VM.

      • Use uma cloud-init diretiva incorporada na imagem para executar esta 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.

    Nota

    Se você estiver migrando uma VM específica e não quiser 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. Seu VHD do Linux agora está pronto para ser carregado no Azure.

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