Udostępnij za pośrednictwem


Przygotowywanie maszyny wirtualnej bazującej na systemie Red Hat dla platformy Azure

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

Z tego artykułu dowiesz się, jak przygotować maszynę wirtualną z systemem Red Hat Enterprise Linux (RHEL) do użycia na platformie Azure. Wersje systemu RHEL omówione w tym artykule to 6.X, 7.X i 8.X. Funkcje hypervisor do przygotowania, które zostały omówione w tym artykule, to funkcja Hyper-V, maszyna wirtualna oparta na jądrze (KVM) i VMware.

Aby uzyskać więcej informacji na temat wymagań kwalifikacyjnych dotyczących udziału w programie Cloud Access firmy Red Hat, zobacz witrynę internetową red hat Cloud Access i running RHEL on Azure (Uruchamianie systemu RHEL na platformie Azure). Aby uzyskać informacje na temat sposobów automatyzowania tworzenia obrazów systemu RHEL, zobacz Azure Image Builder.

Uwaga

Należy pamiętać o wersjach, które są na ich koniec życia (EOL) i nie są już obsługiwane przez Red Hat. Przekazane obrazy, które znajdują się poza EOL lub poza nią, są obsługiwane w rozsądnym zakresie nakładu pracy biznesowej. Aby uzyskać więcej informacji, zobacz Cykle życia produktu Red Hat.

Menedżer funkcji Hyper-V

W tej sekcji pokazano, jak przygotować maszynę wirtualną RHEL 6, RHEL 7 lub RHEL 8 przy użyciu Menedżera funkcji Hyper-V.

Wymagania wstępne

W tej sekcji założono, że plik ISO został już uzyskany z witryny internetowej red hat i zainstalowany obraz RHEL na wirtualnym dysku twardym (VHD). Aby uzyskać więcej informacji na temat sposobu instalowania obrazu systemu operacyjnego za pomocą Menedżera funkcji Hyper-V, zobacz Instalowanie roli funkcji Hyper-V i konfigurowanie maszyny wirtualnej.

Uwagi dotyczące instalacji systemu RHEL

  • Platforma Azure nie obsługuje formatu VHDX. pomoc techniczna platformy Azure tylko stały dysk VHD. Za pomocą Menedżera funkcji Hyper-V można przekonwertować dysk na format VHD lub użyć convert-vhd polecenia cmdlet . Jeśli używasz usługi VirtualBox, wybierz opcję Stały rozmiar , a nie domyślną opcję dynamicznie przydzieloną podczas tworzenia dysku.
  • pomoc techniczna platformy Azure s Gen1 (rozruch systemu BIOS) i maszyny wirtualne gen2 (rozruch UEFI).
  • Maksymalny rozmiar dozwolony dla dysku VHD wynosi 1023 GB.
  • Moduł jądra vfat musi być włączony w jądrze.
  • Menedżer woluminów logicznych (LVM) jest obsługiwany i może być używany na dysku systemu operacyjnego lub dyskach danych na maszynach wirtualnych platformy Azure. Ogólnie rzecz biorąc, zalecamy używanie partycji standardowych na dysku systemu operacyjnego, a nie LVM. Ta praktyka pozwala uniknąć konfliktów nazw LVM z sklonowanymi maszynami wirtualnymi, szczególnie jeśli kiedykolwiek trzeba dołączyć dysk systemu operacyjnego do innej identycznej maszyny wirtualnej w celu rozwiązywania problemów. Aby uzyskać więcej informacji, zobacz dokumentację LVM i RAID .
  • Wymagana jest obsługa jądra na potrzeby instalowania systemów plików formatu uniwersalnego dysku (UDF). Podczas pierwszego rozruchu na platformie Azure nośnik sformatowany przez użytkownika dołączony do gościa przekazuje konfigurację aprowizacji do maszyny wirtualnej z systemem Linux. Agent systemu Linux platformy Azure musi mieć możliwość zainstalowania systemu plików UDF, aby odczytać jego konfigurację i aprowizować maszynę wirtualną. Bez tego kroku aprowizowanie kończy się niepowodzeniem.
  • Nie konfiguruj partycji wymiany na dysku systemu operacyjnego. Aby uzyskać więcej informacji, zapoznaj się z poniższymi krokami.
  • Wszystkie wirtualne dyski twarde na platformie Azure muszą mieć rozmiar wirtualny wyrównany do 1 MB. Podczas konwertowania z dysku nieprzetworzonego na dysk VHD należy upewnić się, że rozmiar nieprzetworzonego dysku to wielokrotność 1 MB przed konwersją. Aby uzyskać więcej informacji, zapoznaj się z poniższymi krokami. Zobacz też uwagi dotyczące instalacji systemu Linux.

Uwaga

Cloud-init >= 21.2 usuwa wymaganie funkcji zdefiniowanej przez użytkownika. 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 niestandardowych danych przy użyciu danych użytkownika. W przeciwieństwie do danych niestandardowych dane użytkownika nie są szyfrowane. Aby uzyskać więcej informacji, zobacz Formaty danych użytkownika.

RHEL 6 przy użyciu Menedżera funkcji Hyper-V

Ważne

