Informacje dotyczące dystrybucji obsługiwanych przez społeczność i nieobsługiwanych

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy ✔️ skalowania

Umowa SLA platformy Azure dotyczy maszyn wirtualnych z systemem operacyjnym Linux tylko wtedy, gdy jest używana jedna z zatwierdzonych dystrybucji . W przypadku tych zatwierdzonych dystrybucji wstępnie skonfigurowane obrazy systemu Linux są udostępniane w Azure Marketplace.

Wszystkie inne, nie Azure Marketplace, dystrybucje działające na platformie Azure mają szereg wymagań wstępnych. Ten artykuł nie może być kompleksowy, ponieważ każda dystrybucja jest inna. Nawet jeśli spełniasz wszystkie poniższe kryteria, może być konieczne znaczne dostosowanie systemu Linux, aby działał prawidłowo.

Ten artykuł koncentruje się na ogólnych wskazówkach dotyczących uruchamiania dystrybucji systemu Linux na platformie Azure.

Ogólne uwagi dotyczące instalacji systemu Linux

  1. Format wirtualnego dysku twardego funkcji Hyper-V (VHDX) nie jest obsługiwany na platformie Azure, tylko stały dysk VHD. Dysk można przekonwertować na format VHD przy użyciu Menedżera funkcji Hyper-V lub polecenia cmdlet Convert-VHD . Jeśli używasz usługi VirtualBox, wybierz pozycję Stały rozmiar zamiast domyślnego (dynamicznie przydzielonego) podczas tworzenia dysku.

  2. Platforma Azure obsługuje maszyny wirtualne Gen1 (rozruch systemu BIOS) & Gen2 (rozruch UEFI).

  3. Maksymalny rozmiar dysku VHD wynosi 1023 GB.

  4. Podczas instalowania systemu Linux zalecamy używanie partycji standardowych, a nie Menedżera woluminów logicznych (LVM), który jest domyślny dla wielu instalacji. Użycie partycji standardowych pozwala uniknąć konfliktów nazw LVM z sklonowanymi maszynami wirtualnymi, szczególnie jeśli dysk systemu operacyjnego jest kiedykolwiek dołączony do innej identycznej maszyny wirtualnej na potrzeby rozwiązywania problemów. LvM lub RAID mogą być używane na dyskach danych.

  5. Obsługa jądra na potrzeby instalowania systemów plików UDF jest wymagana. Podczas pierwszego rozruchu na platformie Azure konfiguracja aprowizacji jest przekazywana do maszyny wirtualnej z systemem Linux przy użyciu nośnika sformatowanego przez użytkownika dołączonego do gościa. Agent systemu Linux platformy Azure musi zainstalować system plików UDF, aby odczytać jego konfigurację i aprowizować maszynę wirtualną.

  6. Wersje jądra systemu Linux wcześniejsze niż 2.6.37 nie obsługują NUMA w funkcji Hyper-V o większych rozmiarach maszyn wirtualnych. Ten problem dotyczy głównie starszych dystrybucji przy użyciu nadrzędnego jądra Red Hat 2.6.32 i został rozwiązany w systemie Red Hat Enterprise Linux (RHEL) 6.6 (jądro-2.6.32-504). Systemy z niestandardowymi jądrami starszymi niż 2.6.37 lub jądrami opartymi na systemie RHEL starszymi niż 2.6.32-504 muszą ustawić parametr numa=off rozruchowy w wierszu polecenia jądra w pliku grub.conf. Aby uzyskać więcej informacji, zobacz Red Hat KB 436883.

  7. Nie konfiguruj partycji wymiany na dysku systemu operacyjnego. Agenta systemu Linux można skonfigurować do utworzenia pliku wymiany na tymczasowym dysku zasobów, zgodnie z opisem w poniższych krokach.

  8. Wszystkie wirtualne dyski twarde na platformie Azure muszą mieć rozmiar wirtualny wyrównany do 1 MB (1024 × 1024 bajtów). Podczas konwertowania z dysku pierwotnego na dysk VHD należy upewnić się, że rozmiar dysku pierwotnego jest wielokrotność 1 MB przed konwersją, zgodnie z opisem w poniższych krokach.

  9. Korzystaj z najnowszej wersji dystrybucji, pakietów i oprogramowania.

  10. Usuwanie użytkowników i kont systemowych, kluczy publicznych, poufnych danych, niepotrzebnego oprogramowania i aplikacji.

