Przygotowywanie maszyny wirtualnej SLES lub openSUSE Leap dla platformy Azure

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

W niektórych przypadkach możesz chcieć użyć dostosowanego systemu SUSE Linux Enterprise Server (SLES) lub openSUSE Leap Linux virtual machines (maszyn wirtualnych) w środowisku platformy Azure i mieć możliwość kompilowania tych typów maszyn wirtualnych za pomocą automatyzacji. W tym artykule przedstawiono sposób tworzenia i przekazywania niestandardowego wirtualnego dysku twardego (VHD) platformy Azure zawierającego system operacyjny SUSE Linux.

Wymagania wstępne

W tym artykule założono, że na wirtualnym dysku twardym zainstalowano już system operacyjny SLES lub openSUSE Leap Linux. Istnieje wiele narzędzi do tworzenia plików vhd. Można na przykład użyć rozwiązania wirtualizacji, takiego jak funkcja Hyper-V. Aby uzyskać instrukcje, zobacz Instalowanie funkcji Hyper-V i tworzenie maszyny wirtualnej.

Uwagi dotyczące instalacji programu SLES/openSUSE Leap

  • Aby uzyskać więcej wskazówek dotyczących przygotowywania obrazów systemu Linux dla platformy Azure, zobacz Ogólne informacje o instalacji systemu Linux.
  • Platforma Azure nie obsługuje plików obrazu dysku twardego systemu Windows (vhdx). Tylko pliki VHD (vhd) są obsługiwane poza maszynami wirtualnymi. Dysk można przekonwertować na format VHD przy użyciu Menedżera funkcji Hyper-V lub Convert-VHD polecenia cmdlet.
  • pomoc techniczna platformy Azure s Gen1 (rozruch systemu BIOS) i maszyny wirtualne Gen2 (rozruch UEFI).
  • Moduł jądra tabeli alokacji plików wirtualnych (VFAT) musi być włączony w jądrze.
  • Nie konfiguruj partycji wymiany na dysku systemu operacyjnego. Agenta systemu Linux można skonfigurować tak, aby utworzyć plik wymiany na dysku zasobów tymczasowych. Kroki opisane w dalszej części tego artykułu zawierają więcej informacji na temat konfigurowania przestrzeni wymiany.
  • Wszystkie wirtualne dyski twarde na platformie Azure muszą mieć rozmiar wirtualny wyrównany do 1 MB. Podczas konwertowania z dysku pierwotnego na dysk VHD upewnij się, że rozmiar dysku pierwotnego to wielokrotność 1 MB przed konwersją. Aby uzyskać więcej informacji, zobacz Ogólne informacje o instalacji systemu Linux.

Uwaga

Program Cloud-init w wersji 21.2 lub nowszej usuwa wymaganie funkcji zdefiniowanej przez użytkownika (UDF). Jednak bez włączonego modułu udf dysk CD-ROM nie zostanie zamontowany podczas aprowizacji, co uniemożliwia stosowanie niestandardowych danych. Obejściem jest zastosowanie danych użytkownika. Jednak w przeciwieństwie do danych niestandardowych dane użytkownika nie są szyfrowane. Aby uzyskać więcej informacji, zobacz Formaty danych użytkownika w dokumentacji cloud-init.

Korzystanie z programu SUSE Studio

Program SUSE Studio może łatwo tworzyć obrazy SLES i otwierać obrazy leap dla platformy Azure i funkcji Hyper-V oraz zarządzać nimi. SUSE Studio to zalecane podejście do dostosowywania własnych obrazów SLES i openSUSE Leap images.

Alternatywą dla tworzenia własnego wirtualnego dysku twardego jest również opublikowanie obrazów BYOS (bring your own subscription) dla systemu SLES w magazynie maszyn wirtualnych.

