[OpenShift Virtualization] 追加料金無しでRHEL立て放題、起動と同時にSubscription Managerに自動登録してみた

# はじめに
OpenShiftにはRHELのサブスクリプションが含まれています(Entitlementされている)。よって、OpenShift Virtualizationで起動したRHEL仮想マシンについては、仮想マシンごとのサブスクリプション料金が不要です。つまり、物理的なリソースが許す限り、OpenShiftのサブスクリプション料金以外の費用は不要でRHEL仮想マシン立て放題ということになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/c685ae9c-c110-d44b-2974-01430fd9235d.png)

よって、多くRHELをご利用されている企業であれば、OpenShift Virtualizationにハイパーバイザを切り替えた場合のコスト削減効果は計り知れないでしょう。

ただし、OpenShift Virutalization上のRHELであっても、これまでと同様、「Red Hat Subscription Manager (RHSM)」への登録が必要です。ただし、この紐づけるサブスクリプションがOpenShiftになる、というわけです。

# Simple Content Access
Red Hat Enterprise Linux (RHEL) のサブスクリプションをインスタンスに紐づける作業を大幅に簡素化するものです。[赤帽エンジニアブログ](https://rheb.hatenablog.com/entry/simple-content-access)に記載されている通り、
>今までの仕組みでは、サブスクリプションで提供される「pool」とシステムを対応づける(attach)必要があり、複数種類の製品を持っている場合には必要なpoolがわかりにくいため手間がかかるなどの難点があります。

特に、今回の様なEntitlementされたサブスクリプションの有効化においては、非常に有用だと感じています。より詳細はRed Hat公式サイトを御覧ください。

:::note
[Simple Content Access とは何ですか? なぜ使用する必要があるのですか?](https://access.redhat.com/ja/articles/6098461)
Simple Content Access (SCA) は Red Hat のサブスクリプションツールの機能で、エンタイトルメントツールの動作を簡素化します。これにより、サブスクリプションツールの設定という複雑なプロセスなしに、Red Hat サブスクリプションが提供するコンテンツを簡単に利用できるようになります。
:::

# KVM Guest Imageを使ってRHEL仮想マシンを建てよう
[こちらの記事](https://qiita.com/masaki-oomura/items/1c637808b019ec380f3c)でも試していますが、Red Hatの方ではOpenShift Virtualizationを含むKVM仮想化基盤上でRHEL仮想マシンを起動する際に用いるべきKVM Guest Imageを公開してくれています。こちらのOS ImageはRed Hatアカウントさえあれば入手可能です。勿論、リポジトリを利用する為にはサブスクリプション登録が必要です。

## アクティベーションキーを作成
ハイブリッドクラウドコンソール: https://console.redhat.com/insights/connector/activation-keys からアクティベーションキーを作成してください。パラメータは目的に応じて選べばOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/0ec6b053-b3e2-5e5e-d3ae-d5a7f350c866.png)

取り敢えずここではアクティベーションキーの名称を`my-activation-key`としておきます。また、アクティベーションキー作成画面の左上で自社の「Organization ID」が確認できますので、これを覚えておいてください。

## RHEL仮想マシンを建てる
今回はGUIからやっていきます。適当なNameSpace（私はvirtual-machineとしました）で「+追加」の下の方にある「Virtual Machines」をクリックし、VMのテンプレート画面にて「Red Hat Enterprise Linux 8 VM」をクリック、「Customize VirtualMachine」をクリックしてください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/9edd335b-5408-a746-c6d7-9ff8a5157d8f.png)

### KVM Guest Imageをブートソースに指定
「Disk」タブをクリックし、rootdisk行の右端の三点リーダみたいなボタンをクリックすると、Disk編集画面が開きます。「Source」は今回「URL (creates PVC)」を選択します。ここにKVM Guest OS Imageのダウンロード先URLを入力します。画面上に見えている「[RHEL download page](https://access.redhat.com/downloads/content/479/ver=/rhel---8/)」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/db991dfc-b845-4ee3-e4fc-7473cf22d5ca.png)

Red Hatアカウントの認証が求められるので、ログインするとOS Image一覧のページに遷移します。お好きなRHEL8のマイナーバージョンを選択します。今回はとりあえず8.1を選択しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/0c01769a-8fc6-d4f3-0624-8a184069d94d.png)


最新のKVM Guest OS Imageである「Red Hat Enterprise Linux 8.1 Update KVM Guest Image」を選びました。「今すぐダウンロードする」を右クリックしてURLを取得します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/9b4f6940-0db4-cc69-0203-8844433061dc.png)


「URL」欄にコピーしたURLをペーストします。なお、今回はOpenShift Data Foundationで提供されるStorageClass「ocs-storagecluster-ceph-rbd-virtualization」を選択しました。「Save」をクリックして設定を保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/549252fe-5457-83ff-50f7-bc02948ed849.png)

### Cloud-initを設定