Instalowanie modułów jądra bez funkcji Hyper-V

Platforma Azure działa na funkcji hypervisor funkcji Hyper-V, więc system Linux wymaga uruchamiania niektórych modułów jądra na platformie Azure. Jeśli masz maszynę wirtualną utworzoną poza funkcją Hyper-V, instalatory systemu Linux mogą nie uwzględniać sterowników funkcji Hyper-V w początkowym dysku ramdisk (initrd lub initramfs), chyba że maszyna wirtualna wykryje, że jest uruchomiona w środowisku funkcji Hyper-V. W przypadku korzystania z innego systemu wirtualizacji (takiego jak VirtualBox, KVM itd.) w celu przygotowania obrazu systemu Linux może być konieczne ponowne skompilowanie initrd, aby co najmniej moduły hv_vmbus i hv_storvsc jądra są dostępne na początkowym dysku ramdisk. Ten znany problem dotyczy systemów opartych na nadrzędnej dystrybucji red hat, a być może innych.

Mechanizm odbudowy obrazu initrd lub initramfs może się różnić w zależności od rozkładu. Zapoznaj się z dokumentacją dystrybucji lub pomocą techniczną dotyczącą odpowiedniej procedury. Oto jeden przykład ponownego kompilowania initrd przy użyciu mkinitrd narzędzia :

  1. Tworzenie kopii zapasowej istniejącego obrazu initrd:

    cd /boot
    sudo cp initrd-`uname -r`.img  initrd-`uname -r`.img.bak
    
  2. Skompiluj moduły initrd za pomocą modułów hv_vmbus i hv_storvsc jądra:

    sudo mkinitrd --preload=hv_storvsc --preload=hv_vmbus -v -f initrd-`uname -r`.img `uname -r`
    

Zmiana rozmiaru wirtualnych dysków twardych

Obrazy wirtualnego dysku twardego na platformie Azure muszą mieć rozmiar wirtualny wyrównany do 1 MB. Zazwyczaj wirtualne dyski twarde utworzone przy użyciu funkcji Hyper-V są poprawnie wyrównane. Jeśli wirtualny dysk twardy nie jest poprawnie wyrównany, podczas próby utworzenia obrazu z dysku VHD może zostać wyświetlony komunikat o błędzie podobny do poniższego.

The VHD http:\//\<mystorageaccount>.blob.core.windows.net/vhds/MyLinuxVM.vhd has an unsupported virtual size of 21475270656 bytes. The size must be a whole number (in MBs).

W takim przypadku zmień rozmiar maszyny wirtualnej przy użyciu konsoli Menedżera funkcji Hyper-V lub polecenia cmdlet programu PowerShell Resize-VHD . Jeśli nie korzystasz ze środowiska systemu Windows, zalecamy użycie polecenia qemu-img do konwersji (w razie potrzeby) i zmiany rozmiaru dysku VHD.

Uwaga

