Language and Page Formatting Options

Red Hat Subscription Management での仮想マシンサブスクリプションの設定

Red Hat Subscription Management 2022

virt-who を使用したホストベースのサブスクリプションの管理

概要

本ガイドでは、Red Hat Subscription Management でサブスクリプションを準備し、virt-who を設定し、仮想マシンを登録してハイパーバイザーからサブスクリプションを継承する方法を説明します。

第1章 はじめに

以下の仮想化プラットフォームでは、Red Hat Enterprise Linux 仮想マシンのホストベースのサブスクリプションを使用できます。

  • Red Hat Virtualization
  • Red Hat Enterprise Linux Virtualization (KVM)
  • Red Hat OpenStack Platform
  • VMware vSphere
  • Microsoft Hyper-V
  • OpenShift Virtualization

1.1. ホストベースのサブスクリプション

仮想マシンは、物理サブスクリプションからのエンタイトルメントを使用する代わりに、ホストベースのサブスクリプションを使用できます。ホストベースのサブスクリプションはハイパーバイザーに割り当てられ、ハイパーバイザーが仮想マシンにサブスクリプションを提供できるようにします。多くのホストベースのサブスクリプションは、無制限の仮想マシンのエンタイトルメントを提供します。

仮想マシンがハイパーバイザーからサブスクリプションを継承できるようにするには、virt-who をインストールして設定する必要があります。virt-who は仮想化プラットフォームをクエリーし、ハイパーバイザーおよび仮想マシン情報を Red Hat Subscription Management に報告します。

仮想マシンが自動割り当てが有効で、十分なホストベースのサブスクリプションが利用可能な場合には、以下のいずれかの動作が発生します。

  • 仮想マシンが virt-who によって報告され、ホストベースのサブスクリプションがハイパーバイザーに割り当てられている場合、仮想マシンはハイパーバイザーからサブスクリプションを継承します。
  • 仮想マシンが virt-who によって報告され、ハイパーバイザーが Subscription Management に登録されていて、ホストベースのサブスクリプションが割り当てられていない場合は、ホストベースのサブスクリプションがハイパーバイザーに割り当てられ、仮想マシンによって継承されます。
  • 仮想マシンまたはそのハイパーバイザーが virt-who によって報告されていない場合、サブスクリプション管理は、仮想マシンに最大 7 日間有効な一時サブスクリプションを付与します。更新された情報を virt-who が報告すると、Subscription Management は仮想マシンで実行しているハイパーバイザーを特定し、永続的なサブスクリプションを仮想マシンに割り当てることができます。

auto-attach が有効になっているものの、virt-who が実行していない場合や、ホストベースのサブスクリプションが利用できない場合、Subscription Management は物理サブスクリプションを仮想マシンに割り当てます。これにより、意図したよりも多くのエンタイトルメントが消費される可能性があります。

自動アタッチが有効になっていない場合には、仮想マシンはホストベースのサブスクリプションを使用できません。

注記

Red Hat Enterprise Linux 8.0、8.1、8.2 の System Purpose add-ons have no effect on the auto-attach feature アドオンは自動アタッチ機能には影響しません。

