NFSを使用したOLVMデプロイ検証記

みなさん、こんにちは！
今回のテーマは「 **NFSを使用したOLVMデプロイ検証記** 」ということで、本編から外れた番外編となります。
Oracle KVM,OLVMに関する本編は"Oracle KVMとOLVMについて"をご覧ください。

https://qiita.com/ReQ_HY/items/bc6cb0d909bfa0fcdae6

## NFSを選択した背景
今回はタイトルにもある通り、セルフホステッドエンジン方式でOLVMデプロイ時に選択できる4つのストレージタイプのうち、NFSを使用したデプロイ検証を行いました。

NFSを選択した背景として、お客様から
「共有ストレージのないサーバ1台の構成で、OracleKVM環境を構築したい」
「KVMサーバのディレクトリをNFS共有することで共有ストレージとして扱い、そこをストレージドメインとしOLVMを構成したい」
といったご要望があったため、NFS使用したOLVMデプロイ検証を行いました。

## 環境
検証で使用したバージョンは以下の通りとなります。
| 製品 | バージョン |
|:-|:-|
| Oracle Linux  | 8.8  |
|  Oracle Linux KVM | 6.1.1 - 8.module+el8.8.0+21161+70fb2747  |
| Oracle Linux Virtulaization Manager/ovirt  | 4.4.10.7-1.0.25.el8  |

## 構成図
まずは、今回の検証の簡単な構成図をご覧ください。
セルフホステッドエンジン方式では、OLVMの仮想マシンはハイパーバイザー化したKVMホスト上に展開させます。その際必要となる仮想マシンのディスク領域を、KVMホストの内蔵ストレージ上に作成し、NFSでOLVMに見せてあげるというイメージになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956386/397c8e21-839e-5eba-b701-6905642bea2c.png)

## 構築手順
早速ですが、ここからは構築手順に入っていきます！
### 事前準備
まずは、Oracle Linuxのインストールや設定、Oracle KVMとしてのセットアップを行います。
ここまでの手順は"Oracle KVM 要件と構築について"を参照してください。

https://qiita.com/ReQ_HY/items/b7f8ea4fde65f4dc7a34

## NFSストレージの準備
### インストール
NFSストレージの構築に必要なパッケージは、事前準備の段階でovirt-hosted-engine-setupと一緒にインストールされるため、別途インストールする必要はありません。
### 確認事項
NFSストレージを準備する前に2点確認を行います。

 **確認１．パーティション** 
今回の環境では、NFSストレージ用のパーティション（/data）を作成しています。
※システムで使用するパーティション(/など)とは別に、NFSストレージ用に独立したパーティションを作成する要件は、Oracleドキュメントに記載されていませんでした。しかし、管理上の利便性や、他パーティションへの容量圧迫抑制、OLVMデプロイ後にNFSストレージ用ディレクトリのファイルシステムタイプがNFSに変更される、といったことを考慮するとパーティションは切り分けておいた方が良いかと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956386/37d34c34-1055-ef6f-7c90-49856060148b.png)

 **確認２．ユーザーとグループ** 
ovirt-hosted-engine-setupをインストールすると、自動的にvdsmユーザ（UID:36）とkvmグループ（GID:36）が作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956386/237cbcbc-fd73-a269-2779-d5efc8c860c2.png)
確認事項は以上となります。

### NFSの準備
それでは、NFSストレージの準備に移ります。

 **1.ストレージドメインとするディレクトリの作成** 
#mkdir /data

※今回の例では、Oracle Linuxインストール時にNFSストレージ用パーティション(/data)を作成し、/dataをマウントポイントとしています。
そのため、Oracleドキュメントに記載されているNFSストレージ用のディレクトリ作成はスキップしています。["NFS記憶域の準備"](https://docs.oracle.com/cd/F30061_01/admin/storage-tasks.html#nfs-data-prep)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956386/e52877e3-343f-c4b8-a7d5-7df89b3c510e.png)

続いて、 **NFS準備で重要となるポイント** です。
vdsmユーザーおよびKVMグループには、ディレクトリに対する読取り、書込みおよび実行権限が必要となります。（実行権限を付与せずOLVMデプロイを実行し、デプロイに失敗して1時間ほど時間を無駄にしました...）

 **2.ディレクトリの所有権をvdsmユーザ（UID:36）とkvmグループ（GID:36）に変更します。**
#chown 36:36 /data

 **3.読取り/書込み権限をvdsmユーザ（UID:36）とkvmグループ（GID:36）に付与します。**
#chmod 755 /data
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956386/8340a3de-a268-d56a-2d4a-3c1b296b131c.png)

 **4./etc/exportsを編集し、作成したディレクトリを追加します。**
#vi /etc/exports

[書式]
パス名　ホスト　オプション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956386/918087b0-37ef-5867-6e35-510da3ed7f8d.png)

| 設定項目	 | 設定値 | 設定内容 |
|:-|:-|:-|
| パス名  | /data  |  NFS領域とするディレクトリをフルパスで記載 |
| ホスト	  | ＊  | すべてのサーバーに対してストレージドメイン共有を許可※共有したいホストを指定する場合は、パスの後ろに「ホスト名」または「IPアドレス」を記載  |