Istnieje znana usterka w wersjach>qemu-img =2.2.1, która powoduje niewłaściwie sformatowany dysk VHD. Problem został rozwiązany w QEMU 2.6. Zalecamy użycie qemu-img wersji 2.2.0 lub starszej albo 2.6 lub nowszej.

  1. Zmiana rozmiaru dysku VHD bezpośrednio przy użyciu narzędzi, takich jak qemu-img lub vbox-manage może spowodować, że dysk VHD jest nie do rozruchu. Zalecamy najpierw przekonwertowanie dysku VHD na obraz dysku RAW. Jeśli obraz maszyny wirtualnej został utworzony jako obraz dysku RAW (wartość domyślna dla niektórych funkcji hypervisor, takich jak KVM), możesz pominąć ten krok.

    qemu-img convert -f vpc -O raw MyLinuxVM.vhd MyLinuxVM.raw
    
  2. Oblicz wymagany rozmiar obrazu dysku, aby rozmiar wirtualny był wyrównany do 1 MB. Poniższy skrypt powłoki bash używa qemu-img info do określenia wirtualnego rozmiaru obrazu dysku, a następnie oblicza rozmiar do następnego 1 MB.

    rawdisk="MyLinuxVM.raw"
    vhddisk="MyLinuxVM.vhd"
    
    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "$rawdisk" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    
    rounded_size=$(((($size+$MB-1)/$MB)*$MB))
    
    echo "Rounded Size = $rounded_size"
    
  3. Zmień rozmiar nieprzetworzonego dysku przy użyciu $rounded_size ustawienia powyżej.

    qemu-img resize MyLinuxVM.raw $rounded_size
    
  4. Teraz przekonwertuj dysk RAW z powrotem na dysk VHD o stałym rozmiarze.

    qemu-img convert -f raw -o subformat=fixed -O vpc MyLinuxVM.raw MyLinuxVM.vhd
    

    Możesz też uwzględnić opcję z opcją qemu w wersji 2.6 lub nowszej force_size .

    qemu-img convert -f raw -o subformat=fixed,force_size -O vpc MyLinuxVM.raw MyLinuxVM.vhd
    

Wymagania jądra systemu Linux

Sterowniki usług Linux Integration Services (LIS) dla funkcji Hyper-V i platformy Azure są przekazywane bezpośrednio do nadrzędnego jądra systemu Linux. Wiele dystrybucji, które obejmują najnowszą wersję jądra systemu Linux (na przykład 3.x), mają te sterowniki już dostępne lub w inny sposób zapewniają wsteczne wersje tych sterowników z ich jądrami. Te sterowniki są stale aktualizowane w jądrze nadrzędnym przy użyciu nowych poprawek i funkcji, więc jeśli to możliwe, zalecamy uruchomienie zatwierdzonej dystrybucji , która obejmuje te poprawki i aktualizacje.

Jeśli używasz wariantu systemu Red Hat Enterprise Linux w wersji 6.0 do 6.3, musisz zainstalować najnowsze sterowniki LIS dla funkcji Hyper-V. Począwszy od RHEL 6.4+ (i pochodnych) sterowniki LIS są już dołączone do jądra i dlatego nie są potrzebne żadne dodatkowe pakiety instalacyjne.

Jeśli wymagane jest niestandardowe jądro, zalecamy użycie najnowszej wersji jądra (na przykład 3.8 lub nowszej). W przypadku dystrybucji lub dostawców, którzy utrzymują własne jądro, należy regularnie przywracać sterowniki LIS z nadrzędnego jądra do niestandardowego jądra. Nawet jeśli używasz już stosunkowo najnowszej wersji jądra, zdecydowanie zalecamy śledzenie wszelkich poprawek nadrzędnych w sterownikach LIS i backportuj je zgodnie z potrzebami. Lokalizacje plików źródłowych sterowników LIS są określone w pliku MAINTAINERS w drzewie źródłowym jądra systemu Linux:

    F:    arch/x86/include/asm/mshyperv.h
    F:    arch/x86/include/uapi/asm/hyperv.h
    F:    arch/x86/kernel/cpu/mshyperv.c
    F:    drivers/hid/hid-hyperv.c
    F:    drivers/hv/
    F:    drivers/input/serio/hyperv-keyboard.c
    F:    drivers/net/hyperv/
    F:    drivers/scsi/storvsc_drv.c
    F:    drivers/video/fbdev/hyperv_fb.c
    F:    include/linux/hyperv.h
    F:    tools/hv/

Następujące poprawki muszą być uwzględnione w jądrze. Nie można ukończyć tej listy dla wszystkich dystrybucji.

Agent platformy Azure dla systemu Linux