Przygotowywanie usług SLES na platformę Azure

  1. W razie potrzeby skonfiguruj moduły platformy Azure i funkcji Hyper-V.

    Jeśli funkcja hypervisor oprogramowania nie jest funkcją Hyper-V, inne moduły należy dodać do początkowego dysku RAM (initramfs) w celu pomyślnego rozruchu na platformie Azure.

    Edytuj plik /etc/dracut.conf i dodaj następujący wiersz do pliku:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Uruchom polecenie , dracut aby ponownie skompilować plik initramfs:

    sudo dracut --verbose --force
    
  2. Skonfiguruj konsolę szeregową.

    Aby pomyślnie pracować z konsolą szeregową, należy skonfigurować kilka zmiennych w pliku /etc/defaults/grub i ponownie utworzyć grub na serwerze:

    # Add console=ttyS0 and earlyprintk=ttS0 to the variable.
    # Remove "splash=silent" and "quiet" options.
    GRUB_CMDLINE_LINUX_DEFAULT="audit=1 no-scroll fbcon=scrollback:0 mitigations=auto security=apparmor crashkernel=228M,high crashkernel=72M,low console=ttyS0 earlyprintk=ttyS0"
    
    # Add "console serial" to GRUB_TERMINAL.
    GRUB_TERMINAL="console serial"
    
    # Set the GRUB_SERIAL_COMMAND variable.
    
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    
    /usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg
    
  3. Zarejestruj system SUSE Linux Enterprise, aby umożliwić mu pobieranie aktualizacji i instalowanie pakietów.

  4. Zaktualizuj system przy użyciu najnowszych poprawek:

    sudo zypper update
    
  5. Zainstaluj agenta maszyny wirtualnej z systemem Linux platformy Azure (waagent) i pakietu cloud-init:

    sudo SUSEConnect -p sle-module-public-cloud/15.2/x86_64  (SLES 15 SP2)
    sudo zypper refresh
    sudo zypper install python-azure-agent
    sudo zypper install cloud-init
    
  6. Włącz waagent i cloud-init, aby rozpocząć rozruch:

    sudo systemctl enable  waagent
    sudo systemctl enable cloud-init-local.service
    sudo systemctl enable cloud-init.service
    sudo systemctl enable cloud-config.service
    sudo systemctl enable cloud-final.service
    sudo systemctl daemon-reload
    sudo cloud-init clean
    
  7. Zaktualizuj konfigurację pakietu cloud-init:

    cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg
    datasource_list: [ Azure ]
    datasource:
        Azure:
            apply_network_config: False
    
    EOF
    
    sudo cat <<EOF | sudo tee  /etc/cloud/cloud.cfg.d/05_logging.cfg
    # 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
    
    # Make sure mounts and disk_setup are in the init stage:
    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
    
  8. Jeśli chcesz zainstalować, sformatować i utworzyć partycję wymiany, jedną z opcji jest przekazanie konfiguracji cloud-init za każdym razem, gdy tworzysz maszynę wirtualną.

    Inną opcją jest użycie dyrektywy cloud-init na obrazie w celu skonfigurowania przestrzeni wymiany za każdym razem, gdy maszyna wirtualna zostanie utworzona:

    cat  <<EOF | sudo tee -a /etc/systemd/system.conf
    'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"'
    EOF
    
    cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg
    #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
    
  9. Wcześniej agent systemu Linux platformy Azure był używany do automatycznego konfigurowania miejsca wymiany przy użyciu lokalnego dysku zasobów dołączonego do maszyny wirtualnej po aprowizacji maszyny wirtualnej na platformie Azure. Ponieważ pakiet cloud-init obsługuje teraz ten krok, nie można użyć agenta systemu Linux platformy Azure do sformatowania dysku zasobu ani utworzenia pliku wymiany. Użyj tych poleceń, aby odpowiednio zmodyfikować plik /etc/waagent.conf :

    sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=auto/g' /etc/waagent.conf
    sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/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
    

    Uwaga

    Jeśli używasz wersji cloud-init starszej niż 21.2, upewnij się, że udf moduł jest włączony. Usunięcie lub wyłączenie spowoduje niepowodzenie aprowizacji lub rozruchu. Program Cloud-init w wersji 21.2 lub nowszej usuwa wymaganie funkcji zdefiniowanej przez użytkownika.

  10. Upewnij się, że plik /etc/fstab odwołuje się do dysku przy użyciu jego identyfikatora UUID (by-uuid).

  11. Usuń reguły ujścia i pliki konfiguracji karty sieciowej, aby uniknąć generowania reguł statycznych dla interfejsów Ethernet. Te reguły mogą powodować problemy podczas klonowania maszyny wirtualnej na platformie Microsoft Azure lub funkcji Hyper-V.

    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    sudo rm -f /etc/udev/rules.d/85-persistent-net-cloud-init.rules
    sudo rm -f /etc/sysconfig/network/ifcfg-eth*
    
  12. Zalecamy edycję pliku /etc/sysconfig/network/dhcp i zmianę parametru DHCLIENT_SET_HOSTNAME na następujący:

    DHCLIENT_SET_HOSTNAME="no"
    
  13. W pliku /etc/sudoers oznacz jako komentarz lub usuń następujące wiersze, jeśli istnieją:

    Defaults targetpw   # Ask for the password of the target user i.e. root
    ALL    ALL=(ALL) ALL   # WARNING! Only use this setting together with 'Defaults targetpw'!
    
  14. Upewnij się, że serwer Secure Shell (SSH) jest zainstalowany i skonfigurowany do uruchamiania w czasie rozruchu:

    sudo systemctl enable sshd
    
  15. Wyczyść etap cloud-init:

    sudo cloud-init clean --seed --logs
    
  16. Uruchom następujące polecenia, aby usunąć aprowizację maszyny wirtualnej i przygotować ją do aprowizacji na platformie Azure.

    Jeśli migrujesz określoną maszynę wirtualną i nie chcesz tworzyć uogólnionego obrazu, pomiń krok anulowania aprowizacji.

    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo export HISTSIZE=0
    sudo rm -f ~/.bash_history
    