30 listopada 2020 r. system RHEL 6 osiągnął koniec fazy konserwacji. Faza konserwacji następuje po fazie rozszerzonej eksploatacji. Ponieważ system RHEL 6 przechodzi poza fazy pełnej/konserwacji, zdecydowanie zalecamy uaktualnienie do wersji RHEL 7, 8 lub 9. Jeśli musisz pozostać w systemie RHEL 6, zalecamy dodanie dodatku RHEL Extended Life Cycle Support.

  1. W Menedżerze funkcji Hyper-V wybierz maszynę wirtualną.

  2. Wybierz pozycję Połącz, aby otworzyć okno konsoli dla maszyny wirtualnej.

  3. W systemie RHEL 6 NetworkManager może zakłócać działanie agenta systemu Linux platformy Azure. Odinstaluj ten pakiet:

    sudo rpm -e --nodeps NetworkManager
    
  4. Utwórz lub edytuj /etc/sysconfig/network plik i dodaj następujący tekst:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Utwórz lub edytuj /etc/sysconfig/network-scripts/ifcfg-eth0 plik i dodaj następujący tekst:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Przenieś (lub usuń) reguły udev, aby uniknąć generowania reguł statycznych dla interfejsu Ethernet. Te reguły powodują problemy podczas klonowania maszyny wirtualnej na platformie Azure lub funkcji Hyper-V:

    Ostrzeżenie

    Wiele rozmiarów maszyn wirtualnych "v5" i nowszych wymaga przyspieszonej sieci. Jeśli nie jest włączona, menedżer sieci przypisze ten sam adres IP do wszystkich interfejsów funkcji wirtualnych. Aby zapobiec duplikowaniu adresów IP, pamiętaj, aby uwzględnić tę regułę ujmowania podczas migracji do nowszego rozmiaru.

    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
    

    Uwaga

    W przypadku korzystania z przyspieszonej sieci syntetyczny interfejs utworzony musi być skonfigurowany tak, aby był niezarządzany przy użyciu reguły ujmowania. Ta akcja uniemożliwia NetworkManager przypisanie do niego tego samego adresu IP co interfejs podstawowy.

    Aby go zastosować:

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparentlybonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
    EOF
    
  7. Upewnij się, że usługa sieciowa jest uruchamiana w czasie rozruchu:

    sudo chkconfig network on
    
  8. Zarejestruj subskrypcję oprogramowania Red Hat, aby włączyć instalację pakietów z repozytorium RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  9. Pakiet WALinuxAgent-<version>WALinuxAgent został wypchnięty do repozytorium dodatków Red Hat. Włącz repozytorium dodatków:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  10. Zmodyfikuj wiersz rozruchu jądra w konfiguracji grub, aby uwzględnić więcej parametrów jądra dla platformy Azure. Aby to zrobić, otwórz plik /boot/grub/menu.lst w edytorze tekstów. Upewnij się, że domyślne jądro zawiera następujące parametry:

    console=ttyS0 earlyprintk=ttyS0
    

    Ta akcja gwarantuje również, ż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.

    Zalecamy również usunięcie następujących parametrów:

    rhgb quiet crashkernel=auto
    

    Rozruchy graficzne i ciche nie są przydatne w środowisku chmury, w którym wszystkie dzienniki mają być wysyłane do portu szeregowego. Jeśli chcesz, możesz pozostawić crashkernel opcję skonfigurowaną. Ten parametr zmniejsza ilość dostępnej pamięci na maszynie wirtualnej o 128 MB lub więcej. Ta konfiguracja może być problemem dla mniejszych rozmiarów maszyn wirtualnych.

  11. Upewnij się, że serwer secure shell (SSH) jest zainstalowany i skonfigurowany do uruchamiania w czasie rozruchu, co jest zwykle ustawieniem domyślnym. Zmodyfikuj /etc/ssh/sshd_config , aby uwzględnić następujący wiersz:

    ClientAliveInterval 180
    
  12. Zainstaluj agenta systemu Linux platformy Azure:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    

    Zainstalowanie pakietu WALinuxAgent usuwa NetworkManager pakiety i NetworkManager-gnome , jeśli nie zostały jeszcze usunięte w kroku 3.

  13. 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 maszyny wirtualnej na platformie Azure. Dysk zasobów lokalnych jest dyskiem tymczasowym i może zostać opróżniony, jeśli maszyna wirtualna zostanie anulowana. Po zainstalowaniu agenta systemu Linux platformy Azure w poprzednim kroku zmodyfikuj odpowiednio następujące parametry /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.
    
  14. Wyrejestrowywanie subskrypcji (w razie potrzeby):

    sudo subscription-manager unregister
    
  15. Anulowanie aprowizacji maszyny wirtualnej i przygotowanie jej do aprowizacji na platformie Azure:

    Uwaga

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

        sudo waagent -force -deprovision
        sudo export HISTSIZE=0
    
  16. Wybierz pozycję Akcja>Zamknij w Menedżerze funkcji Hyper-V. Wirtualny dysk twardy systemu Linux jest teraz gotowy do przekazania na platformę Azure.