Agent waagentsystemu Linux platformy Azure aprowizuje maszynę wirtualną z systemem Linux na platformie Azure. Najnowszą wersję, problemy z plikami lub żądania ściągnięcia można uzyskać w repozytorium GitHub agenta systemu Linux.

  • Agent systemu Linux jest udostępniany w ramach licencji apache 2.0. Wiele dystrybucji zapewnia już pakiety RPM lub .deb dla agenta, a te pakiety można łatwo zainstalować i zaktualizować.
  • Agent systemu Linux platformy Azure wymaga języka Python w wersji 2.6 lub nowszej.
  • Agent wymaga również modułu python-pyasn1. Większość dystrybucji udostępnia ten moduł jako oddzielny pakiet do zainstalowania.
  • W niektórych przypadkach agent systemu Linux platformy Azure może nie być zgodny z rozwiązaniem NetworkManager. Wiele pakietów RPM/deb dostarczanych przez dystrybucje konfiguruje NetworkManager jako konflikt z pakietem waagent. W takich przypadkach program NetworkManager zostanie odinstalowany podczas instalowania pakietu agenta systemu Linux.
  • Agent systemu Linux platformy Azure musi być w wersji minimalnej lub nowszej.

Uwaga

Upewnij się, że moduły "udf" (cloud-init >= 21.2) i "vfat" są włączone. Zablokowanie listy modułu udf spowoduje niepowodzenie aprowizacji, a moduł vfat z listą prac spowoduje zarówno błędy aprowizacji, jak i rozruchu. Nie ma to wpływu na rozwiązanie Cloud-init < 21.2 i nie wymaga tej zmiany.