次にタブ「Scripts」から「Cloud-init」の「Edit」をクリック、「Script」表示に切り替えます。ここでは仮想マシン起動時に指定するパラメータ各種を設定可能なのですが、起動時に実行するべきコマンド等も設定できます。初期値にはユーザ情報が入っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/f9a8e8af-19ac-ea09-8779-8c1c0e6156e9.png)

以下の様に追記します。ユーザ名とパスワードは任意のものに変更しておきました。

```diff_yaml
userData: |-
  #cloud-config
  user: "username"
  password: "password"
  chpasswd: { expire: False }
+ ssh_pwauth: true
+ rh_subscription: 
+   activation-key: my-activation-key
+   org: "Organization ID"
+ runcmd:
+   - subscription-manager register
+   - insights-client --register
```

`ssh_pwauth: true`を設定する事で起動後にユーザログインし、`runcmd`以下に記載したコマンドを仮想マシン起動時に実行します。
`subscription-manager register`: RHELをRHSMに登録するコマンドです。
`insights-client --register`: RHELを[Red Hat Insights](https://www.redhat.com/ja/technologies/management/insights)に登録するコマンドです。

「保存」→「Apply」と進みます。加えて、[こちらの記事](https://qiita.com/masaki-oomura/items/a1453307d005e4656479#ssh%E5%85%AC%E9%96%8B%E9%8D%B5%E3%82%92%E7%99%BB%E9%8C%B2%E3%81%97%E3%81%A6vm%E3%82%92%E4%BD%9C%E6%88%90)でもやっている通りSSH公開鍵を登録しておき、ローカルマシンからSSHで接続できるようにしておきます。最後に仮想マシンの名称を好きなものに設定します。今回はとりあえず`rhel8-subscription-register`とします。「Create Virtualmachine」をクリックして、仮想マシンが起動するまで待ちましょう。

# 仮想マシンでリポジトリが利用可能か確認
仮想マシンにSSHしてリポジトリが利用可能になっているか確認します。

```sh
[cloud-user@rhel8-subscription-register ~]$ sudo dnf repolist
サブスクリプション管理リポジトリーを更新しています。
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)
```

リポジトリが有効になっています。ということはRHSMに登録され、サブスクリプションが有効になったということです。一応、ハイブリッドクラウドコンソール:https://console.redhat.com/insights/inventory で確認しておきます。ホスト名`rhel8-subscription-register`を検索します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/27780665-0d5a-ea39-0089-03d2e6329ba2.png)

無事登録されている様です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/355e4e73-87ae-eb9d-20af-8f565dc2dae4.png)

Red Hat InsightsとRHSMの登録が無事できました。

# おわりに
OpenShift Virtualization上でRHEL仮想マシンを建てる際に、Red Hat Subscription Manager登録まで自動的に実施しました。OpenShift Virtualizationでは物理リソースが許す限り追加サブスクリプション無しでRHEL立て放題ですので、RHSM登録も効率化してじゃんじゃん建てましょう！笑

# 追記（2024.06.24）
OpenShift Virtualizationの最新バージョンでは、個別にRHEL仮想マシンを建てる際のRHSM登録不要で、デフォルトでRHEL仮想マシンのRHSM登録を可能とする機能がありました。こちらは、cluster-admin権限を持つアカウントを用いて、コンソール画面で設定可能です。一度設定すれば、以後RHELは自動的にRHSM登録され、リポジトリの利用も可能な状態で起動します。

## コンソール画面で設定する
cluster-admin権限を持つアカウントでコンソール画面にログインし、「管理者向け表示」に切り替え、「Virutalization」タブの「Overview」から「Setting」→Cluster」と進んだ先に「Automatic subscription of new RHEL VirtualMachines」という欄があります。

![スクリーンショット 2024-06-24 21.45.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/9ec4fc89-8c00-3cea-2f75-07cad55a8b68.png)


ここでは、本記事でも紹介した「アクティベーションキー」と「Organization ID」を登録できます。たったこれだけで、あとは以後RHEL仮想マシンを立てればRHSM登録完了です。さっそく試してみます。

## RHEL仮想マシンを建てる
今回はTemplateからノンカスタマイズでそのままサクッと建ててみます。名称は「rhel8-subs-auto-regist」としてみました。

![スクリーンショット 2024-06-24 21.46.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/57ad1796-431a-4675-3b23-0e317a1c2782.png)

しばらく経つとインベントリに「rhel8-subs-auto-regist」が登録されてきます。

![スクリーンショット 2024-06-24 23.56.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/57376965-f783-a46f-02b9-95eddba768ec.png)

ただし、ご覧の通りRed Hat Insightには登録されていません。もし自動的に登録したい場合は、本記事上述の通りにCloud-initを用いるか、あるいはAnsible等の構成管理ツールを使いましょう。

![スクリーンショット 2024-06-24 23.57.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/56fc6127-d262-39e2-9d0d-4fb244cb196e.png)

「rhel8-subs-auto-regist」のVNCコンソールで`dnf repolist`すれば、利用可能なリポジトリがでてきます。これでRHSM登録されていることがわかりました。