次の方法で共有


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 との競合が回避されます。 LVMRAID もデータ ディスクで使用できます。
  • ユーザー定義関数 (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 部門またはシステム管理者に問い合わせてください。

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

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

  3. CentOS 6 では、NetworkManager が Azure Linux エージェントと干渉する可能性があります。 このパッケージをアンインストールします。

    sudo rpm -e --nodeps NetworkManager
    
  4. /etc/sysconfig/network ファイルを作成または編集して次のテキストを追加します。

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. /etc/sysconfig/network-scripts/ifcfg-eth0 ファイルを作成または編集して次のテキストを追加します。

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. 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
    
  7. 起動時にネットワーク サービスが開始されるようにします。

    sudo chkconfig network on
    
  8. 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 エージェントのインストールに使われます。

  9. /etc/yum.conf に次の行を追加します。

    http_caching=packages
    
  10. 現在の yum メタデータを消去し、最新のパッケージでシステムを更新します。

    sudo yum clean all
    

    以前のバージョンの CentOS 用のイメージを作成している場合を除き、すべてのパッケージを最新のものに更新することをお勧めします。

    sudo yum -y update
    

    このコマンドを実行すると、再起動が必要になることがあります。

  11. 省略可能: 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 にインストールします。

  12. Azure Linux エージェントと依存関係をインストールします。 waagent サービスを開始し、有効にします。

    sudo yum install python-pyasn1 WALinuxAgent
    sudo service waagent start
    sudo chkconfig waagent on
    

    手順 3 で説明したように NetworkManager パッケージと NetworkManager-gnome パッケージがまだ削除されていない場合、WALinuxAgent パッケージによりこれらのパッケージが削除されます。

  13. 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 を参照してください。

  14. Secure Shell サーバーがインストールされており、起動時に開始するように構成されていることを確認します。 通常これが既定の設定です。

  15. 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.
    
  16. VM をプロビジョニング解除し、Azure でのプロビジョニング用に準備します。

    sudo waagent -force -deprovision+user
    sudo export HISTSIZE=0
    

    Note

    特定の VM を移行する際に、一般化されたイメージを作成しない場合、プロビジョニング解除手順をスキップしてください。

  17. 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
    

構成手順

  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
    NM_CONTROLLED=no
    
  5. udev ルールを編集して、イーサネット インターフェイスの静的ルールが生成されないようにします。 これらのルールにより、Azure または Hyper-V で VM を複製する際に問題が発生する可能性があります。

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    
  6. 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 エージェントのインストールに使われます。

  7. 現在の yum メタデータをクリアし、更新をインストールします。

    sudo yum clean all
    

    以前のバージョンの CentOS 用のイメージを作成している場合を除き、すべてのパッケージを最新のものに更新することをお勧めします。

    sudo yum -y update
    

    このコマンドを実行すると、再起動が必要になることがあります。

  8. 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 のサイズが小さいと、このことが問題になる可能性があります。

  9. /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 の要件はなくなりました。詳細については、ドキュメントの先頭を参照してください。)

  10. VMware、VirtualBox、または KVM からイメージをビルドする場合、Hyper-V ドライバーが initramfs に含まれていることを確認します。

    1. /etc/dracut.conf を編集して、コンテンツを追加します。

      add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
      
    2. Initramfs を再構築します。

      sudo dracut -f -v
      
  11. Azure Linux エージェントと Azure VM 拡張機能用の依存関係をインストールします。

    sudo yum install python-pyasn1 WALinuxAgent
    sudo systemctl enable waagent
    
  12. プロビジョニングを処理する cloud-init をインストールします。

    sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
    • 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
    
    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
    
  13. スワップの構成:

    1. 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
      
    2. スワップ ファイルのマウント、フォーマット、作成を行う場合は、次のいずれかの方法を使用できます。

      • 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
        
  14. 次のコマンドを実行して 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
    
  15. Hyper-V マネージャーで [アクション]>[シャットダウン] の順に選択します。 これで、Linux VHD を Azure にアップロードする準備が整いました。

これで、CentOS Linux VHD を使用して Azure に新しい VM を作成する準備ができました。 .vhd ファイルを Azure に初めてアップロードする場合は、「Create a Linux VM from a custom disk (カスタム ディスクから Linux VM を作成する)」を参照してください。