Ogólne wymagania systemowe systemu Linux

  1. Zmodyfikuj wiersz rozruchu jądra w programie GRUB lub GRUB2, aby uwzględnić następujące parametry, tak aby wszystkie komunikaty konsoli zostały wysłane do pierwszego portu szeregowego. Te komunikaty mogą pomóc pomoc techniczna platformy Azure w debugowaniu wszelkich problemów.

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

    Zalecamy również usunięcie następujących parametrów, jeśli istnieją.

    rhgb quiet crashkernel=auto
    

    Graficzny i cichy rozruch nie jest przydatny w środowisku chmury, w którym chcemy, aby wszystkie dzienniki były wysyłane do portu szeregowego. W crashkernel razie potrzeby można pozostawić tę opcję skonfigurowaną, ale należy pamiętać, że ten parametr zmniejsza ilość dostępnej pamięci na maszynie wirtualnej o co najmniej 128 MB, co może być problematyczne w przypadku mniejszych rozmiarów maszyn wirtualnych.

  2. Po zakończeniu edycji /etc/default/grub uruchom następujące polecenie, aby ponownie skompilować konfigurację grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  3. Dodaj moduły funkcji Hyper-V zarówno initrd, jak i instrukcje initramfs (Dracut).

  4. Ponowne kompilowanie initrd lub initramfs Initramfs

    cp /boot/initramfs-$(uname -r).img /boot/initramfs-[latest kernel version ].img.bak 
    dracut -f -v /boot/initramfs-[latest kernel version ].img  [depending on the version of grub] 
    grub-mkconfig -o /boot/grub/grub.cfg 
    grub2-mkconfig -o /boot/grub2/grub.cfg 
    

    Initrd

    mv /boot/[initrd kernel] /boot/[initrd kernel]-old 
    mkinitrd /boot/initrd.img-[initrd kernel]-generic /boot/[initrd kernel]-generic-old 
    update-initramfs -c -k [initrd kernel] 
    update-grub 
    
  5. Upewnij się, że serwer SSH jest zainstalowany i skonfigurowany do uruchamiania w czasie rozruchu. Ta konfiguracja jest zwykle domyślna.

  6. Zainstaluj agenta systemu Linux platformy Azure. Agent systemu Linux platformy Azure jest wymagany do aprowizowania obrazu systemu Linux na platformie Azure. Wiele dystrybucji zapewnia agenta jako pakiet RPM lub .deb (pakiet jest zazwyczaj nazywany WALinuxAgent lub walinuxagent). Agent można również zainstalować ręcznie, wykonując kroki opisane w przewodniku po agencie systemu Linux.

    Zainstaluj agenta systemu Linux platformy Azure, pakietu cloud-init i innych niezbędnych narzędzi, uruchamiając następujące polecenie:

    Redhat/Centos

    sudo yum install -y [waagent] cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Ubuntu/Debian

    sudo apt install walinuxagent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Suse

    sudo zypper install python-azure-agent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Następnie włącz agenta i pakiet cloud-init we wszystkich dystrybucjach przy użyciu:

    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  7. Nie twórz miejsca wymiany na dysku systemu operacyjnego. Agent systemu Linux platformy Azure może automatycznie skonfigurować miejsce wymiany przy użyciu lokalnego dysku zasobów dołączonego do maszyny wirtualnej po aprowizacji na platformie Azure. Dysk zasobów lokalnych jest dyskiem tymczasowym i może zostać opróżniony po anulowaniu aprowizacji maszyny wirtualnej. Po zainstalowaniu agenta systemu Linux platformy Azure zmodyfikuj następujące parametry w pliku /etc/waagent.conf zgodnie z potrzebami.

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: Set this to your desired size.
    
  8. Skonfiguruj inicjowanie obsługi administracyjnej w chmurze:

    1. Skonfiguruj usługę waagent dla pakietu cloud-init:
      sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf
      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
      
      Jeśli migrujesz określoną maszynę wirtualną i nie chcesz tworzyć uogólnionego obrazu, ustaw Provisioning.Agent=disabled go w /etc/waagent.conf konfiguracji.
    2. Konfigurowanie instalacji:
      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
      
    3. Konfigurowanie źródła danych platformy Azure:
      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
      
    4. W przypadku skonfigurowania usuń istniejący plik swapfile:
      if [[ -f /mnt/resource/swapfile ]]; then
      echo "Removing swapfile" #RHEL uses a swapfile by defaul
      swapoff /mnt/resource/swapfile
      rm /mnt/resource/swapfile -f
      fi
      
  9. Konfigurowanie rejestrowania cloud-init:

    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
    
  10. Zamień konfigurację. Nie twórz miejsca wymiany na dysku systemu operacyjnego. Wcześniej agent platformy Azure z systemem Linux automatycznie skonfigurował miejsce wymiany przy użyciu lokalnego dysku zasobów dołączonego do maszyny wirtualnej po aprowizacji maszyny wirtualnej na platformie Azure. Jednak teraz jest to obsługiwane przez cloud-init, nie można używać agenta systemu Linux do formatowania dysku zasobu tworzenia pliku wymiany, zmodyfikować następujące parametry w pliku /etc/waagent.conf odpowiednio:

    ResourceDisk.Format=n
    ResourceDisk.EnableSwap=n
    

    Jeśli chcesz zainstalować, sformatować i utworzyć zamianę, możesz: 1. Przekaż tę funkcję jako konfigurację cloud-init za każdym razem, gdy tworzysz maszynę wirtualną za pomocą polecenia customdata. Jest to zalecana metoda. 2. Użyj dyrektywy cloud-init zapiętej do obrazu, która zrobi to za każdym razem, gdy maszyna wirtualna zostanie utworzona.

           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
    
         ```
    
    
  11. Anulowanie aprowizacji.

    Przestroga

    Jeśli migrujesz określoną maszynę wirtualną i nie chcesz tworzyć uogólnionego obrazu, pomiń krok anulowania aprowizacji. Uruchomienie polecenia waagent -force -deprovision+user spowoduje, że maszyna źródłowa będzie bezużyteczna. Ten krok jest przeznaczony tylko do utworzenia uogólnionego obrazu.

    Uruchom następujące polecenia, aby usunąć aprowizę maszyny wirtualnej.

    # sudo rm -f /var/log/waagent.log
    # sudo cloud-init clean
    # waagent -force -deprovision+user
    # rm -f ~/.bash_history
    # export HISTSIZE=0
    # logout
    

    Uwaga

    W usłudze Virtualbox może zostać wyświetlony następujący błąd po uruchomieniu waagent -force -deprovision polecenia [Errno 5] Input/output error. Ten komunikat o błędzie nie jest krytyczny i można go zignorować.

  12. Zamknij maszynę wirtualną i przekaż wirtualny dysk twardy na platformę Azure.

Następne kroki

Utwórz maszynę wirtualną z systemem Linux na podstawie dysku niestandardowego za pomocą interfejsu wiersza polecenia platformy Azure.