RHEL 7 przy użyciu Menedżera funkcji Hyper-V

  1. W Menedżerze funkcji Hyper-V wybierz maszynę wirtualną.

  2. Wybierz pozycję Połącz, aby otworzyć okno konsoli dla maszyny wirtualnej.

  3. Utwórz lub edytuj /etc/sysconfig/network plik i dodaj następujący tekst:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. Utwórz lub edytuj /etc/sysconfig/network-scripts/ifcfg-eth0 plik i dodaj następujący tekst:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  5. Upewnij się, że usługa sieciowa jest uruchamiana w czasie rozruchu:

    sudo systemctl enable network
    
  6. Zarejestruj subskrypcję oprogramowania Red Hat, aby włączyć instalację pakietów z repozytorium RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. Zmodyfikuj wiersz rozruchu jądra w konfiguracji grub, aby uwzględnić więcej parametrów jądra dla platformy Azure. Aby wykonać tę modyfikację, otwórz /etc/default/grub w edytorze tekstów i edytuj GRUB_CMDLINE_LINUX parametr . Na przykład:

    GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0 net.ifnames=0"
    GRUB_TERMINAL_OUTPUT="serial console"
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    ENABLE_BLSCFG=true
    

    Uwaga

    Jeśli ENABLE_BLSCFG=false jest obecny w /etc/default/grub zamiast ENABLE_BLSCFG=truenarzędzi , takich jak grubedit lub gubby, które opierają się na specyfikacji modułu ładującego rozruchu (BLS) do zarządzania wpisami i konfiguracjami rozruchu, mogą nie działać poprawnie w RHEL 8 i 9. Jeśli ENABLE_BLSCFG nie jest obecny, domyślne zachowanie to false.

    Ta modyfikacja gwarantuje również, że wszystkie komunikaty konsoli są wysyłane do pierwszego portu szeregowego i umożliwiają interakcję z konsolą szeregową, co może pomóc pomoc techniczna platformy Azure w przypadku problemów z debugowaniem. Ta konfiguracja wyłącza również nowe konwencje nazewnictwa RHEL 7 dla kart interfejsu sieciowego.

    rhgb quiet crashkernel=auto
    

    Rozruchy graficzne i ciche nie są przydatne w środowisku chmury, w którym wszystkie dzienniki mają być wysyłane do portu szeregowego. Jeśli chcesz, możesz pozostawić crashkernel opcję skonfigurowaną. Ten parametr zmniejsza ilość dostępnej pamięci na maszynie wirtualnej o 128 MB lub więcej, co może być problemem dla mniejszych rozmiarów maszyn wirtualnych.

  8. Po zakończeniu edytowania /etc/default/gruburuchom następujące polecenie, aby ponownie skompilować konfigurację grub:

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

    Uwaga

    Jeśli przekazujesz maszynę wirtualną z obsługą interfejsu UEFI, polecenie aktualizacji pliku grub to grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg.

  9. Upewnij się, że serwer SSH jest zainstalowany i skonfigurowany do uruchamiania w czasie rozruchu, co jest zwykle ustawieniem domyślnym. Zmodyfikuj /etc/ssh/sshd_config , aby uwzględnić następujący wiersz:

    ClientAliveInterval 180
    
  10. Pakiet WALinuxAgent-<version>WALinuxAgent został wypchnięty do repozytorium dodatków Red Hat. Włącz repozytorium dodatków:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  11. Zainstaluj agenta systemu Linux platformy Azure i cloud-initinne niezbędne narzędzia:

    sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  12. Skonfiguruj cloud-init do obsługi aprowizacji:

    1. Skonfiguruj waagent dla programu 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
      

      Uwaga

      Jeśli migrujesz określoną maszynę wirtualną i nie chcesz tworzyć uogólnionego obrazu, ustaw Provisioning.Agent=disabled konfigurację /etc/waagent.conf .

    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 zamiany:

      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
      
    5. 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
      
      
  13. Konfiguracja zamiany:

    • Nie twórz miejsca wymiany na dysku systemu operacyjnego.

      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. Ta akcja jest teraz obsługiwana przez program cloud-init. Nie można używać agenta systemu Linux do formatowania dysku zasobu w celu utworzenia pliku wymiany. Zmodyfikuj odpowiednio następujące parametry /etc/waagent.conf :

      ResourceDisk.Format=n
      ResourceDisk.EnableSwap=n
      
    • Jeśli chcesz zainstalować, sformatować i utworzyć zamianę, możesz wykonać następujące czynności:

      • Przekaż ten kod jako konfigurację za każdym razem, gdy tworzysz maszynę wirtualną cloud-init za pomocą danych niestandardowych. Zalecamy tę metodę.

      • cloud-init Użyj dyrektywy baked do obrazu, który wykonuje ten krok za każdym razem, gdy maszyna wirtualna zostanie utworzona.

        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
        
  14. Jeśli chcesz wyrejestrować subskrypcję, uruchom następujące polecenie:

    sudo subscription-manager unregister
    
  15. Anulowanie aprowizacji maszyny wirtualnej i przygotowanie jej do aprowizacji na platformie Azure:

    Uwaga

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

    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
    
  16. Wybierz pozycję Akcja>Zamknij w Menedżerze funkcji Hyper-V. Wirtualny dysk twardy systemu Linux jest teraz gotowy do przekazania na platformę Azure.

RHEL 8+ przy użyciu Menedżera funkcji Hyper-V

  1. W Menedżerze funkcji Hyper-V wybierz maszynę wirtualną.

  2. Wybierz pozycję Połącz, aby otworzyć okno konsoli dla maszyny wirtualnej.

  3. Upewnij się, że usługa Menedżer sieci jest uruchamiana w czasie rozruchu:

    sudo systemctl enable NetworkManager.service
    
  4. Skonfiguruj interfejs sieciowy, aby automatycznie uruchamiał się podczas rozruchu i używał protokołu dynamicznej konfiguracji hosta:

    sudo nmcli con mod eth0 connection.autoconnect yes ipv4.method auto
    
  5. Zarejestruj subskrypcję oprogramowania Red Hat, aby włączyć instalację pakietów z repozytorium RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  6. Zmodyfikuj wiersz rozruchu jądra w konfiguracji grub, aby uwzględnić więcej parametrów jądra dla platformy Azure i włączyć konsolę szeregową.

  7. Usuń bieżące parametry GRUB:

    sudo grub2-editenv - unset kernelopts
    
  8. Edytuj /etc/default/grub w edytorze tekstów i dodaj następujące parametry:

    GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 earlyprintk=ttyS0 net.ifnames=0"
    GRUB_TERMINAL_OUTPUT="serial console"
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    

    Ta modyfikacja gwarantuje również, że wszystkie komunikaty konsoli są wysyłane do pierwszego portu szeregowego i umożliwiają interakcję z konsolą szeregową, co może pomóc pomoc techniczna platformy Azure w przypadku problemów z debugowaniem. Ta konfiguracja wyłącza również nowe konwencje nazewnictwa kart sieciowych.

  9. Zalecamy również usunięcie następujących parametrów:

    rhgb quiet crashkernel=auto
    

    Rozruchy graficzne i ciche nie są przydatne w środowisku chmury, w którym wszystkie dzienniki mają być wysyłane do portu szeregowego. Jeśli chcesz, możesz pozostawić crashkernel opcję skonfigurowaną. Ten parametr zmniejsza ilość dostępnej pamięci na maszynie wirtualnej o 128 MB lub więcej, co może być problemem dla mniejszych rozmiarów maszyn wirtualnych.

  10. Po zakończeniu edytowania /etc/default/gruburuchom następujące polecenie, aby ponownie skompilować konfigurację grub:

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

    W przypadku maszyny wirtualnej z obsługą interfejsu UEFI uruchom następujące polecenie:

    sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    
  11. Upewnij się, że serwer SSH jest zainstalowany i skonfigurowany do uruchamiania w czasie rozruchu, co jest zwykle ustawieniem domyślnym. Zmodyfikuj /etc/ssh/sshd_config , aby uwzględnić następujący wiersz:

    ClientAliveInterval 180
    
  12. Zainstaluj agenta systemu Linux platformy Azure i cloud-initinne niezbędne narzędzia:

    sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  13. Skonfiguruj cloud-init do obsługi aprowizacji:

    1. Skonfiguruj waagent dla programu 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
      

      Uwaga

      Jeśli migrujesz określoną maszynę wirtualną i nie chcesz tworzyć uogólnionego obrazu, ustaw Provisioning.Agent=disabled konfigurację /etc/waagent.conf .

    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 zamiany:

      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
      
    5. 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
      
  14. Konfiguracja zamiany:

    • Nie twórz miejsca wymiany na dysku systemu operacyjnego.

      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. Ta akcja jest teraz obsługiwana przez program cloud-init. Nie można używać agenta systemu Linux do formatowania dysku zasobu tworzącego plik wymiany. Zmodyfikuj odpowiednio następujące parametry /etc/waagent.conf :

      ResourceDisk.Format=n
      ResourceDisk.EnableSwap=n
      
      • Przekaż ten kod jako konfigurację za każdym razem, gdy tworzysz maszynę wirtualną cloud-init za pomocą danych niestandardowych. Zalecamy tę metodę.

      • cloud-init Użyj dyrektywy baked do obrazu, który wykonuje ten krok za każdym razem, gdy maszyna wirtualna zostanie utworzona.

        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.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"]
        EOF
        
  15. Jeśli chcesz wyrejestrować subskrypcję, uruchom następujące polecenie:

    sudo subscription-manager unregister
    
  16. Uruchom następujące polecenia, aby usunąć aprowizację maszyny wirtualnej i przygotować ją do aprowizacji na platformie Azure:

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

    Uwaga

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

  17. Wybierz pozycję Akcja>Zamknij w Menedżerze funkcji Hyper-V. Wirtualny dysk twardy systemu Linux jest teraz gotowy do przekazania na platformę Azure.

