Een op CentOS gebaseerde virtuele Azure-machine voorbereiden

Van toepassing op: ✔️ Flexibele schaalsets voor Linux-VM's ✔️

Leer hoe u een virtuele harde schijf (VHD) van Azure maakt en uploadt die een Linux-besturingssysteem op basis van CentOS bevat.

Vereisten

In dit artikel wordt ervan uitgegaan dat u al een CentOS-besturingssysteem (of een soortgelijk afgeleid) Linux-besturingssysteem hebt geïnstalleerd op een virtuele harde schijf. Er bestaan meerdere hulpprogramma's om VHD-bestanden te maken, bijvoorbeeld een virtualisatieoplossing zoals Hyper-V. Zie De Hyper-V-rol installeren en een virtuele machine configureren voor instructies.

CentOS-installatienotities

  • Zie ook Algemene linux-installatieopmerkingen voor meer tips over het voorbereiden van Linux voor Azure.
  • De VHDX-indeling wordt niet ondersteund in Azure, alleen vaste VHD. U kunt de schijf converteren naar VHD-indeling met Hyper-V-beheer of de cmdlet convert-vhd. Als u VirtualBox gebruikt, betekent dit dat u vaste grootte selecteert in plaats van de standaard dynamisch toegewezen bij het maken van de schijf.
  • Bij het installeren van het Linux-systeem wordt aanbevolen dat u standaardpartities gebruikt in plaats van LVM (vaak de standaardinstelling voor veel installaties). Dit voorkomt conflicten met LVM-naam met gekloonde VM's, met name als een besturingssysteemschijf ooit moet worden gekoppeld aan een andere identieke VM voor probleemoplossing. LVM of RAID kan worden gebruikt op gegevensschijven.
  • Kernelondersteuning voor het koppelen van UDF-bestandssystemen is vereist. Bij het eerste opstarten in Azure wordt de inrichtingsconfiguratie doorgegeven aan de Virtuele Linux-machine via UDF-geformatteerde media die aan de gast zijn gekoppeld. De Azure Linux-agent moet het UDF-bestandssysteem kunnen koppelen om de configuratie ervan te lezen en de VM in te richten.
  • Linux-kernelversies lager dan 2.6.37 bieden geen ondersteuning voor NUMA op Hyper-V met grotere VM-grootten. Dit probleem heeft voornamelijk invloed op oudere distributies met behulp van de upstream Red Hat 2.6.32-kernel en is opgelost in RHEL 6.6 (kernel-2.6.32-504). Systemen met aangepaste kernels die ouder zijn dan 2.6.37 of RHEL-kernels ouder dan 2.6.32-504 moeten de opstartparameter numa=off instellen op de kernel-opdrachtregel in grub.conf. Zie Red Hat KB 436883 voor meer informatie.
  • Configureer geen wisselpartitie op de besturingssysteemschijf. Meer informatie hierover vindt u in de onderstaande stappen.
  • Alle VHD's in Azure moeten een virtuele grootte hebben die is afgestemd op 1 MB. Bij het converteren van een onbewerkte schijf naar VHD moet u ervoor zorgen dat de onbewerkte schijfgrootte een veelvoud van 1 MB is voordat deze wordt geconverteerd. Zie Linux-installatieopmerkingen voor meer informatie.

