Red Hatでソリューションアーキテクトをしている田中司恩(@tnk4on)です。
Red HatとNutanix間の戦略的提携によるNutanix AHV(以下、AHV)がRed Hat認定ハイパーバイザーになりました。 この件については以前の記事でもご紹介しています。
上記記事を書いた時はまだvirt-whoがAHVに未対応でしたが、その後正式サポートされるようになりました!下記のKCSではRed Hat Subscription Management(以下、RHSM)と連携するAHV向けvirt-whoの設定方法が紹介されています。
(参考)実はNutanixは以前からAHV対応をしたコードをvirt-whoのアップストリームに提供していましたが、FedoraとRHEL向けのRPMにはAHV対応は取り除かれてビルドされていました。今回正式にAHVがRed Hat認定ハイパーバイザーになったことで取り除かれていた機能が使えるようになったということです。*1
今回はRed Hat Enterprise Linux(以下、RHEL) のVirtual Data Center (以下、VDC) サブスクリプションをAHV上で使用する場合のvirt-whoの設定方法とRHSMと連携したサブスクリプションの適用方法についてステップバイステップで紹介します*2。
-目次-
- [はじめに] RHEL VDCとvirt-whoについて
- virt-whoインスタンスの構築
- AHVホストのサブスクリプションのアタッチ
- RHEL仮想マシンへのサブスクリプションのアタッチ
- Tips
- まとめ
- リンク
[はじめに] RHEL VDCとvirt-whoについて
RHEL VDCとvirt-whoについては下記の公式の情報が参考になります。
また、日本語の情報としては下記の森若さんの記事で詳細に解説されています。
上記の日本語記事でも書かれていますがvirt-whoは少し独特な仕組みです。AHVでRHEL VDCを使う場合でもその上で稼働するRHELに適切にサブスクリプションをアタッチするためには必要となります。 次の項目ではvirt-whoインスタンスの構築方法について解説いたします。
virt-whoインスタンスの構築
AHV上のRHEL仮想マシンにvirt-whoを導入し、virt-whoインスタンスとして構築します。
前提条件
- AHVが構築済みでPrismにログインが可能であること
- RHEL 8.2/8.4のいずれかのOSバージョンの仮想マシンがAHV上に構築済み
- (注意)AHV上ではRHEL 7.9のOS自体はサポートされますが、virt-whoを動かすにはRHEL 8.2または8.4が必要です。
- 使用するRed HatアカウントにRHEL VDCサブスクリプションがAHVホストの台数分登録されていること
全体構成図
virt-whoとAHV連携後の全体構成は下記のようになります
今回はNutanixの最小構成である3ノードクラスタ上で全てのRHEL仮想マシンを動かす構成とします。
作業手順
- 一時的なサブスクリプションのアタッチ
- virt-whoのインストール
- virt-whoの設定
- virt-whoの起動
以降はvirt-whoをインストールするRHEL仮想マシン(ホスト名:virt-who)で作業します*3。
1. 一時的なサブスクリプションのアタッチ
RHELにvirt-whoをインストールするためにはdnf
コマンドの実行が必要ですが、そのためにはサブスクリプションをアタッチする必要があります。しかしながらRHEL VDCはAHVホストに対応したサブスクリプションのためRHEL仮想マシンには適用できません。dnf
コマンドを実行したいのにできないという「Chicken-and-Egg」な状態になってしまいます。これを解消するためにRHEL VDCサブスクリプションをRHEL仮想マシンにアタッチすることで一時的なサブスクリプションとして使用することが可能となっています。
subscription-manager
コマンドでホストの登録を行い、RHEL VDCサブスクリプションを指定してアタッチします。使用するサブスクリプションを指定する為、先にプールIDを確認します。
# subscription-manager list --available | grep -A 2 -B 2 "RH00001" サブスクリプション名: Red Hat Enterprise Linux for Virtual Datacenters, Premium. 提供: SKU: RH00001 契約: 12135536 プール ID: 8a99f9af7b36770d017b85a10d383e29 # subscription-manager register # subscription-manager attach --pool 8a99f9af7b36770d017b85a10d6c3e2b
RHEL VDCサブスクリプションをアタッチするとサブスクリプションタイプが Standard (Temporary)となっていることが確認できます。
# subscription-manager list --consumed +-------------------------------------------+ 割り当て済みのサブスクリプション +-------------------------------------------+ サブスクリプション名: Red Hat Enterprise Linux for Virtual Datacenters, Premium ...(省略)... 状態の詳細: Guest has not been reported on any host and is using a temporary unmapped guest subscription. For more information, please see https://access.redhat.com/solutions/1592573 サブスクリプションタイプ: Standard (Temporary) 開始: 2021年08月27日 終了: 2021年09月03日 エンタイトルメントタイプ: 仮想
- Note: 一時的なサブスクリプションの有効期間は7日間です*4
# subscription-manager status +-------------------------------------------+ システムのステータス詳細 +-------------------------------------------+ 全体のステータス: 不十分 Red Hat Enterprise Linux for Virtual Datacenters, Premium: - Guest has not been reported on any host and is using a temporary unmapped guest subscription. For more information, please see https://access.redhat.com/solutions/1592573 システムの目的の状態: 指定されていません
このようにステータスは警告表示になっていますが一時的なサブスクリプションがアタッチすることでdnf
コマンドが使用できるようになります。
# dnf repolist Updating Subscription Management repositories. repo id repo の名前 rhel-8-for-x86_64-appstream-rpms Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs) rhel-8-for-x86_64-baseos-rpms Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)
この状態でvirt-whoのインストールを行います
2. virt-whoのインストール
dnf
コマンドでvirt-whoパッケージをインストールします
# dnf install virt-who
3. virt-whoの設定
virt-who設定ファイルに記載するための組織IDの確認を行います。
subscription-manager
コマンドで組織IDを確認します
# subscription-manager identity システム ID: 408b0d30-0445-45bc-b7bd-7450c67cec3a 名前: virt-who 組織名: 13278380 組織 ID: 13278380
次に、virt-whoユーザーのパスワードの暗号化を行います。ここで言うvirt-whoユーザーとはPrism ElementまたはPrism Centralに接続するユーザーのことです。
設定ファイルにpassword=
を指定することで平文でのパスワードを使用することも可能ですが、セキュリティ上の観点から暗号化したパスワードencrypted_password=
の設定が推奨されます。
virt-who-password
コマンドを実行して暗号化したパスワードを取得します*5。
# virt-who-password Password: # ←ここにPrism接続ユーザーのパスワードを入力 Use following as value for encrypted_password key in the configuration file: 0693dff7817da5e4620ddc2c0801dc76 # ←暗号化されたパスワードが出力されるので内容を控える
virt-who設定ファイルを作成します。
# vi /etc/virt-who.d/virt-who.conf
<virt-who設定ファイルのサンプル記入例>
[ahv] type=ahv server=192.168.1.70 username=admin encrypted_password=0693dff7817da5e4620ddc2c0801dc76 owner=13278380 hypervisor_id=hostname prism_central=false update_interval=60 internal_debug=false
- Note: サンプルはKCSに記載のものを流用
パラメーター解説
type=
ハイパーバイザーにAHVを使用するのでahv
を指定server=
Prism ElementまたはPrism Centralに接続するIPアドレスを入力(FQDNは非対応)username=
Prism ElementまたはPrism Centralに接続するユーザー名encrypted_password=
Prism ElementまたはPrism Centralに接続するパスワードを暗号化したものowner=
RHSM上の組織IDhypervisor_id=
RHSM上の登録名をAHVホスト名にするためhostname
を指定prism_central=
Prism Centralに接続する場合はtrue
、Prism Elementに接続する場合はfalse
を指定update_interval=60
ホストとVMのマッピングをチェックする間隔。単位は秒。internal_debug=
デバッグ出力する場合にtrue
を指定。APIの応答が出力される。
4. virt-whoの起動
systemdでvirt-whoデーモンの登録および起動を行います
# systemctl enable virt-who --now Created symlink /etc/systemd/system/multi-user.target.wants/virt-who.service → /usr/lib/systemd/system/virt-who.service.
systemctl status
を実行し、virt-who.serviceが正常に起動していることを確認します。
# systemctl status virt-who.service
出力結果を開く
● virt-who.service - Daemon for reporting virtual guest IDs to subscription-manager Loaded: loaded (/usr/lib/systemd/system/virt-who.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2021-08-31 02:30:33 JST; 9s ago Main PID: 9606 (virt-who) Tasks: 4 (limit: 11385) Memory: 28.1M CGroup: /system.slice/virt-who.service └─9606 /usr/libexec/platform-python /usr/bin/virt-who 8月 31 02:30:33 virt-who /usr/bin/virt-who[9606]: 2021-08-31 02:30:33,366 [virtwho.main INFO] MainProcess(9606):Thread-2 @ahv_interface.py:login:179 - Successfully logged into the AHV REST server 8月 31 02:30:33 virt-who /usr/bin/virt-who[9606]: 2021-08-31 02:30:33,367 [virtwho.main INFO] MainProcess(9606):Thread-2 @ahv_interface.py:get_vms_uuid:507 - Getting the list of available vms 8月 31 02:30:33 virt-who virt-who[9606]: [169B blob data] 8月 31 02:30:33 virt-who /usr/bin/virt-who[9606]: 2021-08-31 02:30:33,452 [virtwho.main INFO] MainProcess(9606):Thread-2 @ahv_interface.py:get_vms_uuid:558 - Total number of vms uuids found and saved fo> 8月 31 02:30:33 virt-who /usr/bin/virt-who[9606]: 2021-08-31 02:30:33,453 [virtwho.main INFO] MainProcess(9606):Thread-2 @ahv_interface.py:build_host_to_uvm_map:746 - Processing hosts for each vm. 8月 31 02:30:33 virt-who /usr/bin/virt-who[9606]: 2021-08-31 02:30:33,732 [virtwho.main INFO] MainProcess(9606):Thread-2 @virt.py:_send_data:981 - Report for config "ahv" gathered, placing in datastore 8月 31 02:30:34 virt-who /usr/bin/virt-who[9606]: 2021-08-31 02:30:34,040 [virtwho.destination_-1311589272434698800 INFO] MainProcess(9606):Thread-3 @subscriptionmanager.py:_connect:159 - X-Correlation-> 8月 31 02:30:37 virt-who /usr/bin/virt-who[9606]: 2021-08-31 02:30:37,815 [virtwho.destination_-1311589272434698800 INFO] MainProcess(9606):Thread-3 @virt.py:_send_data:651 - Hosts-to-guests mapping for> 8月 31 02:30:37 virt-who /usr/bin/virt-who[9606]: 2021-08-31 02:30:37,816 [virtwho.destination_-1311589272434698800 INFO] MainProcess(9606):Thread-3 @virt.py:_send_data:682 - Sending updated Host-to-gue> 8月 31 02:30:37 virt-who /usr/bin/virt-who[9606]: 2021-08-31 02:30:37,816 [virtwho.destination_-1311589272434698800 INFO] MainProcess(9606):Thread-3 @subscriptionmanager.py:_connect:159 - X-Correlation->
以上でvirt-whoインスタンスの構築は完了です。 次の項目ではRHSM上でAHVホストにサブスクリプションをアタッチする方法を解説します。
AHVホストのサブスクリプションのアタッチ
RHSM上でAHVホストにRHEL VDCサブスクリプションをアタッチします。そのためにはvirt-whoからRHSMへ使用しているAHVホストの情報が正しく報告される必要があります。
[注意] virt-whoによってAHVホストの情報がRHSMへ報告されるためには各AHVホスト上に少なくとも1台以上のパワーオン状態のRHEL仮想マシンが必要です。仮想マシンホストアフィニティを使用すると簡単に指定したAHVホスト上に仮想マシンを配置できます。
サブスクリプションをアタッチしたいホストを選択します(今回はntnx-ahv01)
- Note: virt-whoからRHSMへ報告直後はホストのステータスが不明な状態になっていることがあります。しばらく待って「正しくサブスクライブ済み」になった後、サブスクリプションのアタッチを実行します。
「サブスクリプション」タブを選択し「サブスクリプションのアタッチ」ボタンを押します。
一覧に表示されたサブスクリプションからホストに適用したいRHEL VDCを選択し「サブスクリプションのアタッチ」ボタンを押します。
AHVホストの詳細画面に戻り、アタッチ済みサブスクリプションが0から1に変更されたことを確認します
同じ手順で残りのAHVホストにサブスクリプションのアタッチを実行します。AHVホストにサブスクリプションをアタッチすることで、その上で稼働するRHELにも適切なサブスクリプションのアタッチができるようになります。 全てのAHVホストにサブスクリプションがアタッチが完了したら次は各RHEL仮想マシンにサブスクリプションをアタッチします。
RHEL仮想マシンへのサブスクリプションのアタッチ
RHEL仮想マシンへのサブスクリプションのアタッチは下記の作業を実施します。
- virt-whoインスタンスへのサブスクリプションのアタッチ
- そのほかのRHEL仮想マシンへサブスクリプションのアタッチ
1. virt-whoインスタンスへのサブスクリプションのアタッチ
virt-whoインスタンスで再度サブスクリプションのアタッチを行うことで、一時的なサブスクリプションが削除され正式なサブスクリプションが適用されます
virt-whoインスタンス上でsubscription-manager
コマンドを実行します
# subscription-manager attach --auto 1 件のローカル証明書が削除されました。 インストールしているすべての製品に、有効なエンタイトルメントが付与されています。 現時点では、サブスクリプションを更新する必要はありません。 インストール済み製品の現在の状態: 製品名: Red Hat Enterprise Linux for x86_64 状態: サブスクライブ済み
2. そのほかのRHEL仮想マシンへサブスクリプションのアタッチ
RHEL仮想マシン内から通常の手順でホストの登録およびサブスクリプションのアタッチが行えます。登録の方法は下記のいずれの方法でも可能です。
- 「ホスト登録」→「アタッチ」を順に実行する
- 「ホスト登録」と同時に「auto-attach」を使用してサブスクリプションのアタッチを実行する
- 「アクティベーションキーを使用してホストの登録」→「アタッチ」を順に実行する
例1.「ホスト登録」→「アタッチ」を順に実行する
[root@rhel01 ~]# subscription-manager register 登録中: subscription.rhsm.stage.redhat.com:443/subscription ユーザー名: tnk4on-stage パスワード: このシステムは、次の ID で登録されました: a840a3c4-401c-4435-974f-e5d2af156148 登録したシステム名: rhel01 [root@rhel01 ~]# subscription-manager attach --auto インストール済み製品の現在の状態: 製品名: Red Hat Enterprise Linux for x86_64 状態: サブスクライブ済み
例2.「ホスト登録」と同時に「auto-attach」を使用してサブスクリプションのアタッチを実行する
[root@rhel02 ~]# subscription-manager register --auto-attach 登録中: subscription.rhsm.stage.redhat.com:443/subscription ユーザー名: tnk4on-stage パスワード: このシステムは、次の ID で登録されました: 6238007e-4153-494a-9157-ae85640cd0c3 登録したシステム名: rhel02 インストール済み製品の現在の状態: 製品名: Red Hat Enterprise Linux for x86_64 状態: サブスクライブ済み
例3.「アクティベーションキーを使用してホストの登録」→「アタッチ」を順に実行する
[root@rhel03 ~]# subscription-manager register --activationkey RHEL_VDC --org 13278380 このシステムは、次の ID で登録されました: bb730c9a-0b16-49b6-a13a-5a90983cab2f 登録したシステム名: rhel03 インストール済み製品の現在の状態: 製品名: Red Hat Enterprise Linux for x86_64 状態: サブスクライブ済み [root@rhel03 ~]# subscription-manager attach --auto インストールしているすべての製品に、有効なエンタイトルメントが付与されています。 現時点では、サブスクリプションを更新する必要はありません。 インストール済み製品の現在の状態: 製品名: Red Hat Enterprise Linux for x86_64 状態: サブスクライブ済み
- Note: アクティベーションキーを使用したサブスクリプションのアタッチは下記のドキュメントを参照ください
AHVホスト、virt-whoインスタンス、その他RHEL仮想マシン、全てが正常にサブスクリプションのアタッチが完了すると、RHSMで下記のように表示されます。
Tips
virt-whoの動作テスト
トラブルシュートなどでvirt-whoの動作テストをしたい場合はvirt-who -od
コマンドを使用します。通常はvirt-whoは定期的に実行されるますが、virt-who -od
コマンドを使用するとワンショットで実行することができます。
virt-whoインスタンス上でvirt-whoデーモンを停止し、virt-who -od
コマンドを実行します。
# systemctl stop virt-who # virt-who -od
同時にNutanix側のログを確認します。SSHでNutanixクラスターのVIPへログインし下記のログファイルを確認します。api_audit.log
はREST APIのログが記録されるファイルです。
$ ssh nutanix@192.168.1.70 $ tail -f ~/data/prism/api_audit.log
出力結果を開く
INFO 2021-08-31 00:21:41,417Z clientType=External||userName=admin||NutanixApiVersion=2.0||httpMethod=GET||restEndpoint=/v2.0/clusters||entityUuid=||queryParams=||payload= INFO 2021-08-31 00:21:41,467Z clientType=External||userName=admin||NutanixApiVersion=2.0||httpMethod=GET||restEndpoint=/v2.0/vms||entityUuid=||queryParams=||payload= INFO 2021-08-31 00:21:41,502Z clientType=External||userName=admin||NutanixApiVersion=2.0||httpMethod=GET||restEndpoint=/v2.0/vms||entityUuid=||queryParams=||payload= INFO 2021-08-31 00:21:41,537Z clientType=External||userName=admin||NutanixApiVersion=2.0||httpMethod=GET||restEndpoint=/v2.0/vms/e0b78d2a-9370-47a8-acfa-f8588951219b||entityUuid=e0b78d2a-9370-47a8-acfa-f8588951219b||queryParams=||payload= INFO 2021-08-31 00:21:41,564Z clientType=External||userName=admin||NutanixApiVersion=2.0||httpMethod=GET||restEndpoint=/v2.0/hosts/d4cdfda2-2ed8-498d-965c-0341dd4538cc||entityUuid=d4cdfda2-2ed8-498d-965c-0341dd4538cc||queryParams=||payload= INFO 2021-08-31 00:21:41,593Z clientType=External||userName=admin||NutanixApiVersion=2.0||httpMethod=GET||restEndpoint=/v2.0/hosts/d4cdfda2-2ed8-498d-965c-0341dd4538cc||entityUuid=d4cdfda2-2ed8-498d-965c-0341dd4538cc||queryParams=||payload= INFO 2021-08-31 00:21:41,617Z clientType=External||userName=admin||NutanixApiVersion=2.0||httpMethod=GET||restEndpoint=/v2.0/vms/185b3fd7-1697-4850-8ddc-ac233b09c6ff||entityUuid=185b3fd7-1697-4850-8ddc-ac233b09c6ff||queryParams=||payload= INFO 2021-08-31 00:21:41,687Z clientType=External||userName=admin||NutanixApiVersion=2.0||httpMethod=GET||restEndpoint=/v2.0/hosts/fae51b97-3cc5-4752-beab-6cc7df7b2374||entityUuid=fae51b97-3cc5-4752-beab-6cc7df7b2374||queryParams=||payload= INFO 2021-08-31 00:21:41,713Z clientType=External||userName=admin||NutanixApiVersion=2.0||httpMethod=GET||restEndpoint=/v2.0/hosts/fae51b97-3cc5-4752-beab-6cc7df7b2374||entityUuid=fae51b97-3cc5-4752-beab-6cc7df7b2374||queryParams=||payload= INFO 2021-08-31 00:21:41,743Z clientType=External||userName=admin||NutanixApiVersion=2.0||httpMethod=GET||restEndpoint=/v2.0/vms/6a8b8a98-ed0a-4712-b5c2-fc48a6b23ace||entityUuid=6a8b8a98-ed0a-4712-b5c2-fc48a6b23ace||queryParams=||payload= INFO 2021-08-31 00:21:41,773Z clientType=External||userName=admin||NutanixApiVersion=2.0||httpMethod=GET||restEndpoint=/v2.0/hosts/b36d16cc-5526-45e6-9ac0-a63001e38b4c||entityUuid=b36d16cc-5526-45e6-9ac0-a63001e38b4c||queryParams=||payload= INFO 2021-08-31 00:21:41,796Z clientType=External||userName=admin||NutanixApiVersion=2.0||httpMethod=GET||restEndpoint=/v2.0/hosts/b36d16cc-5526-45e6-9ac0-a63001e38b4c||entityUuid=b36d16cc-5526-45e6-9ac0-a63001e38b4c||queryParams=||payload= INFO 2021-08-31 00:21:41,821Z clientType=External||userName=admin||NutanixApiVersion=2.0||httpMethod=GET||restEndpoint=/v2.0/vms/c5408ff2-dc36-499c-aeee-49fe20ac373c||entityUuid=c5408ff2-dc36-499c-aeee-49fe20ac373c||queryParams=||payload= INFO 2021-08-31 00:21:41,889Z clientType=External||userName=admin||NutanixApiVersion=2.0||httpMethod=GET||restEndpoint=/v2.0/hosts/b36d16cc-5526-45e6-9ac0-a63001e38b4c||entityUuid=b36d16cc-5526-45e6-9ac0-a63001e38b4c||queryParams=||payload= INFO 2021-08-31 00:21:41,913Z clientType=External||userName=admin||NutanixApiVersion=2.0||httpMethod=GET||restEndpoint=/v2.0/hosts/b36d16cc-5526-45e6-9ac0-a63001e38b4c||entityUuid=b36d16cc-5526-45e6-9ac0-a63001e38b4c||queryParams=||payload=
virt-whatコマンド使用して稼働するハイパーバイザーを確認する
virt-whoをインストールするとvirt-what
コマンド*6もインストールされます。virt-what
コマンドを使用すると仮想マシンが稼働するハイパーバイザーの名前を確認することができます。
virt-what
コマンドはAHVホスト上のRHEL仮想マシンで実行します。
[root@rhel03 ~]# virt-what nutanix_ahv
rhel03仮想マシンはnutanix_ahv
上で動作しているという結果が返ってきます。
まとめ
RHEL VDCをAHV上で使用するためのvirt-whoの設定方法からRHSMと連携したサブスクリプションの登録方法まで解説しました。 virt-whoインスタンスに一時的なサブスクリプションを割り当てる仕組みなどは実際にやってみないと理解しづらい点もありますので、本記事を参考になんとなくのイメージを掴んでいただけたらと思います。今回は紹介しませんでしたがvirt-whoはRHSMの代わりにRed Hat Satelliteと連携することも可能です。RHELの台数が増えて管理コストの低減やパッチ適用の効率化が必要な場合はRed Hat Satelliteの導入をご検討ください。
RHEL VDCを正しく登録すればリソースのある限りRHEL仮想マシンを数の制限なく稼働することができます。クラスターのリソースが不足した場合はNutanixクラスターにノードを追加して容易にクラスターの拡張を行えるのがNutanixの利点です。virt-whoが追加分のノードの検出も行うのでノード追加時も本記事と同じ手順でサブスクリプションの適用ができます。
RHEL VDCとvirt-whoを利用してAHV上で気兼ねなくどんどんRHELを使っていきましょう!
リンク
- OpenShift on Nutanix AHV - 赤帽エンジニアブログ
- How to configure virt-who for Nutanix AHV to work with RHSM - Red Hat Customer Portal
- Add patch to remove AHV bits for RHEL builds by wottop · Pull Request #269 · candlepin/virt-who · GitHub
- https://www.nutanix.com/uk/blog/simplified-subscription-management-for-ahv-with-red-hat-satellite-server
- Using RHEL Virtual Data Center Subscription with Customer Portal [Master Article] - Red Hat Customer Portal
- virt-whoとはなにか - 赤帽エンジニアブログ
- virt-whoとは何か - Speaker Deck
- 【RHEL】virt-who設定前に割り当てられる一時的なサブスクリプションの有効期間は7日間 - あとがきのようなもの
- 1.3. 各仮想化プラットフォーム向けの virt-who の設定 Red Hat Satellite 6.14 | Red Hat Customer Portal
*1:アップストリームのGitHubリポジトリのPull RequestでAHV対応を取り除くパッチを確認できる
*3:今回はRHEL 8.4を最小構成でインストールしたものを使用
*4:参考:【RHEL】virt-who設定前に割り当てられる一時的なサブスクリプションの有効期間は7日間 - あとがきのようなもの
*5:virt-who-passwordコマンドはvirt-whoをインストールすると同時にインストールされる
*6:プログラムが仮想マシンで実行中かどうかを検出するシェルスクリプト