Azure 用の CentOS ベースの仮想マシンの準備
注意事項
この記事では、間もなくサービス終了 (EOL) 状態になる Linux ディストリビューションである CentOS について説明します。 適宜、使用と計画を検討してください。 詳細については、「CentOS のサポート終了に関するガイダンス」を参照してください。
適用対象: ✔️ Linux VM ✔️ フレキシブルなスケール セット
CentOS ベースの Linux オペレーティング システム (OS) を格納した Azure 仮想ハード ディスク (VHD) を作成してアップロードする方法について説明します。 詳細については、以下を参照してください:
前提条件
この記事では、既に CentOS (または同様な派生版) Linux OS を VHD にインストールしていることを前提にしています。 .vhd ファイルを作成するツールはいくつかあります。 たとえば、Hyper-V などの仮想化ソリューションなどです。 詳細については、「Hyper-V の役割のインストールと VM の構成」を参照してください。
CentOS のインストールに関する注記
- Azure 用に Linux を準備する場合のその他のヒントについては、「Linux のインストールに関する一般的な注記」を参照してください。
- VHDX 形式は Azure ではサポートされていません。サポートされるのは固定 VHD のみです。 Hyper-V マネージャーまたは
convert-vhd
コマンドレットを使って、ディスクを VHD 形式に変換できます。 VirtualBox を使用する場合は、ディスクの作成時に、動的に割り当てられた既定値ではなく、[容量固定] を選択します。 - vfat カーネル モジュールをカーネル内で有効にする必要があります。
- Linux システムをインストールする場合は、Logical Volume Manager (LVM) (通常、多くのインストールで既定) ではなく標準パーティションを使用することをお勧めします。 パーティションを使うと、特に OS ディスクをトラブルシューティングのために他の同じ VM に接続する必要がある場合に、LVM 名とクローンされた VM との競合が回避されます。 LVM や RAID もデータ ディスクで使用できます。
- ユーザー定義関数 (UDF) ファイル システムをマウントするためのカーネル サポートが必要です。 Azure での最初の起動時に、ゲストに接続されている UDF でフォーマットされたメディアを使用して、プロビジョニング構成が Linux VM に渡されます。 Azure Linux エージェントまたは
cloud-init
は、その構成を読み取り、VM をプロビジョニングするために、UDF ファイル システムをマウントする必要があります。 - 2.6.37 より前の Linux カーネル バージョンは、大きい VM サイズの NUMA on Hyper-V をサポートしていません。 この問題は、主に、アップストリームの Centos 2.6.32 カーネルを使用した以前のディストリビューションに影響があり、Centos 6.6 (kernel-2.6.32-504) で修正されました。 2.6.37 より古いカスタム カーネルまたは2.6.32-504 より古い Red Hat Enterprise Linux (RHEL) ベースのカーネルを実行しているシステムでは、grub.conf のカーネル コマンドラインで、ブート パラメーター
numa=off
を設定する必要があります。 詳細については、Red Hat KB 436883 を参照してください。 - OS ディスクにスワップ パーティションを構成しないでください。
- Azure の VHD の仮想サイズはすべて、1 MB にアラインメントさせる必要があります。 未フォーマット ディスクから VHD に変換するときに、変換する前の未フォーマット ディスクのサイズが 1 MB の倍数であることを確かめる必要があります。 詳細については、Linux のインストールに関する注意事項に関するページを参照してください。
Note
Cloud-init 21.2 以降では、UDF の要件はなくなりました。 ただし、UDF モジュールが有効になっていないと、プロビジョニング中に CD-ROM がマウントされず、カスタム データが適用されません。 この状況を回避するには、ユーザー データを使ってカスタム データを適用します。 カスタム データとは異なり、ユーザー データは暗号化されません。 詳細については、「ユーザー データの形式」を参照してください。
CentOS 6.x
重要
CentOS 6 は EOL に達しており、CentOS コミュニティではサポートされなくなっています。 このバージョンにはこれ以上更新プログラムやセキュリティ パッチはリリースされなくなり、潜在的なセキュリティ リスクに対して脆弱になります。 システムの安全性と安定性を確保するために、より新しいバージョンの CentOS にアップグレードすることを強くお勧めします。 さらに支援が必要であれば、IT 部門またはシステム管理者に問い合わせてください。
Hyper-V マネージャーで VM を選択します。
[接続] を選択すると、VM のコンソール ウィンドウが開きます。
CentOS 6 では、
NetworkManager
が Azure Linux エージェントと干渉する可能性があります。 このパッケージをアンインストールします。sudo rpm -e --nodeps NetworkManager
/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
udev ルールを編集して、イーサネット インターフェイスの静的ルールが生成されないようにします。 これらのルールにより、Azure または Hyper-V で VM を複製する際に問題が発生する可能性があります。
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
起動時にネットワーク サービスが開始されるようにします。
sudo chkconfig network on
Azure データセンター内でホストされている OpenLogic のミラーを使用する場合は、
/etc/yum.repos.d/CentOS-Base.repo
ファイルを次のリポジトリに置き換えます。 この操作により、Azure Linux エージェントなどの追加のパッケージを含む [openlogic] リポジトリも追加されます。[openlogic] name=CentOS-$releasever - openlogic packages for $basearch baseurl=http://olcentgbl.trafficmanager.net/openlogic/$releasever/openlogic/$basearch/ enabled=1 gpgcheck=0 [base] name=CentOS-$releasever - Base #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #released updates [updates] name=CentOS-$releasever - Updates #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #additional packages that might be useful [extras] name=CentOS-$releasever - Extras #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #contrib - packages by Centos Users [contrib] name=CentOS-$releasever - Contrib #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/contrib/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Note
これ以降の説明では、少なくとも
[openlogic]
リポジトリを使っていることを前提とします。これは、Azure Linux エージェントのインストールに使われます。/etc/yum.conf
に次の行を追加します。http_caching=packages
現在の yum メタデータを消去し、最新のパッケージでシステムを更新します。
sudo yum clean all
以前のバージョンの CentOS 用のイメージを作成している場合を除き、すべてのパッケージを最新のものに更新することをお勧めします。
sudo yum -y update
このコマンドを実行すると、再起動が必要になることがあります。
省略可能: Linux Integration Services (LIS) 用ドライバーをインストールします。
重要
この手順は、CentOS 6.3 およびそれ以前では "必須" です。それ以降のリリースでは、この手順を省略できます。
sudo rpm -e hypervkvpd ## (might return an error if not installed, that's OK) sudo yum install microsoft-hyper-v
または、LIS ダウンロード ページの手動インストール手順に従って、RPM を VM にインストールします。
Azure Linux エージェントと依存関係をインストールします。
waagent
サービスを開始し、有効にします。sudo yum install python-pyasn1 WALinuxAgent sudo service waagent start sudo chkconfig waagent on
手順 3 で説明したように
NetworkManager
パッケージとNetworkManager-gnome
パッケージがまだ削除されていない場合、WALinuxAgent パッケージによりこれらのパッケージが削除されます。Azure 用に他のカーネル パラメーターを含めるには、grub 構成でカーネルのブート行を変更します。 この手順を行うには、テキスト エディターで
/boot/grub/menu.lst
を開き、既定のカーネルに次のパラメーターが含まれていることを確認します。console=ttyS0 earlyprintk=ttyS0 rootdelay=300
この変更により、すべてのコンソール メッセージが最初のシリアル ポートに送信され、メッセージを Azure での問題のデバッグに利用できるようになります。
次のパラメーターを "削除" することもお勧めします。
rhgb quiet crashkernel=auto
クラウド環境では、すべてのログをシリアル ポートに送信するため、グラフィカル ブートおよびクワイエット ブートは役立ちません。 必要に応じて
crashkernel
オプションは構成したままにすることができます。 ただし、このパラメーターにより、VM 内の使用可能なメモリ量が 128 MB 以上減少します。VM のサイズが小さいと、このことが問題になる可能性があります。重要
CentOS 6.5 およびそれ以前では、カーネル パラメーター
numa=off
も設定する必要があります。 詳細については、Red Hat KB 436883 を参照してください。Secure Shell サーバーがインストールされており、起動時に開始するように構成されていることを確認します。 通常これが既定の設定です。
OS ディスクにスワップ領域を作成しないでください。
Azure Linux エージェントは、VM が Azure にプロビジョニングされた後に VM に接続されたローカルのリソース ディスクを使用してスワップ領域を自動的に構成できます。 ローカル リソース ディスクは "一時" ディスクであるため、VM のプロビジョニングが解除されると空になることがあります。 Azure Linux エージェントのインストール後に (前の手順を参照)、
/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.
VM をプロビジョニング解除し、Azure でのプロビジョニング用に準備します。
sudo waagent -force -deprovision+user sudo export HISTSIZE=0
Note
特定の VM を移行する際に、一般化されたイメージを作成しない場合、プロビジョニング解除手順をスキップしてください。
Hyper-V マネージャーで [アクション]>[シャットダウン] の順に選択します。 これで、Linux VHD を Azure にアップロードする準備が整いました。
CentOS 7.0+
CentOS 7.0 以降を使用している場合は、次のセクションの手順に従います。
CentOS 7 (および同様な派生版) への変更
Azure 用の CentOS 7 VM の準備は、CentOS 6 と似ています。 注目すべき大きな違いがいくつかあります。
NetworkManager
パッケージが、Azure Linux エージェントと競合しなくなりました。 このパッケージは既定でインストールされますが、これを削除しないことをお勧めします。GRUB2 が、既定のブートローダーとして使用されるようになったため、カーネル パラメーターの編集手順が変更されました。 ("構成手順" に関するセクションを参照してください。)
XFS が既定のファイル システムになりました。 必要に応じて、引き続き ext4 ファイル システムを使用できます。
CentOS 8 Stream 以降では既定で
network.service
が含まれなくなったため、手動でインストールする必要があります。sudo yum install network-scripts sudo systemctl enable network.service
構成手順
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 NM_CONTROLLED=no
udev ルールを編集して、イーサネット インターフェイスの静的ルールが生成されないようにします。 これらのルールにより、Azure または Hyper-V で VM を複製する際に問題が発生する可能性があります。
sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
Azure データセンター内にホストされている
OpenLogic
ミラーを使用する場合は、/etc/yum.repos.d/CentOS-Base.repo ファイルを次のリポジトリに置き換えます。 この操作により、Azure Linux エージェント用のパッケージを含む [openlogic] リポジトリも追加されます。[openlogic] name=CentOS-$releasever - openlogic packages for $basearch baseurl=http://olcentgbl.trafficmanager.net/openlogic/$releasever/openlogic/$basearch/ enabled=1 gpgcheck=0 [base] name=CentOS-$releasever - Base #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #released updates [updates] name=CentOS-$releasever - Updates #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that might be useful [extras] name=CentOS-$releasever - Extras #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Note
これ以降の説明では、少なくとも
[openlogic]
リポジトリを使っていることを前提とします。これは、Azure Linux エージェントのインストールに使われます。現在の yum メタデータをクリアし、更新をインストールします。
sudo yum clean all
以前のバージョンの CentOS 用のイメージを作成している場合を除き、すべてのパッケージを最新のものに更新することをお勧めします。
sudo yum -y update
このコマンドを実行すると、再起動が必要になることがあります。
Azure 用に他のカーネル パラメーターを含めるには、grub 構成でカーネルのブート行を変更します。 この手順を行うには、テキスト エディターで
/etc/default/grub
を開き、GRUB_CMDLINE_LINUX
パラメーターを編集します。 次に例を示します。GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
この変更により、すべてのコンソール メッセージが最初のシリアル ポートに送信され、メッセージを Azure での問題のデバッグに利用できるようになります。 ネットワーク インターフェイス カードの新しい CentOS 7 名前付け規則もオフになります。 次のパラメーターを "削除" することもお勧めします。
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/centos/grub.cfg
です。 また、vfat カーネル モジュールをカーネル内で有効にする必要があります そうしないと、プロビジョニングが失敗します。必ず udf モジュールを有効にしてください。 それを削除または無効化すると、プロビジョニングまたは起動が失敗します。 _Cloud-init 21.2 以降では、UDF の要件はなくなりました。詳細については、ドキュメントの先頭を参照してください。)
VMware、VirtualBox、または KVM からイメージをビルドする場合、Hyper-V ドライバーが initramfs に含まれていることを確認します。
/etc/dracut.conf
を編集して、コンテンツを追加します。add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Initramfs を再構築します。
sudo dracut -f -v
Azure Linux エージェントと Azure VM 拡張機能用の依存関係をインストールします。
sudo yum install python-pyasn1 WALinuxAgent sudo systemctl enable waagent
プロビジョニングを処理する
cloud-init
をインストールします。sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
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
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 cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOF if [[ -f /mnt/swapfile ]]; then echo Removing swapfile - RHEL uses a swapfile by default swapoff /mnt/swapfile rm /mnt/swapfile -f fi echo "Add console log file" 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
スワップの構成:
OS ディスクにスワップ領域を作成しないでください。
以前は、Azure Linux エージェントは、VM が Azure にプロビジョニングされた後に VM に接続されたローカルのリソース ディスクを使用してスワップ領域を自動的に構成するために使用されていましたが、 この手順は
cloud-init
によって処理されるようになりました。 リソース ディスクをフォーマットして、スワップ ファイルを作成するために、Linux エージェントを使用 "しないでください"。/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
スワップ ファイルのマウント、フォーマット、作成を行う場合は、次のいずれかの方法を使用できます。
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 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.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"] EOF
次のコマンドを実行して VM をプロビジョニング解除し、Azure でのプロビジョニング用に準備します。
Note
特定の VM を移行する際に、一般化されたイメージを作成しない場合、プロビジョニング解除手順をスキップしてください。
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
Hyper-V マネージャーで [アクション]>[シャットダウン] の順に選択します。 これで、Linux VHD を Azure にアップロードする準備が整いました。
関連するコンテンツ
これで、CentOS Linux VHD を使用して Azure に新しい VM を作成する準備ができました。 .vhd ファイルを Azure に初めてアップロードする場合は、「Create a Linux VM from a custom disk (カスタム ディスクから Linux VM を作成する)」を参照してください。