次の方法で共有


Azure 用の Red Hat ベースの仮想マシンの準備

適用対象: ✔️ Linux VM ✔️ フレキシブル スケール セット ✔️ 均一スケール セット

この記事では、Azure で使用できるようにするために Red Hat Enterprise Linux (RHEL) 仮想マシン (VM) を準備する方法について説明します。 この記事で説明する RHEL のバージョンは、7.x、8.X.、9.x です。 この記事では、Hyper-V、カーネルベースの VM (KVM)、VMware、Kickstart の各ハイパーバイザーの準備について説明します。

Red Hat の Cloud Access プログラムに参加するための資格要件の詳細については、Red Hat Cloud Access Web サイトAzure での RHEL の実行に関するページを参照してください。 RHEL イメージの作成を自動化する方法については、Azure Image Builder に関するページを参照してください。

Note

サポートが終了し (EOL)、Red Hat でサポートされなくなったバージョンに注意してください。 EOL 以降にアップロードされたイメージは、合理的な企業努力の範囲でサポートされます。 詳細については、Red Hat の製品のライフサイクルに関するページを参照してください。

前提条件

このセクションは、Red Hat の Web サイトから取得した ISO ファイルの RHEL イメージが仮想ハード ディスク (VHD) にインストール済みであることを前提としています。 Hyper-V マネージャーを使用してオペレーティング システム イメージをインストールする方法の詳細については、Hyper-V の役割のインストールと仮想マシンの構成に関するページを参照してください。

RHEL のインストールに関する注記

  • Azure では、VHDX 形式はサポートされていません。 Azure でサポートされるのは、容量固定の VHD のみです。 Hyper-V マネージャーを使用してディスクを VHD 形式に変換するか、または convert-vhd コマンドレットを使用することができます。 VirtualBox を使用する場合は、ディスクの作成時に、既定の動的割り当てオプションではなく、 [容量固定] を選択します。
  • Azure では、Gen1 (BIOS ブート) および Gen2 (UEFI ブート) VM がサポートされています。
  • VHD のサイズの上限は、1,023 GB です。
  • vfat カーネル モジュールをカーネル内で有効にする必要があります。
  • 論理ボリューム マネージャー (LVM) がサポートされており、Azure VM 内の OS ディスクまたはデータ ディスクで使用できます。 一般的には、LVM ではなく OS ディスクの標準パーティションを使用することをお勧めします。 これにより、特にオペレーティング システム ディスクをトラブルシューティングのために別の同じ VM に接続する必要がある場合に、複製された VM との LVM 名の競合を回避することができます。 詳細については、LVMRAID のドキュメントを参照してください。
  • ユニバーサル ディスク フォーマット (UDF) ファイル システムをマウントするためのカーネル サポートが必要です。 Azure での初回起動時に、ゲストにアタッチされている UDF 形式のメディアにより、プロビジョニング構成が Linux VM に渡されます。 Azure Linux エージェントは、その構成を読み取り、VM をプロビジョニングする UDF ファイル システムをマウントできる必要があります。 この手順を実行しないと、プロビジョニングは失敗します。
  • オペレーティング システム ディスクにスワップ パーティションを構成しないでください。 詳細については、以下の手順を参照してください。
  • Azure の VHD の仮想サイズはすべて、1 MB にアラインメントさせる必要があります。 未フォーマット ディスクから VHD に変換するときに、変換する前の未フォーマット ディスクのサイズが 1 MB の倍数であることを確かめる必要があります。 詳細については、以下の手順を参照してください。 Linux のインストールに関する注記も参照してください。

Note

