Openshift on Nutanix AHVをOpenshift Assisted Installerで半自動UPIインストール

# はじめに
この記事は[Nutanix Advent Calendar 2021](https://adventar.org/calendars/6154)の12/12分のエントリその2です。

Nutanix AOS/AHV上にRedhat Openshiftを導入する手順について、Redhat製のAssisted Installerを使い半自動でUPIインストールします。

Redhat OpenShift Assisted Installerは複雑なUPIインストール手順を簡略化し、さらにIPIインストールのメリットの一部（APIエンドポイントとIngressにVRRPを採用しており、DNSレコードがシンプルで済む）も享受できるようになるようです。

https://cloud.redhat.com/blog/using-the-openshift-assisted-installer-service-to-deploy-an-openshift-cluster-on-metal-and-vsphere

Redhat社とNutanix社のパートナーシップ後に赤帽ブログでもいち早くこのAssisted Installerを使ったシングルノードクラスタ(Openshift 4.9にてGA済)のインストール手順が紹介されていました。(Redhat田中さんありがとうございます！)

https://rheb.hatenablog.com/entry/openshift-on-nutanix-ahv

注意) 2021/12時点でAssisted InstallerはTech Previewのステータスであり、特に本番環境での利用に関してはサポート面に関して[こちら](https://access.redhat.com/support/offerings/techpreview)を要参照となります。

# 前提情報
## バージョン情報
Nutanix AOS: 5.20
Openshift: 4.9
Nutanix CSI: 2.4.3

## 構成

![スクリーンショット 2021-12-13 11.13.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/0c8a2418-c6c1-a648-8e24-96153b0e3203.png)

## リソース情報
### Openshiftクラスタ
| マシン      | FQDN         | CPU数        | コア数/CPU   | RAM(GB)         | ストレージ(GiB)     |IPアドレス     |
|:-----------|:------------|:------------|:------------|:------------|:------------|:------------|
| ControlPlane-0|master0.(クラスタ名).(ドメイン名)       |2            |2            |16           |120          |10.42.9.171 |
| ControlPlane-1|master1.(クラスタ名).(ドメイン名)       |2            |2            |16           |120          |10.42.9.172 |
| ControlPlane-2|master2.(クラスタ名).(ドメイン名)       |2            |2            |16           |120          |10.42.9.173 |
| Compute-0     |worker0.(クラスタ名).(ドメイン名)       |1            |2            |8            |120          |10.42.9.181 |
| Compute-1     |worker1.(クラスタ名).(ドメイン名)       |1            |2            |8            |120          |10.42.9.182 |

API Virtual IP: 10.42.9.191　<-> api.(クラスタ名).(ドメイン名)
Ingress Virtual IP: 10.42.9.192 <-> apps.(クラスタ名).(ドメイン名)

# 手順
## Assisted Installerでクラスタ作成
[Redhat Hybrid Cloud Console](https://console.redhat.com/openshift/assisted-installer/clusters/~new)にログインし、Clutser nameとBase Domainを入力し、"Next"をクリックする。

![スクリーンショット 2021-12-10 23.47.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/dc2d81ff-8ea7-0cbc-93e4-a19b23dc3d30.png)

"Generate Discovery ISO"をクリックします。

![スクリーンショット 2021-12-10 23.48.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/b3d2a931-6f22-7059-7982-b06fa79ce4c3.png)

Minimal Image fileを選択し、SSH public keyは[SSHキーペア作成](https://qiita.com/shocnt/items/cb9c64bdb59f379e2666#ssh%E3%82%AD%E3%83%BC%E3%83%9A%E3%82%A2%E4%BD%9C%E6%88%90)を参考にSSH公開キーを入力し、"Generate Discovery ISO"をクリックします。

![スクリーンショット 2021-12-10 23.52.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/a46bda39-e88b-ddaf-5c2d-a99d106e5bf7.png)

"Discovery ISO URL"をコピーします。

![スクリーンショット 2021-12-10 23.54.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/36da4dac-a377-9cd7-1b7e-8d4ce2ca0fc3.png)

[イメージサービスへのISO登録](https://qiita.com/shocnt/items/cb9c64bdb59f379e2666#%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%B8%E3%81%AEiso%E7%99%BB%E9%8C%B2)を参考に、Discovery ISOをイメージ登録します。

[Bootstrap/ControlPlane/Computeの仮想マシンを作成する](https://qiita.com/shocnt/items/cb9c64bdb59f379e2666#bootstrapcontrolplanecompute%E3%81%AE%E4%BB%AE%E6%83%B3%E3%83%9E%E3%82%B7%E3%83%B3%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)を参考に、登録したDiscovery ISOから仮想マシンを作成します。*Bootstrap VMは不要です。

仮想マシンを作成すると作成した仮想マシンがAssisted Installer側に表示されます。要件を満たしていれば"Next"をクリックして進みます。

![スクリーンショット 2021-12-11 0.23.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/24b6269f-9a5b-afff-3273-fdd2c676e34d.png)

"Cluster-Managed Networking"でクラスタが属するサブネットを選び、API VIPとIngress VIPを設定します。他はデフォルトで"Next"をクリックします。

![スクリーンショット 2021-12-11 0.35.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/16f0c967-f400-18f8-6384-a0c56248909f.png)

設定内容を確認し、"Install cluster"をクリックします。

![スクリーンショット 2021-12-11 0.38.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/c2cda96a-18ce-cb90-00da-10d3ccd94134.png)

インストール状況を確認します。

![スクリーンショット 2021-12-11 0.39.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/c9c46c65-1ab9-e20b-39e7-e7334a6ac52e.png)

途中、"Pending user action"のステータスに遷移します。[ISOディスクをアンマウントし、パワーオン](https://qiita.com/shocnt/items/cb9c64bdb59f379e2666#iso%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%82%92%E3%82%A2%E3%83%B3%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E3%81%97%E3%83%91%E3%83%AF%E3%83%BC%E3%82%AA%E3%83%B3)を参考に、ISOディスクをアンマウントします。

![スクリーンショット 2021-12-11 0.50.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/c7892a31-b029-a365-460a-671756be08eb.png)

インストールが完了しました。

![スクリーンショット 2021-12-11 1.57.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/141726fd-5702-e083-d2a5-cf97632e0609.png)

"Download kubeconfig"をクリックし、kubeconfigを取得します。
また、Username: kubeadminに対するPassword(後のGUIアクセスで用います。)をコピーし、保存します。

## oc CLIでクラスタ確認
[ローカルマシンからの名前解決設定](https://qiita.com/shocnt/items/cb9c64bdb59f379e2666#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%9E%E3%82%B7%E3%83%B3%E3%81%8B%E3%82%89%E3%81%AE%E5%90%8D%E5%89%8D%E8%A7%A3%E6%B1%BA%E8%A8%AD%E5%AE%9A)を参考に10.42.9.191と10.42.9.192向け名前解決を行います。

```text:hosts
10.42.9.191 api.(クラスタ名).(ドメイン名)
10.42.9.192 console-openshift-console.apps.(クラスタ名).(ドメイン名) oauth-openshift.apps.(クラスタ名).(ドメイン名) downloads-openshift-console.apps.(クラスタ名).(ドメイン名) alertmanager-main-openshift-monitoring.apps.(クラスタ名).(ドメイン名) grafana-openshift-monitoring.apps.(クラスタ名).(ドメイン名) prometheus-k8s-openshift-monitoring.apps.(クラスタ名).(ドメイン名) thanos-querier-openshift-monitoring.apps.(クラスタ名).(ドメイン名)
```

ダウンロードしたクラスタ向け設定を行った後、oc CLIでクラスタ状態を確認します。

```
cp kubeconfig-noingress ~/.kube/config
oc cluster-info
```

クラスタOperatorが正常状態となっていることを確認します。AVAILABLE列が全てTrueであれば正常です。

```
watch -n5 oc get clusteroperators
```

## GUIでクラスタ確認
以下URLにブラウザでアクセスし、Username、Passwordを入力します。

```
https://console-openshift-console.apps.(クラスタ名).(ドメイン名)
Username: kubeadmin
Password: 上で確認したパスワード
```

## CSIのインストールとイメージレジストリの構築
[Nutanix CSI Operatorのインストール
](https://qiita.com/shocnt/items/cb9c64bdb59f379e2666#nutanix-csi-operator%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)以降の内容を参照にNutanix CSIのインストールとイメージレジストリの構築を行います。

# おわりに
マルチノードでの最小構成OpenshiftクラスタをNutanix上にAssisted Installerによる半自動UPIインストールで立ち上げる方法をご紹介しました。前回ご紹介した完全手動のUPI手順よりもかなり簡略化されましたし、シングルノードによるオールインワン構成での起動も可能となり、開発向け、エッジ向け等多用途に使えます。2021/12時点ではまだTech Preview機能ですが、GAになればIPIインストールがサポートされるまでの強力なOpenshift on AHVインストールツールになると思われます。次回はNutanix Calmを利用した自動化手順をご紹介します。