KVM

W tej sekcji przedstawiono sposób użycia maszyny wirtualnej KVM do przygotowania dystrybucji RHEL 6 lub RHEL 7 do przekazania na platformę Azure.

RHEL 6 przy użyciu maszyny wirtualnej KVM

Ważne

30 listopada 2020 r. system RHEL 6 osiągnął koniec fazy konserwacji. Faza konserwacji następuje po fazie rozszerzonej eksploatacji. Ponieważ system RHEL 6 przechodzi poza fazy pełnej/konserwacji, zdecydowanie zalecamy uaktualnienie do wersji RHEL 7, 8 lub 9. Jeśli musisz pozostać w systemie RHEL 6, zalecamy dodanie dodatku RHEL Extended Life Cycle Support.

  1. Pobierz obraz KVM systemu RHEL 6 ze strony internetowej Red Hat.

  2. Ustaw hasło główne.

    Wygeneruj zaszyfrowane hasło i skopiuj dane wyjściowe polecenia:

    sudo openssl passwd -1 changeme
    

    Ustaw hasło główne z atrybutem guestfish:

    sudo guestfish --rw -a <image-name>
    > <fs> run
    > <fs> list-filesystems
    > <fs> mount /dev/sda1 /
    > <fs> vi /etc/shadow
    > <fs> exit
    

    Zmień drugie pole użytkownika głównego z !! na zaszyfrowane hasło.

  3. Utwórz maszynę wirtualną w maszynie wirtualnej KVM na podstawie obrazu qcow2. Ustaw typ dysku na qcow2 i ustaw model urządzenia interfejsu sieciowego wirtualnego na virtio. Następnie uruchom maszynę wirtualną i zaloguj się jako katalog główny.

  4. Utwórz lub edytuj /etc/sysconfig/network plik i dodaj następujący tekst:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Utwórz lub edytuj /etc/sysconfig/network-scripts/ifcfg-eth0 plik i dodaj następujący tekst:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Przenieś (lub usuń) reguły udev, aby uniknąć generowania reguł statycznych dla interfejsu Ethernet. Te reguły powodują problemy podczas klonowania maszyny wirtualnej na platformie Azure lub funkcji 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
    

    Uwaga

    W przypadku korzystania z przyspieszonej sieci syntetyczny interfejs utworzony musi być skonfigurowany tak, aby był niezarządzany przy użyciu reguły ujmowania. Ta akcja uniemożliwia NetworkManager przypisanie do niego tego samego adresu IP co interfejs podstawowy.

    Aby go zastosować:

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparently bonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
    EOF
    
  7. Upewnij się, że usługa sieciowa jest uruchamiana w czasie rozruchu:

    sudo chkconfig network on
    
  8. Zarejestruj subskrypcję oprogramowania Red Hat, aby włączyć instalację pakietów z repozytorium RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  9. Zmodyfikuj wiersz rozruchu jądra w konfiguracji grub, aby uwzględnić więcej parametrów jądra dla platformy Azure. Aby to zrobić, otwórz plik /boot/grub/menu.lst w edytorze tekstów. Upewnij się, że domyślne jądro zawiera następujące parametry:

    console=ttyS0 earlyprintk=ttyS0
    

    Ten krok gwarantuje również, ż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.

    Zalecamy również usunięcie następujących parametrów:

    rhgb quiet crashkernel=auto
    

    Rozruchy graficzne i ciche nie są przydatne w środowisku chmury, w którym wszystkie dzienniki mają być wysyłane do portu szeregowego. Jeśli chcesz, możesz pozostawić crashkernel opcję skonfigurowaną. Ten parametr zmniejsza ilość dostępnej pamięci na maszynie wirtualnej o 128 MB lub więcej, co może być problemem dla mniejszych rozmiarów maszyn wirtualnych.

  10. Dodaj moduły funkcji Hyper-V do modułów initramfs:

    Edytuj /etc/dracut.confelement i dodaj następującą zawartość:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Ponowne kompilowanie initramfs:

    sudo dracut -f -v
    
  11. Odinstaluj cloud-init:

    sudo yum remove cloud-init
    
  12. Upewnij się, że serwer SSH jest zainstalowany i skonfigurowany do uruchamiania w czasie rozruchu:

    sudo chkconfig sshd on
    

    Zmodyfikuj /etc/ssh/sshd_config , aby uwzględnić następujące wiersze:

    PasswordAuthentication yes
    ClientAliveInterval 180
    
  13. Pakiet WALinuxAgent-<version>WALinuxAgent został wypchnięty do repozytorium dodatków Red Hat. Włącz repozytorium dodatków:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  14. Zainstaluj agenta systemu Linux platformy Azure:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    
  15. 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 maszyny wirtualnej na platformie Azure. Dysk zasobów lokalnych jest dyskiem tymczasowym i może zostać opróżniony, jeśli maszyna wirtualna zostanie anulowana. Po zainstalowaniu agenta systemu Linux platformy Azure w poprzednim kroku zmodyfikuj odpowiednio następujące parametry /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. Wyrejestrowywanie subskrypcji (w razie potrzeby):

    sudo subscription-manager unregister
    
  17. Uruchom następujące polecenia, aby usunąć aprowizację maszyny wirtualnej i przygotować ją do aprowizacji na platformie Azure.

    Uwaga

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

    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  18. Zamknij maszynę wirtualną w maszynie wirtualnej KVM.

  19. Przekonwertuj obraz qcow2 na format 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 programie QEMU 2.6. Zalecamy użycie qemu-img 2.2.0 lub niższej albo aktualizacji do wersji 2.6 lub nowszej. Aby uzyskać więcej informacji, zobacz tę witrynę internetową .

    Najpierw przekonwertuj obraz na format pierwotny:

    sudo qemu-img convert -f qcow2 -O raw rhel-6.9.qcow2 rhel-6.9.raw
    

    Upewnij się, że rozmiar obrazu pierwotnego jest wyrównany do 1 MB. W przeciwnym razie zaokrąglij rozmiar w celu wyrównania do 1 MB:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-6.9.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-6.9.raw $rounded_size
    

    Przekonwertuj dysk pierwotny na dysk VHD o stałym rozmiarze:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd
    

    Możesz też skorzystać z opcji qemu w wersji 2.6 lub nowszejforce_size:

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