サブスクリプションに virt-who が必要かどうかを確認するには、カスタマーポータル (https://access.redhat.com) にログインし、サブスクリプション > サブスクリプションの使用率 の順に移動し、サブスクリプションを選択します。SKU DetailsVirt-Who: Required が表示された場合は、そのサブスクリプションを使用するように virt-who を設定する必要があります。

仮想マシンのサブスクリプションプロセス

以下の図では、仮想マシンが virt-who で報告されていない場合のサブスクリプションワークフローを紹介しています。

仮想マシンのサブスクリプションプロセス

1 仮想マシンは、Subscription Management からサブスクリプションを要求します。

2 サブスクリプション管理は、仮想マシンが属するハイパーバイザーを決定する間、仮想マシンに最大 7 日間有効な一時サブスクリプションを付与します。

3 virt-who がハイパーバイザーまたは仮想化マネージャーに接続し、その仮想マシンに関する情報を要求します。

4 ハイパーバイザーまたは仮想化マネージャーが、それぞれの UUID を含む仮想マシンの一覧を virt-who に返します。

5 virt-who は、仮想マシンとそのハイパーバイザーのリストを Subscription Management に報告します。

6 サブスクリプション管理は、十分なエンタイトルメントが利用可能であれば、仮想マシンに永続的なサブスクリプションを割り当てます。

関連情報

Red Hat サブスクリプションモデルの詳細は、Red Hat Subscription Management ワークフローの概要 を参照してください。

1.2. 設定の概要

仮想マシンがハイパーバイザーからサブスクリプションを継承できるようにするには、以下の手順を実行します。

前提条件

  • ホストベースのサブスクリプションで、使用するすべてのハイパーバイザーに対応するのに十分なエンタイトルメントがあることを確認してください。
  • Microsoft Hyper-V の場合は、Red Hat Enterprise Linux 仮想マシンを実行する各ハイパーバイザーで、有効期限のないパスワードで読み取り専用の virt-who ユーザーを作成します。
  • VMware vSphere の場合は、vCenter Server で有効期限のないパスワードで読み取り専用の virt-who ユーザーを作成します。この virt-who ユーザーには、最低でも vCenter Data Center のすべてのオブジェクトに対する読み取り専用アクセスが必要です。
  • OpenShift Virtualization の場合、Service Account を作成し、OpenShift クラスターマスターの admin ロールを付与します。virt-who は OpenShift クラスターに接続するのに Service Account Token を必要とします。

手順の概要

  1. 「各仮想化プラットフォームの virt-who 設定」:本セクションの表を使用して、仮想化プラットフォームに virt-who をインストールおよび設定する方法を計画します。
  2. 2章ホストベースのサブスクリプションのハイパーバイザーへの割り当て:使用する予定のハイパーバイザーすべてにホストベースのサブスクリプションを割り当てます。
  3. 4章virt-who の設定:個別の設定ファイルを作成して、virt-who をハイパーバイザーに接続します。
  4. 5章ホストベースのサブスクリプションを使用するように仮想マシンを登録:仮想マシンを登録し、自動割り当てを有効にします。

1.3. 各仮想化プラットフォームの virt-who 設定

virt-who は、仮想化タイプおよびハイパーバイザーまたは仮想化マネージャーなどの情報を指定するファイルを使用して設定されます。サポートされている設定は、仮想化プラットフォームによって異なります。

  • 各設定ファイルは /etc/virt-who.d/ ディレクトリーに保存されます。各ハイパーバイザーまたは仮想化マネージャー用に個別の設定ファイルを作成する必要があります。

virt-who 設定ファイルの例

以下の例は、Microsoft Hyper-V ハイパーバイザーの個々の virt-who 設定ファイルを示しています。

[hypervisor1]
type=hyperv
server=hypervisor1.example.com
username=virt_who_user
encrypted_password=bd257f93d@482B76e6390cc54aec1a4d
hypervisor_id=hostname
owner=1234567

type および server の値は仮想化プラットフォームによって異なります。以下の表は、より詳細な情報を提供します。

username は、Microsoft Hyper-V または VMware vCenter の読み取り専用ユーザーを指します。virt-who を設定する前に作成する必要があります。virt-who は、このアカウントを使用して仮想マシンの一覧を取得します。Red Hat ハイパーバイザー専用の virt-who ユーザーは必要ありません。

各仮想化プラットフォームに必要な設定

以下の表を使用して、virt-who 設定を計画します。

サポート対象の仮想化プラットフォーム設定ファイルで指定する型設定ファイルに指定されたサーバーvirt-who がインストールされているサーバー

Red Hat Virtualization

RHEL Virtualization (KVM)

Red Hat OpenStack Platform

libvirt

必須ではありません。

各ハイパーバイザー

VMware vSphere

esx

vCenter Server

専用の RHEL サーバー

Microsoft Hyper-V

hyperv

ハイパーバイザー

専用の RHEL サーバー

OpenShift Virtualization

kubevirt

OpenShift Cluster Master

専用の RHEL サーバー

重要

rhevm および xen のハイパーバイザータイプはサポート対象外です。

1.4. virt-who 一般的な設定

注記

/etc/sysconfig/virt-who は次のメジャーリリースではサポートされず、グローバル設定ファイルは /etc/virt-who.conf で置き換えられます (つまり'VIRTWHO_DEBUG', 'VIRTWHO_ONE_SHOT', 'VIRTWHO_INTERVAL', 'HTTPS_PROXY, NO_PROXY')。

一般的な設定ファイル (/etc/virt-who.conf にあります) は、virt-who のインストール時に自動的に作成されます。デフォルト値を使用するか、必要に応じてこのファイルを編集できます。3 つの特別なセクションがあります ([global]、[defaults]、および [system_environment])。

グローバルセクションの設定は、アプリケーションの全体的な動作に影響を与えます。

例 : グローバルセクション

[global]
interval=3600 1
debug=True 2

1
接続されているハイパーバイザーの変更を確認する頻度 (秒)。また、マッピングが報告される頻度にも影響します。仮想マシンには最長で 7 日間の一時的なサブスクリプションが付与されるため、頻繁な照会は必要なく、使用環境のサイズに適した間隔を選択できます。
2
デバッグ出力の有効化

可能なデフォルトの設定は、/etc/virt-who.d/.conf にある設定のデフォルトとして適用されます。このセクションのオプションを有効にすると、/etc/virt-who.d/.conf で再度設定する必要はありません。

例 : デフォルトセクション

[defaults]
owner=1234567 1
hypervisor_id=hostname 2

1
ハイパーバイザーが属する組織。ハイパーバイザーで subscription-manager orgs を実行して組織を見つけることができます。
2
ハイパーバイザーの識別方法は、uuid、hostname、hwuuid のいずれかです。

system_environment の設定はシステムの環境に書き込まれ、プロセスの実行中は利用可能です。virt-who がサービスとして起動されたか、コマンドラインから起動されたかにかかわらず、この設定が使用されます。

例 : system_environment セクション

[system_environment]
http_proxy= https://proxy.example.com:443 1
no_proxy=* 2

1
virt-who の通信に HTTP プロキシーを使用します。
2
このサーバーからの virt-who 通信に HTTP プロキシーを使用したくない場合は、no_proxy を * に設定します。
注記

[system_environment] セクションは、virt-who-0.30.x-1.el8 (RHEL 8.4) からサポートされています。旧バージョンの virt-who をお使いの方は、/etc/sysconfig/virt-who で HTTP_PROXY、NO_PROXY を設定してください。

第2章 ホストベースのサブスクリプションのハイパーバイザーへの割り当て

以下の手順に従って、登録済みのハイパーバイザーに Red Hat Enterprise Linux for Virtual Datacenters などのホストベースのサブスクリプションを割り当てます。

新しいハイパーバイザーを登録するには、Subscription Manager の使用および設定 を参照してください。クエリーするように virt-who を設定する前に、ハイパーバイザーを登録する必要があります。

前提条件

  • ホストベースのサブスクリプションで、使用するすべてのハイパーバイザーに対応するのに十分なエンタイトルメントがあることを確認してください。

Web UI の手順

  1. カスタマーポータル (https://access.redhat.com) にログインします。
  2. サブスクリプション > システム に移動し、ハイパーバイザーの名前をクリックします。
  3. サブスクリプション タブをクリックします。
  4. Attach Subscriptions をクリックします。
  5. ホストベースのサブスクリプションを選択し、Attach Subscriptions をクリックします。

ハイパーバイザーごとに、この手順を繰り返します。

CLI の手順

  1. ハイパーバイザーで、ホストベースのサブスクリプションのプール ID を特定して書き留めます。

    # subscription-manager list --all --available --matches 'Host-based Subscription Name'
  2. ホストベースのサブスクリプションをハイパーバイザーに割り当てます。

    # subscription-manager attach --pool=Pool_ID
  3. ホストベースのサブスクリプションが割り当てられていることを確認します。

    # subscription-manager list --consumed

ハイパーバイザーごとに、この手順を繰り返します。

第3章 virt-who ホストの準備

以下の手順を使用して、VMware vCenter および Microsoft Hyper-V 用の virt-who サービスを実行するように Red Hat Enterprise Linux 7 サーバーを設定します。サーバーは、物理または仮想のいずれかです。

Red Hat ハイパーバイザー用に別の virt-who ホストは必要ありません。

手順

  1. Red Hat Enterprise Linux 7 サーバーをインストールします。CLI 環境のみが必要です。詳細は Red Hat Enterprise Linux 7 インストールガイド を参照してください。
  2. システムを登録します。

    # subscription-manager register --auto-attach
  3. virt-who とサブスクリプションサービスとの間の通信用にネットワークポートを開きます。

    # firewall-cmd --add-port="443/tcp"
    # firewall-cmd --add-port="443/tcp" --permanent
  4. virt-who と各ハイパーバイザーまたは仮想化マネージャーとの間の通信用にネットワークポートを開きます。

    • VMware vCenter: TCP ポート 443
    • Microsoft Hyper-V: TCP ポート 5985
  5. virt-who をインストールします。

    # yum install virt-who
  6. 必要に応じて、/etc/virt-who.conf ファイルを編集してグローバル設定を変更または追加します。これらの設定は、このサーバーからのすべての virt-who 接続に適用されます。

    • VIRTWHO_INTERVAL の値を、仮想化プラットフォームにクエリーする頻度 (分単位) を指定するように変更します。仮想マシンには最長で 7 日間の一時的なサブスクリプションが付与されるため、頻繁な照会は必要なく、使用環境のサイズに適した間隔を選択できます。ほとんどの環境では、1 日 1 回 (1440) が適しています。
    • virt-who 通信に HTTP プロキシーを使用する場合は、プロキシーを指定する行を追加します。

      http_proxy=https://proxy.example.com:443
    • このサーバーからの virt-who 通信に HTTP プロキシーを使用しない場合は、以下の行を追加します。

      NO_PROXY=*
  7. virt-who サービスを開始して有効にします。

    # systemctl enable --now virt-who

第4章 virt-who の設定

重要

virt-who を設定するための環境変数の使用および sysconfig ファイルの使用は非推奨です。次のメジャーリリースでは、これらの使用は無視されます。

サポートされる virt-who 設定は、仮想化プラットフォームごとに異なります。

4.1. Red Hat ハイパーバイザーでの virt-who のインストールおよび設定

以下の手順に従って、Red Hat Enterprise Linux Virtualization (KVM)、Red Hat Virtualization、Red Hat OpenStack Platform の各ハイパーバイザーに virt-who をインストールおよび設定します。

前提条件

  • ハイパーバイザーを Red Hat Subscription Management に登録する
  • Red Hat Virtualization Host (RHVH) を使用している場合は、virt-who の最小バージョンが利用可能になるように、これを最新バージョンに更新します。virt-who は RHVH でデフォルトで利用できますが、rhel-7-server-rhvh-4-rpms リポジトリーから個別に更新することはできません。

手順

  1. ハイパーバイザーに virt-who をインストールします。

    # yum install virt-who
  2. 必要に応じて、/etc/virt-who.conf ファイルを編集してグローバル設定を変更または追加します。virt-who はローカルにインストールされているため、この設定はこのハイパーバイザーにのみ適用されます。

    • VIRTWHO_INTERVAL の値を変更して、virt-who がハイパーバイザーをクエリーする頻度を分単位で指定します。仮想マシンには最長で 7 日間の一時的なサブスクリプションが付与されるため、頻繁な照会は必要なく、使用環境のサイズに適した間隔を選択できます。ほとんどの環境では、1 日 1 回 (1440) が適しています。
    • virt-who 通信に HTTP プロキシーを使用する場合は、プロキシーを指定する行を追加します。

      http_proxy=https://proxy.example.com:443
    • このサーバーからの virt-who 通信に HTTP プロキシーを使用しない場合は、以下の行を追加します。

      NO_PROXY=*
      注記

      NO_PROXY=* は使用できますが、/etc/sysconfig/virt-who でのみ使用できます。

      NO_PROXY は、/etc/virt-who.conf で有効な設定ではありません。

  3. テンプレート設定ファイルを新規の個別の設定ファイルにコピーします。

    # cp /etc/virt-who.d/template.conf /etc/virt-who.d/local.conf
  4. 作成した設定ファイルを編集して、サンプルの値を、お使いの設定に固有の値に変更します。

    [local] 1
    type=libvirt 2
    owner=1234567 3
    hypervisor_id=hostname 4
    1
    この設定ファイルは virt-who のこのインスタンスによって管理される唯一の設定ファイルであるため、一意となる必要はありません。
    2
    この virt-who 接続が Red Hat ハイパーバイザーへの接続であることを指定します。
    3
    ハイパーバイザーが属する組織。ハイパーバイザーで subscription-manager orgs を実行して組織を見つけることができます。
    4
    ハイパーバイザーを特定する方法を指定します。ホスト名 を使用して、サブスクリプション管理に意味のあるホスト名を提供します。ハイパーバイザーの名前が変更された場合は、uuid を使用して重複を避けることができます。個別のハイパーバイザーには hwuuid を使用しないでください。
  5. virt-who サービスを開始して有効にします。

    # systemctl enable --now virt-who

ハイパーバイザーごとに、この手順を繰り返します。

4.2. virt-who で VMware vCenter に接続する設定

以下の手順を使用して、virt-who が VMware vCenter Server に接続するよう設定します。

前提条件

  • vCenter Server で読み取り専用の virt-who ユーザーを作成します。この virt-who ユーザーには、最低でも vCenter Data Center のすべてのオブジェクトに対する読み取り専用アクセスが必要です。
  • Red Hat Enterprise Linux サーバーで virt-who ホストを準備します。

手順

  1. virt-who ホストで、virt-who-password ユーティリティーを使用して virt-who ユーザーのパスワードを暗号化します。

    # virt-who-password

    プロンプトが表示されたら、virt-who ユーザーのパスワードを入力し、暗号化された形式のパスワードを書き留めます。

  2. テンプレート設定ファイルを新規の個別の設定ファイルにコピーします。

    # cp /etc/virt-who.d/template.conf /etc/virt-who.d/vcenter1.conf

    トラブルシューティング時に設定ファイルを簡単に特定できるようにするには、VMware vCenter ホスト名を新規ファイル名として使用します。この例では、ホスト名は vcenter1 です。

  3. 作成した設定ファイルを編集して、サンプルの値を、お使いの設定に固有の値に変更します。

    [vcenter1] 1
    type=esx 2
    server=vcenter1.example.com 3
    username=virt_who_user 4
    encrypted_password=bd257f93d@482B76e6390cc54aec1a4d 5
    owner=1234567 6
    hypervisor_id=hostname 7
    filter_hosts=esx1.example.com, esx2.example.com 8
    1
    名前は個別の設定ファイルごとに一意でなければなりません。vCenter Server のホスト名を使用して、各ハイパーバイザーの設定ファイルを簡単に特定できます。
    2
    この virt-who 接続が VMware vCenter Server への接続であることを指定します。
    3
    vCenter サーバーの FQDN。
    4
    vCenter サーバーでの virt-who ユーザーの名前。
    5
    virt-who ユーザーの暗号化されたパスワード。
    6
    ハイパーバイザーが属する組織。ハイパーバイザーで subscription-manager orgs を実行して、組織を見つけることができます。
    7
    ハイパーバイザーを特定する方法を指定します。ホスト名 を使用して、サブスクリプション管理に意味のあるホスト名を提供します。ハイパーバイザーの名前が変更された場合には、uuid または hwuuid を使用して重複を防ぐことができます。
    8
    一部のハイパーバイザーが Red Hat Enterprise Linux 仮想マシンを実行しない場合、そのハイパーバイザーは virt-who により報告される必要はありません。以下のオプションのいずれかを使用してハイパーバイザーにフィルターを設定できます。ワイルドカードと正規表現がサポートされます。名前に特殊文字が含まれている場合は、引用符で囲みます。
    • filter_hosts または exclude_hosts: 指定した hypervisor_id に従って、ハイパーバイザーのコンマ区切りリストを指定します。たとえば、ハイパーバイザーがホスト名で識別される場合は、そのハイパーバイザーをホスト名に含めるか、または除外する必要があります。
    • filter_host_parents または exclude_host_parents: クラスターのコンマ区切りリストを指定します。フィルターが設定されたクラスターのハイパーバイザーは、virt-who によって報告されます。除外されたクラスターのハイパーバイザーは、virt-who によって報告されません。
  4. virt-who サービスを再起動します。

    # systemctl restart virt-who

各 vCenter Server について、この手順を繰り返します。

4.3. Microsoft Hyper-V に接続するための virt-who の設定

以下の手順を使用して、virt-who が Microsoft Hyper-V ハイパーバイザーに接続するように設定します。

前提条件

  • Red Hat Enterprise Linux 9 以降
  • Red Hat Enterprise Linux サーバーで virt-who ホストを準備しておく。
  • ハイパーバイザーの基本的な認証モードを有効にしておく。
  • ハイパーバイザーでリモート管理を有効にしておく。
  • ハイパーバイザーに読み取り専用の virt-who ユーザーを作成しておく。

手順

  1. virt-who ホストで、virt-who-password ユーティリティーを使用して、ハイパーバイザーの virt-who ユーザーのパスワードを暗号化します。

    # virt-who-password

    プロンプトが表示されたら、virt-who ユーザーのパスワードを入力し、暗号化された形式のパスワードを書き留めます。

  2. テンプレート設定ファイルを新規の個別の設定ファイルにコピーします。

    # cp /etc/virt-who.d/template.conf /etc/virt-who.d/hyperv1.conf

    トラブルシューティング時に設定ファイルを簡単に特定できるようにするには、ハイパーバイザーのホスト名を新規ファイル名として使用します。この例では、ホスト名は hyperv1 です。

  3. 作成した設定ファイルを編集して、サンプルの値を、お使いの設定に固有の値に変更します。

    [hyperv1] 1
    type=hyperv 2
    server=hyperv1.example.com 3
    username=virt_who_user 4
    encrypted_password=bd257f93d@482B76e6390cc54aec1a4d 5
    owner=1234567 6
    hypervisor_id=hostname 7
    1
    名前は個別の設定ファイルごとに一意でなければなりません。ハイパーバイザーのホスト名を使用して、各ハイパーバイザーの設定ファイルを簡単に特定できます。
    2
    この virt-who 接続が Microsoft Hyper-V ハイパーバイザーに属することを指定します。
    3
    Hyper-V ハイパーバイザーの FQDN。
    4
    ハイパーバイザーの virt-who ユーザーの名前。
    5
    virt-who ユーザーの暗号化されたパスワード。
    6
    このハイパーバイザーが属する組織。ハイパーバイザーで subscription-manager orgs を実行して組織を見つけることができます。
    7
    ハイパーバイザーを特定する方法を指定します。ホスト名 を使用して、サブスクリプション管理に意味のあるホスト名を提供します。ハイパーバイザーの名前が変更された場合は、uuid を使用して重複を避けることができます。個別のハイパーバイザーには hwuuid を使用しないでください。
  4. virt-who サービスを再起動します。

    # systemctl restart virt-who

ハイパーバイザーごとに、この手順を繰り返します。

4.4. OpenShift Virtualization に接続するための virt-who の設定

サポート対象のプラットフォーム

virt-who による OpenShift Virtualization のサポート状況。

  • virt-who-0.28.x-1.el7 (RHEL 7.9)
  • virt-who-0.29.x-1.el8 (RHEL 8.3)

手順

  1. サブスクライブするクラスターで、プロジェクトおよび、virt-who というサービスアカウントを作成します。

    $ oc new-project virt-who
    $ oc create serviceaccount virt-who
  2. ノードおよび仮想マシンインスタンスを一覧表示するためのクラスターロールを作成します。

    $ oc create clusterrole lsnodes --verb=list --resource=nodes
    $ oc create clusterrole lsvmis --verb=list --resource=vmis
  3. クラスターロールバインディングの作成

    $ oc adm policy add-cluster-role-to-user lsnodes system:serviceaccount:virt-who:virt-who
    $ oc adm policy add-cluster-role-to-user lsvmis system:serviceaccount:virt-who:virt-who
  4. virt-who システムアカウントが、実行中のすべての VM をリストアップする権限を持っていることを確認します。

    $ oc get vmis -A --as=system:serviceaccount:virt-who:virt-who
  5. ホストに virt-who をインストールします (OpenShift Virtualization 上で動作する VM でもよい)。

    [virtwho-host]$ yum install virt-who
  6. サブスクライブしているホストで、所有者番号を見つけます。

    $ subscription-manager orgs
  7. テンプレート設定ファイルを新規の個別の設定ファイルにコピーします。トラブルシューティングの際に設定ファイルを簡単に特定できるように、クラスター API のホスト名を使用します。この例では、ホスト名は openshift-cluster-1 です。

    [virtwho-host]# cp /etc/virt-who.d/template.conf /etc/virt-who.d/openshift-cluster-1.conf
    [cnv]
    type=kubevirt
    kubeconfig=/root/.kube/config
    hypervisor_id=hostname
    owner=<owner_number>
  8. virt-who サービスアカウントのトークンを取得します。

    # oc serviceaccounts get-token virt-who
  9. /usr/bin/oc が利用できない場合は、/usr/bin/oc をインストールし、トークンを使用してログインして有効な kubeconfig ファイルを作成します。url を指定して、クラスター api を指定する必要があります。以下は例になります。

    [virtwho-host]# oc login https://api.testcluster-1.example.org:6443 --token=<token>
    1. kubeconfig ファイルで OpenShift Virtualization の certificate-authority (CA) 証明書を使用するには、クラスターから抽出してコントローラーデーモンとして virt-who を実行しているシステムのファイルに保存します。

      oc get secret -n openshift-kube-apiserver-operator loadbalancer-serving-signer -o jsonpath='{.data.tls\.crt}' | base64 -d > $cluster-ca.pem
    2. kubeconfig ファイルは、抽出した CA 証明書を含めるように変更します。以下は例になります。

      [virtwho-host]$ cat /root/.kube/config
      apiVersion: v1
      clusters:
      - cluster:
          server: https://api.testcluster.example.org:6443
          certificate-authority: /root/testcluster-ca.pem
        name: api-testcluster-example-org:6443
      contexts:
      - context:
          cluster: api-test-cluster-example-org:6443
          namespace: default
  10. サービスを開始する前に、設定を手動でテストできます。

    [virtwho-host]# virt-who --print
注記

jq プログラムがインストールされている場合は、# virt-who --print | jq のように、そのプログラムを使用して出力を簡素化できます。

  1. virt-who サービスを有効にします。

    [virtwho-host]# systemctl enable virt-who
  2. virt-who サービスを再起動して、新しい設定を使用します。

    [virtwho-host]# systemctl restart virt-who

virt-who ログは、/var/log/rhsm/rhsm.log にあります。このファイルで、設定または接続エラーを確認できます。

第5章 ホストベースのサブスクリプションを使用するように仮想マシンを登録

自動割り当てで仮想マシンを登録し、ハイパーバイザーからサブスクリプションを継承できるようにします。

前提条件

  • ホストベースのサブスクリプションを仮想マシンのハイパーバイザーに割り当てます。
  • virt-who を設定して、仮想マシンのハイパーバイザーをクエリーします。
  • 仮想マシンのすべてのハイパーバイザーがホストベースのサブスクリプションを割り当て、virt-who にレポートされるようにするか、仮想マシンの特定のハイパーバイザーへの移行を制限できるようにします。

Web UI の手順

  1. カスタマーポータル (https://access.redhat.com) にログインします。
  2. サブスクリプション > システム に移動し、仮想マシンの名前をクリックします。
  3. サブスクリプション タブをクリックします。
  4. Run Auto-Attach をクリックします。

仮想マシンごとに、この手順を繰り返します。

CLI の手順

  1. auto-attach オプションを使用して仮想マシンを登録します。

    # subscription-manager register --auto-attach
  2. プロンプトが表示されたら、ユーザー名とパスワードを入力します。

仮想マシンごとに、この手順を繰り返します。

仮想マシンがすでに virt-who によって報告されている場合、仮想マシンはそのハイパーバイザーからサブスクリプションを継承します。

virt-who により仮想マシンが報告されていないと、仮想マシンは一時サブスクリプションを受け取り、Subscription Management は virt-who が仮想マシンを実行しているハイパーバイザーに関する情報を提供するのを待ちます。virt-who がこの情報を提供すると、仮想マシンはそのハイパーバイザーからサブスクリプションを継承します。

第6章 virt-who のトラブルシューティング方法

virt-who ステータスの確認

virt-who サービスのステータスを確認します。

# systemctl status virt-who.service

デバッグロギング

/var/log/rhsm/rhsm.log ファイルをチェックします。このファイルに、virt-who はデフォルトでアクティビティーすべてをログに記録します。

より詳細なログを取るためには、/etc/virt-who.conf ファイルでデバッグオプションを有効にしてください。

[global]
debug=True

変更を反映するために virt-who サービスを再起動します。

根本的な問題が解決したら、/etc/virt-who.conf ファイルを変更してデバッグを無効にしてから、virt-who サービスを再起動します。

設定オプションのテスト

必要に応じて変更を加え、結果をテストします。virt-who は、設定ファイル、認証情報、仮想化プラットフォームへの接続のテストに役立つ 3 つのオプションを提供します。

  • virt-who --one-shot コマンドは、設定ファイルを読み込み、仮想マシンのリストを取得して、Red Hat Satellite や Red Hat Subscription Management などのサブスクリプション管理システムに送信し、すぐに終了します。
  • virt-who --print コマンドは設定ファイルを読み取り、仮想マシンの一覧を出力しますが、サブスクリプション管理システムには送信されません。
  • RHEL 9 Beta 以降では、virt-who --status コマンドが設定ファイルを読み込んで、ソースシステムと宛先システムの両方の接続状態の概要を出力します。

    • virt-who --status コマンドに --json オプションを付けると、各設定の追加の接続性データが JSON 形式で提供されます。

virt-who --one-shot コマンドおよび virt-who --print コマンドの期待される出力は、ハイパーバイザーとその仮想マシンのリストで、JSON 形式です。以下は、VMware vSphere インスタンスからの抜粋です。すべてのハイパーバイザーからの出力は以下の設定になっています。

{
    "guestId": "422f24ed-71f1-8ddf-de53-86da7900df12",
    "state": 5,
    "attributes": {
        "active": 0,
        "virtWhoType": "esx",
        "hypervisorType": "vmware"
    }
},

virt-who --status コマンドの期待される出力は、virt-who の各設定の接続ステータスのプレーンテキストの要約です。

+-------------------------------------------+
           Configuration Status
+-------------------------------------------+
Configuration Name: esx_config1
Source Status: success
Destination Status: success

Configuration Name: hyperv-55
Source Status: failure
Destination Status: failure

virt-who --status コマンドに --json オプションを付けた場合の期待される出力は、最後に成功した実行を含む各設定に関する追加情報を JSON 形式で提供します。この出力には、各設定の成功または失敗のステータスの詳細も含まれています。

  • ステータスレポートが設定の成功を示す場合、JSON 出力には、最後に成功した実行サイクルで virt-who が報告したハイパーバイザーおよびゲストの数が含まれます。
  • ステータスレポートが設定の失敗を示す場合、JSON 出力には関連するエラーメッセージが表示されます。
"configurations": [
    {
        "name":"esx-conf1",
        "source":{
            "connection":"https://esx_system.example.com",
            "status":"success",
            "last_successful_retrieve":"2020-02-28 07:25:25 UTC",
            "hypervisors":20,
            "guests":37
        },
        "destination":{
            "connection":"candlepin.example.com",
            "status":"success",
            "last_successful_send":"2020-02-28 07:25:27 UTC",
            "last_successful_send_job_status":"FINISHED"
        }
    },
    {
        "name":"hyperv-55",
        "source":{
            "connection":"windows10-3.company.com",
            "status":"failure",
            "message":"Unable to connect to server: invalid credentials",
            "last_successful_retrieve":null
        },
        "destination":{
            "connection":"candlepin.company.com",
            "status":"failure",
            "message":"ConnectionRefusedError: [Errno 111] Connection refused",
            "last_successful_send":null,
            "last_successful_send_job_status":null
        }
    }
]
}

virt-who --status コマンドは、--debug オプションおよび --config オプションとともに使用して、設定ファイルに関する追加情報を提供することもできます。

複数の virt-who 設定ファイルを使用する場合の問題の特定

1 つのサーバーに virt-who 設定ファイルが複数ある場合は、1 度に 1 つのファイルを別のディレクトリーに移動し、各ファイルの移動後にテストを行います。問題が発生しなくなった場合は、問題の原因は直近で移動したファイルにあることになります。問題の解決後、virt-who 設定ファイルを元の場所に戻します。

または、--config オプションを使用して場所を指定することにより、各ファイルを移動後にテストできます。以下は例になります。

# virt-who --debug --one-shot --config /tmp/conf_name.conf

RHEL 9 Beta 以降では、virt-who --status--debug および --config オプションを付けて入力すると、ディレクトリーから他のファイルを削除することなく、問題の原因となっている設定ファイルを特定することができます。以下は例になります。

#virt-who --debug --status --config /tmp/conf_name.conf

また、--json オプションを付けてコマンドを入力すると、各設定のより詳細な情報を JSON 形式で表示することができます。以下は例になります。

#virt-who --debug --status --json --config /tmp/conf_name.conf

重複するハイパーバイザーの特定

ハイパーバイザーが重複すると、サブスクリプションとエンタイトルメントにエラーが発生する可能性があります。以下のコマンドを入力して、重複したハイパーバイザーの有無を確認します。

# systemctl stop virt-who
# virt-who -op >/tmp/virt-who.json
# systemctl start virt-who
# cat /tmp/virt-who.json | json_reformat | grep name | sort | uniq -c | sort -nr | head -n10
  3    "name": "localhost"
  1    "name": "rhel1.example.com"
  1    "name": "rhel2.example.com"
  1    "name": "rhel3.example.com"
  1    "name": "rhel4.example.com"
  1    "name": "rhvh1.example.com"
  1    "name": "rhvh2.example.com"
  1    "name": "rhvh3.example.com"
  1    "name": "rhvh4.example.com"
  1    "name": "rhvh5.example.com"

この例では、3 つのハイパーバイザーに同じ FQDN (localhost) があり、これらは固有の FQDN を使用するように修正される必要があります。

重複した仮想マシンの特定

以下のコマンドを入力して、重複した仮想マシンを確認します。

# systemctl stop virt-who
# virt-who -op >/tmp/virt-who.json
# systemctl start virt-who
# cat /tmp/virt-who.json | json_reformat | grep "guestId" | sort | uniq -c | sort -nr | head -n10

ハイパーバイザーの数の確認

以下のコマンドを入力して、現在報告されているハイパーバイザーの virt-who の数を確認します。

# systemctl stop virt-who
# virt-who -op >/tmp/virt-who.json
# systemctl start virt-who
# cat /tmp/virt-who.json | json_reformat | grep name | sort | uniq -c | wc -l

RHEL 9 Beta 以降では、以下のコマンドを入力して、virt-who が最後に成功した実行サイクルで報告したハイパーバイザーの数を確認します。

# virt-who --status --json

仮想マシン数の確認

以下のコマンドを入力し、virt-who が現在報告している仮想マシンの数を確認します。

# systemctl stop virt-who
# virt-who -op >/tmp/virt-who.json
# systemctl start virt-who
# cat /tmp/virt-who.json | json_reformat | grep "guestId" | sort | uniq -c | wc -l

RHEL 9 Beta 版では、次のコマンドを入力して、virt-who が最後に成功した実行サイクルで報告したゲスト数を確認します。

# virt-who --status --json

第7章 virt-who のトラブルシューティングシナリオ

virt-who が仮想化プラットフォームへの接続に失敗する

virt-who がハイパーバイザーまたは仮想化マネージャーへの接続に失敗する場合は、Red Hat サブスクリプションマネージャーのログファイル /var/log/rhsm/rhsm.log を確認します。No route to host というメッセージが表示される場合は、ハイパーバイザーが誤ったポートをリッスンしている可能性があります。この場合は、そのハイパーバイザーの virt-who 設定ファイルを変更し、正しいポート番号を server 値に追加します。

設定ファイルの変更後に virt-who サービスを再起動する必要があります。

virt-who が、ローカルネットワーク上の HTTP プロキシー経由で仮想化プラットフォームに接続できない

virt-who が HTTP プロキシーを介してハイパーバイザーまたは仮想化マネージャーに接続できない場合は、プロキシーを設定してローカルトラフィックが通過できるようにプロキシーを設定するか、以下の行を /etc/virt-who.conf に追加して、virt-who サービスがプロキシーを使用しないようにします。

[system_environment]
no_proxy=*

設定ファイルの変更後に virt-who サービスを再起動する必要があります。

注記

[system_environment] セクションは、virt-who-0.30.x-1.el8 (RHEL 8.4) からサポートされています。古いバージョンの virt-who を使用している場合は、/etc/sysconfig/virt-who で NO_PROXY を設定してください。