Przygotowywanie programu openSUSE 15.2 lub nowszego

  1. W środkowym okienku Menedżera funkcji Hyper-V wybierz maszynę wirtualną.

  2. Wybierz Połączenie, aby otworzyć okno dla maszyny wirtualnej.

  3. W terminalu uruchom polecenie zypper lr. Jeśli to polecenie zwraca dane wyjściowe podobne do poniższego przykładu, repozytoria są skonfigurowane zgodnie z oczekiwaniami i nie są konieczne żadne korekty. (Numery wersji mogą się różnić).

    # Alias Nazwisko Włączony Refresh
    1 Cloud:Tools_15.2 Cloud:Tools_15.2 Tak Tak
    2 openSUSE_15.2_OSS openSUSE_15.2_OSS Tak Tak
    3 openSUSE_15.2_Aktualizacje openSUSE_15.2_Aktualizacje Tak Tak

    Jeśli polecenie zwraca wartość "Brak zdefiniowanych repozytoriów", użyj następujących poleceń, aby dodać te repozytoria:

    sudo zypper ar -f http://download.opensuse.org/repositories/Cloud:Tools/openSUSE_15.2 Cloud:Tools_15.2
    sudo zypper ar -f https://download.opensuse.org/distribution/15.2/repo/oss openSUSE_15.2_OSS
    sudo zypper ar -f http://download.opensuse.org/update/15.2 openSUSE_15.2_Updates
    

    Następnie możesz sprawdzić, czy repozytoria zostały dodane, uruchamiając ponownie polecenie zypper lr . Jeśli jedno z odpowiednich repozytoriów aktualizacji nie jest włączone, włącz je za pomocą następującego polecenia:

    sudo zypper mr -e [NUMBER OF REPOSITORY]
    
  4. Zaktualizuj jądro do najnowszej dostępnej wersji:

    sudo zypper up kernel-default
    

    Możesz też zaktualizować system operacyjny przy użyciu wszystkich najnowszych poprawek:

    sudo zypper update
    
  5. Zainstaluj agenta systemu Linux platformy Azure:

    sudo zypper install WALinuxAgent
    
  6. Zmodyfikuj wiersz rozruchu jądra w konfiguracji GRUB, aby uwzględnić inne parametry jądra dla platformy Azure. W tym celu otwórz plik /boot/grub/menu.lst w edytorze tekstów i upewnij się, że domyślne jądro zawiera następujące parametry:

     console=ttyS0 earlyprintk=ttyS0
    

    Ta opcja gwarantuje, że wszystkie komunikaty konsoli są wysyłane do pierwszego portu szeregowego, co może pomóc pomoc techniczna platformy Azure w przypadku problemów z debugowaniem. Ponadto usuń następujące parametry z wiersza rozruchu jądra, jeśli istnieją:

     libata.atapi_enabled=0 reserve=0x1f0,0x8
    
  7. Zalecamy edycję pliku /etc/sysconfig/network/dhcp i zmianę parametru DHCLIENT_SET_HOSTNAME na następujące ustawienie:

     DHCLIENT_SET_HOSTNAME="no"
    
  8. W pliku /etc/sudoers oznacz jako komentarz lub usuń następujące wiersze, jeśli istnieją. Jest to ważny krok.

    Defaults targetpw   # ask for the password of the target user i.e. root
    ALL    ALL=(ALL) ALL   # WARNING! Only use this together with 'Defaults targetpw'!
    
  9. Upewnij się, że serwer SSH jest zainstalowany i skonfigurowany do uruchamiania w czasie rozruchu.

  10. 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 zostanie opróżniony po anulowaniu aprowizacji maszyny wirtualnej.

    Po zainstalowaniu agenta systemu Linux platformy Azure zmodyfikuj parametry w pliku /etc/waagent.conf w następujący sposób:

    ResourceDisk.Format=n
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=n
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set the size to whatever you need it to be.
    
  11. Upewnij się, że agent systemu Linux platformy Azure działa podczas uruchamiania:

    sudo systemctl enable waagent.service
    
  12. Uruchom następujące polecenia, aby usunąć aprowizację maszyny wirtualnej i przygotować ją do aprowizacji na platformie Azure.

    Jeśli migrujesz określoną maszynę wirtualną i nie chcesz tworzyć uogólnionego obrazu, pomiń krok anulowania aprowizacji.

        sudo rm -f ~/.bash_history # Remove current user history
        sudo rm -rf /var/lib/waagent/
        sudo rm -f /var/log/waagent.log
        sudo waagent -force -deprovision+user
        sudo rm -f ~/.bash_history # Remove root user history
        sudo export HISTSIZE=0
    
  13. Wybierz pozycję Akcja>Zamknij w Menedżerze funkcji Hyper-V.

Następne kroki

Teraz możesz używać wirtualnego dysku twardego SUSE Linux do tworzenia nowych maszyn wirtualnych na platformie Azure. Jeśli po raz pierwszy przekazujesz plik vhd na platformę Azure, zobacz Tworzenie maszyny wirtualnej z systemem Linux na podstawie dysku niestandardowego.