RHEL 7 przy użyciu maszyny wirtualnej KVM

  1. Pobierz obraz KVM systemu RHEL 7 ze strony internetowej Red Hat. Ta procedura używa systemu RHEL 7 jako przykładu.

  2. Ustaw hasło główne.

    Wygeneruj zaszyfrowane hasło i skopiuj dane wyjściowe polecenia:

    sudo openssl passwd -1 changeme
    

    Ustaw hasło główne z atrybutem guestfish:

    sudo  guestfish --rw -a <image-name>
    > <fs> run
    > <fs> list-filesystems
    > <fs> mount /dev/sda1 /
    > <fs> vi /etc/shadow
    > <fs> exit
    

    Zmień drugie pole użytkownika głównego z !! na zaszyfrowane hasło.

  3. Utwórz maszynę wirtualną w maszynie wirtualnej KVM na podstawie obrazu qcow2. Ustaw typ dysku na qcow2 i ustaw model urządzenia interfejsu sieciowego wirtualnego na virtio. Następnie uruchom maszynę wirtualną i zaloguj się jako katalog główny.

  4. Utwórz lub edytuj /etc/sysconfig/network plik i dodaj następujący tekst:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Utwórz lub edytuj /etc/sysconfig/network-scripts/ifcfg-eth0 plik i dodaj następujący tekst:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  6. Upewnij się, że usługa sieciowa jest uruchamiana w czasie rozruchu:

    sudo systemctl enable network
    
  7. Zarejestruj subskrypcję oprogramowania Red Hat, aby włączyć instalację pakietów z repozytorium RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  8. Zmodyfikuj wiersz rozruchu jądra w konfiguracji grub, aby uwzględnić więcej parametrów jądra dla platformy Azure. Aby wykonać tę konfigurację, otwórz /etc/default/grub plik w edytorze tekstów i edytuj GRUB_CMDLINE_LINUX parametr . Na przykład:

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

    To polecenie gwarantuje również, ż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. Polecenie wyłącza również nowe konwencje nazewnictwa RHEL 7 dla kart sieciowych. Zalecamy również usunięcie następujących parametrów:

    rhgb quiet crashkernel=auto
    

    Rozruchy graficzne i ciche nie są przydatne w środowisku chmury, w którym wszystkie dzienniki mają być wysyłane do portu szeregowego. Jeśli chcesz, możesz pozostawić crashkernel opcję skonfigurowaną. Ten parametr zmniejsza ilość dostępnej pamięci na maszynie wirtualnej o 128 MB lub więcej, co może być problemem dla mniejszych rozmiarów maszyn wirtualnych.

  9. Po zakończeniu edytowania /etc/default/gruburuchom następujące polecenie, aby ponownie skompilować konfigurację grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  10. Dodaj moduły funkcji Hyper-V do modułów initramfs.

    Edytuj /etc/dracut.conf i dodaj zawartość:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Ponowne kompilowanie initramfs:

    sudo dracut -f -v
    
  11. Odinstaluj cloud-init:

    sudo yum remove cloud-init
    
  12. Upewnij się, że serwer SSH jest zainstalowany i skonfigurowany do uruchamiania w czasie rozruchu:

    sudo systemctl enable sshd
    

    Zmodyfikuj /etc/ssh/sshd_config , aby uwzględnić następujące wiersze:

    PasswordAuthentication yes
    ClientAliveInterval 180
    
  13. Pakiet WALinuxAgent-<version>WALinuxAgent został wypchnięty do repozytorium dodatków Red Hat. Włącz repozytorium dodatków:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  14. Zainstaluj agenta systemu Linux platformy Azure:

    sudo yum install WALinuxAgent
    

    Włącz usługę waagent :

    sudo systemctl enable waagent.service
    
  15. Zainstaluj system cloud-init.

    Wykonaj kroki opisane w temacie "Przygotowywanie maszyny wirtualnej RHEL 7 z Menedżera funkcji Hyper-V", krok 12" "Instalowanie cloud-init w celu obsługi aprowizacji".

  16. Konfiguracja zamiany:

    • Nie twórz miejsca wymiany na dysku systemu operacyjnego.
    • Wykonaj kroki opisane w sekcji "Przygotowywanie maszyny wirtualnej RHEL 7 z Menedżera funkcji Hyper-V", krok 13" "Konfiguracja zamiany".
  17. Wyrejestrowywanie subskrypcji (w razie potrzeby):

    sudo subscription-manager unregister
    
  18. Anulowanie aprowizacji, wykonując kroki opisane w temacie "Przygotowywanie maszyny wirtualnej RHEL 7 z Menedżera funkcji Hyper-V", krok 15, "Anulowanie aprowizacji".

  19. Zamknij maszynę wirtualną w maszynie wirtualnej KVM.

  20. Przekonwertuj obraz qcow2 na format VHD.

    Uwaga

    Istnieje znana usterka w wersjach >qemu-img =1.1.1, która powoduje niewłaściwie sformatowany dysk VHD. Problem został rozwiązany w programie QEMU 1.6. Zalecamy użycie polecenia qemu-img 1.1.0 lub starszego albo aktualizacji do wersji 1.6 lub nowszej. Aby uzyskać więcej informacji, zobacz tę witrynę internetową.

    Najpierw przekonwertuj obraz na format pierwotny:

    sudo qemu-img convert -f qcow2 -O raw rhel-7.4.qcow2 rhel-7.4.raw
    

    Upewnij się, że rozmiar obrazu pierwotnego jest wyrównany do 1 MB. W przeciwnym razie zaokrąglij rozmiar w celu wyrównania do 1 MB:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-7.4.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-7.4.raw $rounded_size
    

    Przekonwertuj dysk pierwotny na dysk VHD o stałym rozmiarze:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
    

    Możesz też skorzystać z opcji qemu w wersji 1.6 lub nowszejforce_size:

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