"Cloud-init 21.2 以降では、UDF の要件はなくなりました"。 ただし、UDF モジュールが有効になっていないと、プロビジョニング中に CD-ROM がマウントされず、カスタム データが適用されません。 回避するには、ユーザー データを使用してカスタム データを適用します。 カスタム データとは異なり、ユーザー データは暗号化されません。 詳細については、「ユーザー データの形式」を参照してください。

  1. Hyper-V マネージャーで VM を選択します。

  2. [接続] を選択すると、VM のコンソール ウィンドウが開きます。

  3. /etc/sysconfig/network ファイルを作成または編集して次のテキストを追加します。

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. /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
    

    Note

    高速ネットワークを使用する場合、udev 規則を使用して、作成される合成インターフェイスをアンマネージドになるように構成する必要があります。 このアクションにより、NetworkManager がプライマリ インターフェイスと同じ IP を合成インターフェイスに割り当てるのを防ぐことができます。

    適用するには:

    sudo tee <<EOF /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules > /dev/null
    # 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!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  5. ネットワーク サービスが起動時に確実に開始されるようにします。

    sudo systemctl enable network
    
  6. RHEL リポジトリからパッケージをインストールできるように、Red Hat のサブスクリプションを登録します。

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. Azure 用にさらにカーネル パラメーターを含めるために、GRUB 構成でカーネルのブート行を変更します。 この変更を行うには、テキスト エディターで /etc/default/grub を開き、GRUB_CMDLINE_LINUX パラメーターを編集します。 次に例を示します。

    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
    

    Note

    /etc/default/grubENABLE_BLSCFG=true ではなく ENABLE_BLSCFG=false が存在する場合、ブート エントリと構成を管理するためにブート ローダー仕様 (BLS) に依存する grubeditgubby などのツールが RHEL 8 および 9 で正しく機能しない可能性があります。 ENABLE_BLSCFG が存在しない場合、既定の動作は false になります。

    この変更により、すべてのコンソール メッセージが最初のシリアル ポートに確実に送信され、シリアル コンソールとの対話が可能になります。これにより、Azure サポートによる問題のデバッグに役立ちます。 この構成では、ネットワーク インターフェイス カード (NIC) の新しい名前付け規則もオフになります。

    rhgb quiet crashkernel=auto
    

    クラウド環境では、すべてのログをシリアル ポートに送信する必要がある場合、グラフィカル ブートおよびクワイエット ブートは役に立ちません。 必要に応じて、crashkernel オプションの構成をそのままにしておくことができます。 このパラメーターにより、VM 内の使用可能なメモリ量が 128 MB 以上減少するため、VM のサイズが小さい場合、問題になる可能性があります。

  8. /etc/default/grub の編集を終了したら、次のコマンドを実行して grub 構成を再構築します。

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

    Note

    UEFI 対応 VM をアップロードする場合、grub を更新するコマンドは grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg です。

  9. SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。通常は、既定でそのように構成されています。 /etc/ssh/sshd_config を変更して、次の行を含めます。

    ClientAliveInterval 180
    
  10. WALinuxAgent パッケージ WALinuxAgent-<version> が Red Hat extras リポジトリにプッシュされました。 extras リポジトリを有効にします。

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  11. Azure Linux エージェント、cloud-init、その他の必要なユーティリティをインストールします。

    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. プロビジョニングを処理するように cloud-init を構成します。

    1. cloud-initwaagent を構成します。

      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
      

      Note

      特定の VM を移行する際に、汎用化イメージを作成しない場合、/etc/waagent.conf 構成で Provisioning.Agent=disabled を設定します。

    2. マウントを構成します。

      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. データ ソースを構成します。

      sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS"
      sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
      datasource_list: [ Azure ]
      datasource:
          Azure:
              apply_network_config: False
      EOF
      
    4. 既存のスワップ ファイルが構成されている場合は、削除します。

      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. cloud-init ログを構成します。

      sudo echo "Add console log file"
      sudo tee <<EOF /etc/cloud/cloud.cfg.d/05_logging.cfg > /dev/null
      
      # 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. スワップの構成:

    • オペレーティング システム ディスクにスワップ領域を作成しないでください。

      以前は、VM が Azure にプロビジョニングされた後に VM にアタッチされたローカルのリソース ディスクを使用してスワップ領域を構成するには、Azure Linux エージェントを使用して自動的に行われていました。 このアクションは、cloud-init によって処理されるようになりました。 リソース ディスクをフォーマットして、スワップ ファイルを作成するために、Linux エージェントを使用 "しないでください"。 /etc/waagent.conf 内の次のパラメーターを適宜変更します。

      ResourceDisk.Format=n
      ResourceDisk.EnableSwap=n
      
    • スワップのマウント、フォーマット、作成を行う場合は、次のいずれかの方法を使用できます。

      • カスタム データを使用して VM を作成するたびに、このコードを cloud-init 構成として渡します。 これがお勧めしているメソッドです。

      • イメージに組み込まれている cloud-init ディレクティブを使用します。これは、VM が作成されるたびにこの手順を実行します。

        sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
        sudo tee /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. プロビジョニング問題のトラブルシューティングに役立つ cloud-init テレメトリを構成します。

    sudo tee >> /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg << EOF
    # This config enables cloud-init to report provisioning telemetry to aid with troubleshooting
    Reporting:
      logging:
        type: log
      telemetry:
        type: hyperv
    EOF
    
  15. サブスクリプションを登録解除する場合は、次のコマンドを実行します。

    
    sudo subscription-manager unregister
    
  16. VM をプロビジョニング解除し、Azure でのプロビジョニング用に準備します。

    注意事項

    特定の VM を移行する際に、汎用化イメージを作成しない場合は、プロビジョニング解除手順をスキップします。 waagent -force -deprovision+user コマンドを実行すると、ソース マシンは使用できなくなります。 この手順は一般化されたイメージを作成することのみを目的としています。

    sudo rm -f /var/log/waagent.log
    sudo cloud-init clean --logs --seed
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  17. Hyper-V マネージャーで [アクション]>[シャットダウン] の順に選択します。 これで、Linux VHD を Azure にアップロードする準備が整いました。