CentOS 6.x

  1. Selecteer in Hyper-V-beheer de virtuele machine.

  2. Klik op Verbinding maken om een consolevenster voor de virtuele machine te openen.

  3. In CentOS 6 kan NetworkManager de Azure Linux-agent verstoren. Verwijder dit pakket door de volgende opdracht uit te voeren:

    sudo rpm -e --nodeps NetworkManager
    
  4. Maak of bewerk het bestand /etc/sysconfig/network en voeg de volgende tekst toe:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Maak of bewerk het bestand /etc/sysconfig/network-scripts/ifcfg-eth0 en voeg de volgende tekst toe:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Wijzig udev-regels om te voorkomen dat statische regels worden gegenereerd voor de Ethernet-interface(s). Deze regels kunnen problemen veroorzaken bij het klonen van een virtuele machine in Microsoft Azure of 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. Zorg ervoor dat de netwerkservice bij het opstarten wordt gestart door de volgende opdracht uit te voeren:

    sudo chkconfig network on
    
  8. Als u de OpenLogic-spiegels wilt gebruiken die worden gehost in de Azure-datacenters, vervangt u het /etc/yum.repos.d/CentOS-Base.repo bestand door de volgende opslagplaatsen. Hiermee wordt ook de opslagplaats [openlogic] toegevoegd die aanvullende pakketten bevat, zoals de Azure Linux-agent:

    [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
    

    Notitie

    In de rest van deze handleiding wordt ervan uitgegaan dat u ten minste de [openlogic] opslagplaats gebruikt, die wordt gebruikt om de Onderstaande Azure Linux-agent te installeren.

  9. Voeg de volgende regel toe aan /etc/yum.conf:

     http_caching=packages
    
  10. Voer de volgende opdracht uit om de huidige yum-metagegevens te wissen en het systeem bij te werken met de nieuwste pakketten:

    yum clean all
    

    Tenzij u een installatiekopieën voor een oudere versie van CentOS maakt, is het raadzaam om alle pakketten bij te werken naar de nieuwste versie:

    sudo yum -y update
    

    Mogelijk is opnieuw opstarten vereist na het uitvoeren van deze opdracht.

  11. (Optioneel) Installeer de stuurprogramma's voor de Linux Integration Services (LIS).

    Belangrijk

    De stap is vereist voor CentOS 6.3 en eerder, en optioneel voor latere versies.

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

    U kunt ook de handmatige installatie-instructies volgen op de LIS-downloadpagina om de RPM op uw VM te installeren.

  12. Installeer de Azure Linux-agent en afhankelijkheden. Waagent-service starten en inschakelen:

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

    Het WALinuxAgent-pakket verwijdert de NetworkManager- en NetworkManager-kabouterpakketten als ze nog niet zijn verwijderd, zoals beschreven in stap 3.

  13. Wijzig de kernel-opstartlijn in uw grub-configuratie om extra kernelparameters voor Azure op te nemen. Hiervoor opent /boot/grub/menu.lst u een teksteditor en zorgt u ervoor dat de standaardkernel de volgende parameters bevat:

    console=ttyS0 earlyprintk=ttyS0 rootdelay=300
    

    Dit zorgt er ook voor dat alle consoleberichten worden verzonden naar de eerste seriële poort, die Ondersteuning van Azure kan helpen bij foutopsporingsproblemen.

    Naast het bovenstaande is het raadzaam om de volgende parameters te verwijderen :

    rhgb quiet crashkernel=auto
    

    Grafisch en stil opstarten is niet handig in een cloudomgeving waarin alle logboeken naar de seriële poort moeten worden verzonden. De crashkernel optie kan indien gewenst worden geconfigureerd, maar houd er rekening mee dat deze parameter de hoeveelheid beschikbaar geheugen in de VIRTUELE machine met 128 MB of meer vermindert. Dit kan problematisch zijn voor de kleinere VM-grootten.

    Belangrijk

    CentOS 6.5 en eerder moet ook de kernelparameter numa=offinstellen. Zie Red Hat KB 436883.

  14. Zorg ervoor dat de SSH-server is geïnstalleerd en geconfigureerd om te starten tijdens het opstarten. Dit is meestal de standaardinstelling.

  15. Maak geen wisselruimte op de besturingssysteemschijf.

    De Azure Linux-agent kan automatisch wisselruimte configureren met behulp van de lokale resourceschijf die is gekoppeld aan de VIRTUELE machine na inrichting in Azure. Houd er rekening mee dat de lokale resourceschijf een tijdelijke schijf is en mogelijk wordt geleegd wanneer de vm wordt gedeprovisioneerd. Nadat u de Azure Linux-agent hebt geïnstalleerd (zie de vorige stap), wijzigt u de volgende parameters op /etc/waagent.conf de juiste manier:

    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. Voer de volgende opdrachten uit om de inrichting van de virtuele machine ongedaan te maken en deze voor te bereiden op inrichting in Azure:

    sudo waagent -force -deprovision+user
    export HISTSIZE=0
    logout
    
  17. Klik op Actie -> Afsluiten in Hyper-V-beheer. Uw Linux-VHD is nu klaar om te worden geüpload naar Azure.

CentOS 7.0+

Wijzigingen in CentOS 7 (en soortgelijke derivaten)

Het voorbereiden van een virtuele CentOS 7-machine voor Azure is vergelijkbaar met CentOS 6, maar er zijn verschillende belangrijke verschillen die u moet noteren:

  • Het NetworkManager-pakket conflicteert niet meer met de Azure Linux-agent. Dit pakket is standaard geïnstalleerd en we raden u aan het pakket niet te verwijderen.
  • GRUB2 wordt nu gebruikt als de standaard bootloader, dus de procedure voor het bewerken van kernelparameters is gewijzigd (zie hieronder).
  • XFS is nu het standaardbestandssysteem. Het ext4-bestandssysteem kan desgewenst nog steeds worden gebruikt.

Configuratiestappen

  1. Selecteer in Hyper-V-beheer de virtuele machine.

  2. Klik op Verbinding maken om een consolevenster voor de virtuele machine te openen.

  3. Maak of bewerk het bestand /etc/sysconfig/network en voeg de volgende tekst toe:

     NETWORKING=yes
     HOSTNAME=localhost.localdomain
    
  4. Maak of bewerk het bestand /etc/sysconfig/network-scripts/ifcfg-eth0 en voeg de volgende tekst toe:

     DEVICE=eth0
     ONBOOT=yes
     BOOTPROTO=dhcp
     TYPE=Ethernet
     USERCTL=no
     PEERDNS=yes
     IPV6INIT=no
     NM_CONTROLLED=no
    
  5. Wijzig udev-regels om te voorkomen dat statische regels worden gegenereerd voor de Ethernet-interface(s). Deze regels kunnen problemen veroorzaken bij het klonen van een virtuele machine in Microsoft Azure of Hyper-V:

     sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    
  6. Als u de OpenLogic-spiegels wilt gebruiken die worden gehost in de Azure-datacenters, vervangt u het /etc/yum.repos.d/CentOS-Base.repo bestand door de volgende opslagplaatsen. Hiermee voegt u ook de opslagplaats [openlogic] toe die pakketten bevat voor de Azure Linux-agent:

    [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
    

    Notitie

    In de rest van deze handleiding wordt ervan uitgegaan dat u ten minste de [openlogic] opslagplaats gebruikt, die wordt gebruikt om de Onderstaande Azure Linux-agent te installeren.

  7. Voer de volgende opdracht uit om de huidige yum-metagegevens te wissen en eventuele updates te installeren:

     sudo yum clean all
    

    Tenzij u een installatiekopieën voor een oudere versie van CentOS maakt, is het raadzaam om alle pakketten bij te werken naar de nieuwste versie:

     sudo yum -y update
    

    Een herstart is mogelijk vereist na het uitvoeren van deze opdracht.

  8. Wijzig de kernel-opstartlijn in uw grub-configuratie om extra kernelparameters voor Azure op te nemen. Hiervoor opent /etc/default/grub u de parameter in een teksteditor en bewerkt u GRUB_CMDLINE_LINUX de parameter, bijvoorbeeld:

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

    Dit zorgt er ook voor dat alle consoleberichten worden verzonden naar de eerste seriële poort, die Ondersteuning van Azure kan helpen bij foutopsporingsproblemen. Ook worden de nieuwe CentOS 7-naamconventies voor NIC's uitgeschakeld. Bovendien is het raadzaam om de volgende parameters te verwijderen :

     rhgb quiet crashkernel=auto
    

    Grafisch en stil opstarten is niet handig in een cloudomgeving waarin alle logboeken naar de seriële poort moeten worden verzonden. De crashkernel optie kan indien gewenst worden geconfigureerd, maar houd er rekening mee dat deze parameter de hoeveelheid beschikbaar geheugen in de VIRTUELE machine met 128 MB of meer vermindert, wat mogelijk problematisch is voor de kleinere VM-grootten.

  9. Zodra u klaar bent met bewerken /etc/default/grub per bovenstaande, voert u de volgende opdracht uit om de grub-configuratie opnieuw te bouwen:

     sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  10. Als u de installatiekopieën bouwt vanuit VMware, VirtualBox of KVM: Zorg ervoor dat de Hyper-V-stuurprogramma's zijn opgenomen in de initramfs:

    Bewerken /etc/dracut.conf, inhoud toevoegen:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Bouw de initramfs opnieuw:

    sudo dracut -f -v
    
  11. Installeer de Azure Linux-agent en afhankelijkheden voor Azure VM-extensies:

    sudo yum install python-pyasn1 WALinuxAgent
    sudo systemctl enable waagent
    
  12. Cloud-init installeren om de inrichting af te handelen

    yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
    # Configure waagent for cloud-init
    sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=y/g' /etc/waagent.conf
    sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /etc/waagent.conf
    
    
    echo "Adding mounts and disk_setup to init stage"
    sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
    sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
    sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
    sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
    
    echo "Allow only Azure datasource, disable fetching network setting via IMDS"
    cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
    datasource_list: [ Azure ]
    datasource:
        Azure:
            apply_network_config: False
    EOF
    
    if [[ -f /mnt/resource/swapfile ]]; then
    echo Removing swapfile - RHEL uses a swapfile by default
    swapoff /mnt/resource/swapfile
    rm /mnt/resource/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. Wisselconfiguratie Maak geen wisselruimte op de besturingssysteemschijf.

    Voorheen werd de Azure Linux-agent gebruikt om wisselruimte automatisch te configureren met behulp van de lokale resourceschijf die is gekoppeld aan de virtuele machine nadat de virtuele machine is ingericht in Azure. Dit wordt nu echter verwerkt door cloud-init, u mag de Linux-agent niet gebruiken om de resourceschijf te formatteren om het wisselbestand te maken, de volgende parameters op /etc/waagent.conf de juiste manier wijzigen:

    sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
    sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
    

    Als u koppelen, formatteren en wisselen wilt maken, kunt u het volgende doen:

    • Geef dit door als een cloud-init-configuratie telkens wanneer u een VIRTUELE machine maakt

    • Gebruik een cloud-init-instructie die is gebakken in de installatiekopieën die dit doen telkens wanneer de VIRTUELE machine wordt gemaakt:

      echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf	
      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. Voer de volgende opdrachten uit om de inrichting van de virtuele machine ongedaan te maken en deze voor te bereiden voor inrichting in Azure:

    Opmerking: als u een specifieke virtuele machine migreert en geen gegeneraliseerde installatiekopieën wilt maken, slaat u de inrichtingsstap over

    # sudo rm -f /var/log/waagent.log
    # sudo cloud-init clean
    # waagent -force -deprovision+user
    # rm -f ~/.bash_history
    # export HISTSIZE=0
    # logout
    
  15. Klik op Actie -> Afsluiten in Hyper-V-beheer. Uw Linux-VHD is nu klaar om te worden geüpload naar Azure.

Volgende stappen

U bent nu klaar om de virtuele harde schijf van CentOS Linux te gebruiken om nieuwe virtuele machines in Azure te maken. Als dit de eerste keer is dat u het VHD-bestand uploadt naar Azure, raadpleegt u Een Virtuele Linux-machine maken op basis van een aangepaste schijf.