VMware

W tej sekcji pokazano, jak przygotować dystrybucję RHEL 6 lub RHEL 7 z programu VMware.

Wymagania wstępne

W tej sekcji założono, że maszyna wirtualna RHEL została już zainstalowana w programie VMware. Aby uzyskać informacje o sposobie instalowania systemu operacyjnego w programie VMware, zobacz Przewodnik instalacji systemu operacyjnego gościa programu VMware.

  • Podczas instalowania systemu operacyjnego Linux zalecamy używanie partycji standardowych, a nie LVM, co jest często ustawieniem domyślnym dla wielu instalacji. Użycie partycji pozwala uniknąć konfliktów nazw LVM z sklonowaną maszyną wirtualną, szczególnie jeśli podczas rozwiązywania problemów należy dołączyć dysk systemu operacyjnego do innej maszyny wirtualnej. LvM lub RAID można używać na dyskach danych, jeśli chcesz.
  • Nie konfiguruj partycji wymiany na dysku systemu operacyjnego. Agenta systemu Linux można skonfigurować tak, aby utworzyć plik wymiany na dysku zasobów tymczasowych. Aby uzyskać więcej informacji, zapoznaj się z poniższymi krokami.
  • Podczas tworzenia dysku VHD wybierz pozycję Zapisz dysk wirtualny jako pojedynczy plik.

RHEL 6 przy użyciu programu VMware

Ważne

30 listopada 2020 r. system RHEL 6 osiągnął koniec fazy konserwacji. Faza konserwacji następuje po fazie rozszerzonej eksploatacji. Ponieważ system RHEL 6 przechodzi poza fazy pełnej/konserwacji, zdecydowanie zalecamy uaktualnienie do wersji RHEL 7 lub 8 lub 9. Jeśli musisz pozostać w systemie RHEL 6, zalecamy dodanie dodatku RHEL Extended Life Cycle Support.

  1. W systemie RHEL 6 NetworkManager może zakłócać działanie agenta systemu Linux platformy Azure. Odinstaluj ten pakiet:

    sudo rpm -e --nodeps NetworkManager
    
  2. Utwórz plik o nazwie network w /etc/sysconfig/ katalogu zawierającym następujący tekst:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  3. Utwórz lub edytuj /etc/sysconfig/network-scripts/ifcfg-eth0 plik i dodaj następujący tekst:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  4. Przenieś (lub usuń) reguły udev, aby uniknąć generowania reguł statycznych dla interfejsu Ethernet. Te reguły powodują problemy podczas klonowania maszyny wirtualnej na platformie Azure lub funkcji 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
    

    Uwaga

    W przypadku korzystania z przyspieszonej sieci syntetyczny interfejs utworzony musi być skonfigurowany tak, aby był niezarządzany przy użyciu reguły ujmowania. Ta akcja uniemożliwia NetworkManager przypisanie do niego tego samego adresu IP co interfejs podstawowy.

    Aby go zastosować:

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparently bonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
    EOF
    
  5. Upewnij się, że usługa sieciowa jest uruchamiana w czasie rozruchu:

    sudo chkconfig network on
    
  6. Zarejestruj subskrypcję oprogramowania Red Hat, aby włączyć instalację pakietów z repozytorium RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. Pakiet WALinuxAgent-<version>WALinuxAgent został wypchnięty do repozytorium dodatków Red Hat. Włącz repozytorium dodatków:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  8. Zmodyfikuj wiersz rozruchu jądra w konfiguracji grub, aby uwzględnić więcej parametrów jądra dla platformy Azure. Aby wykonać ten krok, otwórz /etc/default/grub plik w edytorze tekstów i edytuj GRUB_CMDLINE_LINUX parametr . Na przykład:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0"
    

    Ten krok gwarantuje również, ż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. Zalecamy również usunięcie następujących parametrów:

    rhgb quiet crashkernel=auto
    

    Rozruchy graficzne i ciche nie są przydatne w środowisku chmury, w którym wszystkie dzienniki mają być wysyłane do portu szeregowego. Jeśli chcesz, możesz pozostawić crashkernel opcję skonfigurowaną. Ten parametr zmniejsza ilość dostępnej pamięci na maszynie wirtualnej o 128 MB lub więcej, co może być problemem dla mniejszych rozmiarów maszyn wirtualnych.

  9. Dodaj moduły funkcji Hyper-V do modułów initramfs:

    Edytuj /etc/dracut.confelement i dodaj następującą zawartość:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Ponowne kompilowanie initramfs:

    sudo dracut -f -v
    
  10. Upewnij się, że serwer SSH jest zainstalowany i skonfigurowany do uruchamiania w czasie rozruchu, co jest zwykle ustawieniem domyślnym. Zmodyfikuj /etc/ssh/sshd_config , aby uwzględnić następujący wiersz:

    ClientAliveInterval 180
    
  11. Zainstaluj agenta systemu Linux platformy Azure:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    
  12. 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 maszyny wirtualnej na platformie Azure. Dysk zasobów lokalnych jest dyskiem tymczasowym i może zostać opróżniony, jeśli maszyna wirtualna zostanie anulowana. Po zainstalowaniu agenta systemu Linux platformy Azure w poprzednim kroku zmodyfikuj odpowiednio następujące parametry /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.
    
  13. Wyrejestrowywanie subskrypcji (w razie potrzeby):

    sudo subscription-manager unregister
    
  14. Uruchom następujące polecenia, aby usunąć aprowizację maszyny wirtualnej i przygotować ją do aprowizacji na platformie Azure:

    Uwaga

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

    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  15. Zamknij maszynę wirtualną i przekonwertuj plik VMDK na plik 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 programie QEMU 2.6. Zalecamy użycie qemu-img 2.2.0 lub niższej albo aktualizacji do wersji 2.6 lub nowszej. Aby uzyskać więcej informacji, zobacz tę witrynę internetową.

    Najpierw przekonwertuj obraz na format pierwotny:

    sudo qemu-img convert -f vmdk -O raw rhel-6.9.vmdk rhel-6.9.raw
    

    Upewnij się, że rozmiar obrazu pierwotnego jest wyrównany do 1 MB. W przeciwnym razie zaokrąglij rozmiar w celu wyrównania do 1 MB:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-6.9.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-6.9.raw $rounded_size
    

    Przekonwertuj dysk pierwotny na dysk VHD o stałym rozmiarze:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd
    

    Możesz też skorzystać z opcji qemu w wersji 2.6 lub nowszejforce_size:

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

