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 名の競合を回避することができます。 詳細については、LVM と RAID のドキュメントを参照してください。
- ユニバーサル ディスク フォーマット (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 がマウントされず、カスタム データが適用されません。 回避するには、ユーザー データを使用してカスタム データを適用します。 カスタム データとは異なり、ユーザー データは暗号化されません。 詳細については、「ユーザー データの形式」を参照してください。
- Hyper-V マネージャーを使用した RHEL 7
- Hyper-V マネージャーを使用した RHEL 8/9 以降
- KVM を使用した RHEL 7
- KVM を使用した RHEL 8/9 以降
- VMware を使用した RHEL 7
- VMware を使用した RHEL 8/9 以降
- Kickstart を使用した RHEL 7
- Kickstart を使用した RHEL 8/9 以降
Hyper-V マネージャーで VM を選択します。
[接続] を選択すると、VM のコンソール ウィンドウが開きます。
/etc/sysconfig/network
ファイルを作成または編集して次のテキストを追加します。NETWORKING=yes HOSTNAME=localhost.localdomain
/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
ネットワーク サービスが起動時に確実に開始されるようにします。
sudo systemctl enable network
RHEL リポジトリからパッケージをインストールできるように、Red Hat のサブスクリプションを登録します。
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
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/grub
にENABLE_BLSCFG=true
ではなく ENABLE_BLSCFG=false が存在する場合、ブート エントリと構成を管理するためにブート ローダー仕様 (BLS) に依存する grubedit や gubby などのツールが RHEL 8 および 9 で正しく機能しない可能性があります。ENABLE_BLSCFG
が存在しない場合、既定の動作はfalse
になります。この変更により、すべてのコンソール メッセージが最初のシリアル ポートに確実に送信され、シリアル コンソールとの対話が可能になります。これにより、Azure サポートによる問題のデバッグに役立ちます。 この構成では、ネットワーク インターフェイス カード (NIC) の新しい名前付け規則もオフになります。
rhgb quiet crashkernel=auto
クラウド環境では、すべてのログをシリアル ポートに送信する必要がある場合、グラフィカル ブートおよびクワイエット ブートは役に立ちません。 必要に応じて、
crashkernel
オプションの構成をそのままにしておくことができます。 このパラメーターにより、VM 内の使用可能なメモリ量が 128 MB 以上減少するため、VM のサイズが小さい場合、問題になる可能性があります。/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
です。SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。通常は、既定でそのように構成されています。
/etc/ssh/sshd_config
を変更して、次の行を含めます。ClientAliveInterval 180
WALinuxAgent パッケージ
WALinuxAgent-<version>
が Red Hat extras リポジトリにプッシュされました。 extras リポジトリを有効にします。sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
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
プロビジョニングを処理するように
cloud-init
を構成します。cloud-init
のwaagent
を構成します。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
を設定します。マウントを構成します。
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
データ ソースを構成します。
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
既存のスワップ ファイルが構成されている場合は、削除します。
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
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
スワップの構成:
オペレーティング システム ディスクにスワップ領域を作成しないでください。
以前は、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
プロビジョニング問題のトラブルシューティングに役立つ
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
サブスクリプションを登録解除する場合は、次のコマンドを実行します。
sudo subscription-manager unregister
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
Hyper-V マネージャーで [アクション]>[シャットダウン] の順に選択します。 これで、Linux VHD を Azure にアップロードする準備が整いました。