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. Moduł jądra vfat musi być włączony w jądrze

  4. Maksymalny rozmiar dysku VHD wynosi 1023 GB.

  5. Podczas instalowania systemu Linux zaleca się 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.

  6. 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ą.

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

  8. 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.

  9. 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.

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

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

Uwaga

(Cloud-init >= 21.2 usuwa wymaganie udf. Jednak bez włączonego modułu udf usługa cdrom nie będzie instalować podczas aprowizacji uniemożliwiającej stosowanie danych niestandardowych. Obejściem tego problemu jest zastosowanie niestandardowych danych przy użyciu danych użytkownika, jednak w przeciwieństwie do niestandardowych danych użytkownika nie jest szyfrowane. https://cloudinit.readthedocs.io/en/latest/topics/format.html

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:

    sudo 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.

    sudo 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.

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

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

    Ewentualnie, jeśli wersje qemu są wcześniejsze niż 2.6, usuń force_size opcję .

    sudo qemu-img convert -f raw -o subformat=fixed -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" i "vfat" są włączone. Wyłączenie modułu UDF spowoduje niepowodzenie aprowizacji. Wyłączenie modułu VFAT spowoduje zarówno błędy aprowizacji, jak i rozruchu. Cloud-init >= 21.2 może aprowizować maszyny wirtualne bez konieczności stosowania funkcji UDF, jeśli: 1) maszyna wirtualna została utworzona przy użyciu kluczy publicznych SSH, a nie hasła i 2) nie podano żadnych danych niestandardowych.

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 initramfs , korzystając z instrukcji dracut lub mkinitramfs.

    Initramfs

    sudo cd /boot
    sudo cp initramfs-<kernel-version>.img <kernel-version>.img.bak 
    sudo dracut -f -v initramfs-<kernel-version>.img <kernel-version> --add-drivers "hv_vmbus hv_netvsc hv_storvsc"
    sudo grub-mkconfig -o /boot/grub/grub.cfg 
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg 
    

    Initrd

    sudo cd /boot
    sudo cp initrd.img-<kernel-version>  initrd.img-<kernel-version>.bak
    sudo mkinitramfs -o initrd.img-<kernel-version> <kernel-version>  --with=hv_vmbus,hv_netvsc,hv_storvsc
    sudo update-grub 
    
  4. Upewnij się, że serwer SSH jest zainstalowany i skonfigurowany do uruchamiania w czasie rozruchu. Ta konfiguracja jest zwykle domyślna.

  5. 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.

    Uwaga

    Upewnij się, że moduły "udf" i "vfat" są włączone. Blocklisting lub usunięcie modułu udf spowoduje niepowodzenie aprowizacji. Blocklisting lub usunięcie modułu vfat spowoduje zarówno błędy aprowizacji, jak i rozruchu. (_Cloud-init >= 21.2 usuwa wymaganie udf. Przeczytaj więcej szczegółów w dokumencie)

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

    Red Hat/Centos

    sudo yum install -y WALinuxAgent 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
    
  6. Zamiana: nie twórz miejsca wymiany na dysku systemu operacyjnego.

    Agent systemu Linux platformy Azure lub usługa Cloud-init może służyć do konfigurowania miejsca wymiany przy użyciu dysku zasobów lokalnych. Ten dysk zasobów jest dołączony 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. W poniższych blokach pokazano, jak skonfigurować tę zamianę.

    Agent systemu Linux platformy Azure zmodyfikuj następujące parametry w pliku /etc/waagent.conf

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: Set this to your desired size.
    

    Cloud-init Konfigurowanie pakietu cloud-init w celu obsługi aprowizacji:

    sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-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
    

    Skonfiguruj narzędzie Cloud-init do utworzenia zamiany.

    Aby sformatować i utworzyć zamianę, dostępne są 2 opcje:

    1. Przekaż to 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 pieczonej na obrazie, która zrobi to za każdym razem, gdy maszyna wirtualna zostanie utworzona.

    Utwórz plik cfg, aby skonfigurować zamianę przy użyciu narzędzia Cloud-init:

    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/resource"]
      - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
    EOF
    
  7. Skonfiguruj inicjowanie obsługi administracyjnej w chmurze:

    1. Skonfiguruj usługę waagent dla pakietu cloud-init:

      sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/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
      

      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:

      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
      
    3. Konfigurowanie źródła danych platformy Azure:

      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
      
    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
      
  8. Konfigurowanie rejestrowania cloud-init:

    sudo echo "Add console log file"
    sudo 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
    
  9. 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
    sudo  -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    

    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ć.

  10. 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.