RHEL 7 przy użyciu programu VMware

  1. Utwórz lub edytuj /etc/sysconfig/network plik i dodaj następujący tekst:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  2. Utwórz lub edytuj /etc/sysconfig/network-scripts/ifcfg-eth0 plik i dodaj następujący tekst:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  3. Upewnij się, że usługa sieciowa jest uruchamiana w czasie rozruchu:

    sudo systemctl enable network
    
  4. Zarejestruj subskrypcję oprogramowania Red Hat, aby włączyć instalację pakietów z repozytorium RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  5. Zmodyfikuj wiersz rozruchu jądra w konfiguracji grub, aby uwzględnić więcej parametrów jądra dla platformy Azure. Aby wykonać tę modyfikację, otwórz /etc/default/grub w edytorze tekstów i edytuj GRUB_CMDLINE_LINUX parametr . Na przykład:

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

    Ta konfiguracja zapewnia również, ż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. Wyłącza również nowe konwencje nazewnictwa RHEL 7 dla kart sieciowych. Ponadto zalecamy usunięcie następujących parametrów:

    rhgb quiet crashkernel=auto
    

    Rozruchy graficzne i ciche nie są przydatne w środowisku chmury, w którym wszystkie dzienniki mają być wysyłane do portu szeregowego. Jeśli chcesz, możesz pozostawić crashkernel opcję skonfigurowaną. Ten parametr zmniejsza ilość dostępnej pamięci na maszynie wirtualnej o 128 MB lub więcej, co może być problemem dla mniejszych rozmiarów maszyn wirtualnych.

  6. Po zakończeniu edytowania /etc/default/gruburuchom następujące polecenie, aby ponownie skompilować konfigurację grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  7. Dodaj moduły funkcji Hyper-V do modułów initramfs:

    Edytuj /etc/dracut.conf, dodaj zawartość:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Ponowne kompilowanie initramfs:

    sudo dracut -f -v
    
  8. Upewnij się, że serwer SSH jest zainstalowany i skonfigurowany do uruchamiania w czasie rozruchu. To ustawienie jest zwykle ustawieniem domyślnym. Zmodyfikuj /etc/ssh/sshd_config , aby uwzględnić następujący wiersz:

    ClientAliveInterval 180
    
  9. Pakiet WALinuxAgent-<version>WALinuxAgent został wypchnięty do repozytorium dodatków Red Hat. Włącz repozytorium dodatków:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  10. Zainstaluj agenta systemu Linux platformy Azure:

    sudo yum install WALinuxAgent
    sudo systemctl enable waagent.service
    
  11. Zainstaluj program cloud-init:

    Wykonaj kroki opisane w temacie "Przygotowywanie maszyny wirtualnej RHEL 7 z Menedżera funkcji Hyper-V", krok 12" "Instalowanie cloud-init w celu obsługi aprowizacji".

  12. Konfiguracja zamiany:

    • Nie twórz miejsca wymiany na dysku systemu operacyjnego.
    • Wykonaj kroki opisane w sekcji "Przygotowywanie maszyny wirtualnej RHEL 7 z Menedżera funkcji Hyper-V", krok 13" "Konfiguracja zamiany".
  13. Jeśli chcesz wyrejestrować subskrypcję, uruchom następujące polecenie:

    sudo subscription-manager unregister
    
  14. Anulowanie aprowizacji, wykonując kroki opisane w temacie "Przygotowywanie maszyny wirtualnej RHEL 7 z Menedżera funkcji Hyper-V", krok 15, "Anulowanie aprowizacji".

  15. Zamknij maszynę wirtualną i przekonwertuj plik VMDK na format 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 programie QEMU 2.6. Zalecamy użycie qemu-img 2.2.0 lub niższej albo aktualizacji do wersji 2.6 lub nowszej. Aby uzyskać więcej informacji, zobacz tę witrynę internetową.

    Najpierw przekonwertuj obraz na format pierwotny:

    sudo qemu-img convert -f vmdk -O raw rhel-7.4.vmdk rhel-7.4.raw
    

    Upewnij się, że rozmiar obrazu pierwotnego jest wyrównany do 1 MB. W przeciwnym razie zaokrąglij rozmiar w celu wyrównania do 1 MB:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-7.4.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-7.4.raw $rounded_size
    

    Przekonwertuj dysk pierwotny na dysk VHD o stałym rozmiarze:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
    

    Możesz też skorzystać z opcji qemu w wersji 2.6 lub nowszejforce_size:

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