今回使用したオプションです。
| オプション | オプション内容 |
|:-|:-|
| rw  |  クライアントからの読み出し、書き込みを許可 |
| sync  | クライアントから書き込まれたデータをディスクに書き込むまで次の要求に応じない（同期型での共有）  |
| no_subtree_check  |  sub_tree_checkオプション機能を無効化 |
|  all_squash | クライアント側のすべてのユーザーからの読み出し/書き込み要求を、匿名ユーザーからの要求として扱う  |
| anonuid=36  |  匿名ユーザーをvdsmユーザー(uid:36)に指定する |
| anongid=36  |  匿名グループをkvmグループ(gid:36)に指定する |

 **5.nfs-server.serviceを起動し、自動起動に設定します。**
#systemctl start nfs-server.service
#systemctl enable nfs-server.service
#systemctl status nfs-server.service

 **6.共有ディレクトリをエクスポートします。**
#exportfs -arv
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956386/39502f5c-cfd6-adb9-e620-6cf4c8edfe33.png)

 **7.firewallを有効にしている場合は、許可するサービスにnfsを追加します。**
#firewall-cmd --permanent --add-service nfs
#firewall-cmd --reload

## デプロイ設定手順
NFSの準備が出来たら、次はいよいよデプロイです！
下記コマンドで、OLVMのデプロイを開始します。
#hosted-engine --deploy

デプロイが始まると、対話式で設定値を入力しますが、後半のストレージドメインの設定をする部分でNFSを選択していきます。
ストレージドメイン設定前までの内容については"OLVM構築 - セルフホステッドエンジン方式"をご覧ください。

https://qiita.com/ReQ_HY/items/82ad79dc48c7253c53fa

### 回答手順
以下、NFSを選択する場合の設定項目と設定値です。
| No.	 | 項目 | 内容 | 設定値 |
|:-|:-|:-|:-|
| 1  | Please specify the storage you would like to use (glusterfs, iscsi, fc, nfs)[nfs]:  | OLVMのディスク配置先となるストレージドメイン"hosted_storage"のストレージタイプ  |  nfs |
|  2 |  Please specify the nfs version you would like to use (auto, v3, v4, v4_0, v4_1, v4_2)[auto]: |  NFSバージョン |  auto |
|  3 |  Please specify the full shared storage connection path to use (example: host:/path): | 参照するNFS領域の情報（IPアドレス:/パス）  | XXX.XXX.XXX.XXX:/data  |
|  4 |  	If needed, specify additional mount options for the connection to the hosted-engine storagedomain (example: rsize=32768,wsize=32768) []: | 追加のマウントオプション（任意）  | 	なし  |

「2.NFSバージョン」では「auto」を選択していますが、実際には「v4_2」が採用されています。(OSのデフォルト)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956386/8e379707-fc8c-54f2-8e52-ef08cf7b26ce.png)

上記の通り回答し、ストレージドメインの設定を進めていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956386/e27b369c-8174-6614-6b43-fc363c26f35d.png)
回答が終了すると下記が表示され、ストレージドメインの作成が始まります。
**[ INFO ] Creating Storage Domain**

しばらく待つと下記が表示され、ストレージドメインが起動してきます。
**[ INFO ] TASK [ovirt.ovirt.hosted_engine_setup : Activate storage domain]**

最後に、 **Please specify the size of the VM disk in GiB: [38]:** 
と聞かれるので、OLVMに割り当てるディスクサイズを入力します。

そして、下記出力がされると、NFSでのOLVMデプロイが完了となります。
**[ INFO ] Hosted Engine successfully deployed**

### OLVMログイン
早速OLVMにログインし、[ストレージ]>[ストレージドメイン]を確認してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956386/2cb8c9b1-3498-462f-401e-6e56c2051325.png)

ストレージタイプがNFSとなっていますね。KVMホストからも/dataを確認してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956386/5efb458e-4d95-4716-7f20-18db53836250.png)

無事、NFSを使用したOLVMデプロイができました！

### 注意点
今回検証した構成を業務システムの実運用で採用する場合には、いくつか注意点があります。

**①Oracleで明示されている構成・手順ではない**
セルフホステッドエンジン方式でOLVMを構築する際に、NFS領域をデプロイ用ストレージとすること自体は、Oracleのドキュメントに記載されている公式な方法です。["コマンドラインを使用したデプロイ"](https://docs.oracle.com/cd/F30061_01/getstart/getstarted-hosted-engine-deploy.html#he-deploy-cli)
しかし、今回の構成のような方法はOracleから明示的に提供されているものではありません。

**②サポートが限定的になる可能性がある**
上記①の理由で、この構成でOLVM環境を構築した場合、Oracleから提供されるサポート内容が限定的なものになる可能性があります。

上記の注意点より、今回の構成を採用する場合は **検証用、検証環境など非恒常的な環境** での利用にとどめることをお勧めします。
注意点についてご理解いただいた上で、もし恒常的な業務運用での利用を検討する場合は、メーカーサポートへのサポート範囲の確認や、顧客へ提供する場合は注意点を共有すること等をご留意ください。

## おわりに
今回は、Oracle KVMシリーズの番外編として、新人2人でNFSを使用したOLVMデプロイに挑戦しました。
かなりニッチな内容ではありますが、基本的にはKVMサーバ上にNFSサーバを構築するだけなので、新人2人でも比較的簡単に構築することができました。
Oracle KVMやOLVMはLinuxがベースなので、製品を扱っていると今回のNFSのようにLinuxの勉強もできて一石二鳥だなと感じます。

この記事は番外編という位置づけのため、OLVMに関する詳しい情報は割愛しています。もっと知りたいと思った方は、ぜひ本編の"Oracle KVMとOLVMについて"やそれ以降の記事もご覧ください！

https://qiita.com/ReQ_HY/items/bc6cb0d909bfa0fcdae6