Plik Kickstart

W tej sekcji pokazano, jak przygotować dystrybucję RHEL 7 z iso przy użyciu pliku kickstart.

RHEL 7 z pliku kickstart

  1. Utwórz plik kickstart zawierający następującą zawartość i zapisz plik. Aby uzyskać informacje na temat instalacji kickstart, zobacz Przewodnik instalacji kickstart.

    # Kickstart for provisioning a RHEL 7 Azure VM
    
    # System authorization information
      auth --enableshadow --passalgo=sha512
    
    # Use graphical install
    text
    
    # Don't run the Setup Agent on first boot
    firstboot --disable
    
    # Keyboard layouts
    keyboard --vckeymap=us --xlayouts='us'
    
    # System language
    lang en_US.UTF-8
    
    # Network information
    network  --bootproto=dhcp
    
    # Root password
    rootpw --plaintext "to_be_disabled"
    
    # System services
    services --enabled="sshd,waagent,NetworkManager"
    
    # System timezone
    timezone Etc/UTC --isUtc --ntpservers 0.rhel.pool.ntp.org,1.rhel.pool.ntp.org,2.rhel.pool.ntp.org,3.rhel.pool.ntp.org
    
    # Partition clearing information
    clearpart --all --initlabel
    
    # Clear the MBR
    zerombr
    
    # Disk partitioning information
    part /boot --fstype="xfs" --size=500
    part / --fstyp="xfs" --size=1 --grow --asprimary
    
    # System bootloader configuration
    bootloader --location=mbr
    
    # Firewall configuration
    firewall --disabled
    
    # Enable SELinux
    selinux --enforcing
    
    # Don't configure X
    skipx
    
    # Power down the machine after install
    poweroff
    
    %packages
    @base
    @console-internet
    chrony
    sudo
    parted
    -dracut-config-rescue
    
    %end
    
    %post --log=/var/log/anaconda/post-install.log
    
    #!/bin/bash
    
    # Register Red Hat Subscription
    subscription-manager register --username=XXX --password=XXX --auto-attach --force
    
    # Install latest repo update
    yum update -y
    
    # Enable extras repo
    subscription-manager repos --enable=rhel-7-server-extras-rpms
    
    # Install WALinuxAgent
    yum install -y WALinuxAgent
    
    # Unregister Red Hat subscription
    subscription-manager unregister
    
    # Enable waaagent at boot-up
    systemctl enable waagent
    
    # Install cloud-init
    yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
    # Configure waagent for 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
    
    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
    
    # Disable the root account
    usermod root -p '!!'
    
    # Configure swap using cloud-init
    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.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"]
    EOF
    
    # Set the cmdline
    sed -i 's/^\(GRUB_CMDLINE_LINUX\)=".*"$/\1="console=tty1 console=ttyS0 earlyprintk=ttyS0"/g' /etc/default/grub
    
    # Enable SSH keepalive
    sed -i 's/^#\(ClientAliveInterval\).*$/\1 180/g' /etc/ssh/sshd_config
    
    # Build the grub cfg
    grub2-mkconfig -o /boot/grub2/grub.cfg
    
    # Configure network
    cat << EOF > /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    EOF
    
    # Deprovision and prepare for Azure if you are creating a generalized image
    sudo cloud-init clean --logs --seed
    sudo rm -rf /var/lib/cloud/
    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    
    sudo waagent -force -deprovision+user
    rm -f ~/.bash_history
    export HISTSIZE=0
    
    %end
    
  2. Umieść plik kickstart, w którym system instalacyjny może uzyskać do niego dostęp.

  3. W Menedżerze funkcji Hyper-V utwórz nową maszynę wirtualną. Na stronie Łączenie wirtualnego dysku twardego wybierz pozycję Dołącz wirtualny dysk twardy później i ukończ pracę kreatora Nowa maszyna wirtualna.

  4. Otwórz ustawienia maszyny wirtualnej:

    1. Dołącz nowy wirtualny dysk twardy do maszyny wirtualnej. Upewnij się, że wybrano pozycję Format dysku VHD i stały rozmiar.

    2. Dołącz instalację ISO do stacji dysków DVD.

    3. Ustaw system BIOS na rozruch z dysku CD.

  5. Uruchom maszynę wirtualną. Po wyświetleniu przewodnika instalacji wybierz Tab , aby skonfigurować opcje rozruchu.

  6. Wprowadź inst.ks=<the location of the kickstart file> na końcu opcji rozruchu i wybierz Enter .

  7. Poczekaj na zakończenie instalacji. Po zakończeniu maszyna wirtualna zostanie automatycznie zamknięta. Wirtualny dysk twardy systemu Linux jest teraz gotowy do przekazania na platformę Azure.

Znane problemy

Znany jest następujący problem.

Nie można dołączyć sterownika funkcji Hyper-V do początkowego dysku RAM w przypadku korzystania z funkcji hypervisor innej niż hypervisor funkcji Hyper-V

W niektórych przypadkach instalatory systemu Linux mogą nie zawierać sterowników funkcji Hyper-V w początkowym dysku RAM (initrd lub initramfs), chyba że system Linux wykryje, że działa w środowisku funkcji Hyper-V.

Jeśli używasz innego systemu wirtualizacji (na przykład VirtualBox lub Xen) do przygotowania obrazu systemu Linux, może być konieczne ponowne skompilowanie initrd, aby upewnić się, że co najmniej hv_vmbus moduły jądra i hv_storvsc są dostępne na początkowym dysku RAM. Ten problem jest znany, przynajmniej w systemach opartych na nadrzędnej dystrybucji red hat.

Aby rozwiązać ten problem, dodaj moduły funkcji Hyper-V do modułów initramfs i skompiluj go:

Edytuj /etc/dracut.confelement i dodaj następującą zawartość:

add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "

Ponowne kompilowanie initramfs:

sudo dracut -f -v

Aby uzyskać więcej informacji, zobacz Ponowne kompilowanie initramfs.