さくらのクラウドにOpenShiftシングルノードクラスタ(SNO)をAssisted Installerで構築する

OpenShift 4.8からだったか、Red Had Hybrid Cloud Consoleで提供されるインストール方法にAssisted Installerというのが追加され、ISOブートイメージを使用してbootstrapノードを用意せずにクラスター構築できる様になった。
それはいいね！なのだが、ISOブートイメージを使うという事でAWSとかのクラウドで利用が難しいな。。と思っていたら、さくらのクラウドのVMインスタンスはISOイメージからブート可能という事を知り、ちょっと試してみようかと。

Assisted Installer自体は現時点でTech Previewとなっているが、シングルノード構成がOpenShift 4.9でGAとなっているので、構築されたクラスタは本番環境で使ってもサポート対象になるはず。まあ、考慮点はあるが、SNOクラスタ２つ作れば大体の問題は解決する。
単体OSでdocker/podmanで良いんじゃねーのという事もあるだろうが、そこはargocdでノータッチアプリ更新とか、Kubernetesのエコシステム活用の利点が現状では勝る所もあるだろう。

# 前提
・さくらのクラウドにアカウントがある事
https://cloud.sakura.ad.jp/

・Red Hat Hybrid Cloud Console(HCC)にアカウントがある事
https://console.redhat.com/

# 1. OpenShiftインストール用のISOファイルを入手する
HCCの左上メニューの「OpenShift」を開き、「Create Cluster」をクリックする。
作成画面の上側、作成先の選択肢に「Cloud」、「Datacenter」、「Local」とあるが、「Datacenter」を選ぶ。
「Assisted Installer」の「Create cluster」をクリックする。
「Cluster name」にクラスタ名を、「Base domain」に作成するクラスタのドメイン名を入力する。ドメイン名はexample.comでも良いと思うが、routeのデフォルト値と合わせたいなら別途DNSレジストラに登録したDNS名を入力する。まあ、ここでexample.comを使っても後でどうにでもなる。
「Install single node OpenShift (SNO)」にチェックを付ける。
「I understand～」にチェックを付ける。繰り返しになるが、[SNOクラスタ自体はOpenShift 4.9でGA](https://www.redhat.com/en/about/press-releases/red-hat-pushes-edge-further-updates-red-hat-openshift-and-red-hat-advanced-cluster-management-kubernetes)である。
「OpenShift version」に4.9以降を選択する。
「Next」をクリックする。

次の画面で「Generate a Discovery ISO」をクリックして、OpenShift導入用のISOファイルをダウンロードする。クラスタ毎にカスタマイズされたISOが生成されるので使いまわしは出来ない。Full imageで1GB弱。CoreOSにsshログインしたい場合は、普通すると思うが、sshの公開鍵も登録する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/b5fed426-b9ca-323e-faf0-f84cac749c5d.png)

# 2. ISOファイルをさくらのクラウドにアップロードする
さくらのクラウド側で、「ストレージ」>「ISOイメージ」からISOイメージを作る。
curlを使ったファイルアップロード方法が提示されるので先のISOファイルをアップロードする。
アップロードが終わったら「FTPを完了」として、有効状態を「利用可能」にする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/e262817c-b18a-6b43-e265-2c928937fc46.png)

# 3. さくらのクラウドでサーバを起動する
「サーバ」から、サーバを起動する。OpenShift側のスペック要求に従い仮想コア:8、メモリ:32GBで。これだけでシングルマスタ２ワーカーのコミュニティ版Kubeクラスタ超える。。ともあれ、ディスクサイズは250GB(>120GB)で、ディスクソースはブランクにして、「ISOイメージを使う」で、先に作成したISOイメージを指定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/56b68b7d-49ab-895d-7da7-1f17c6c87fca.png)

その他はデフォルトか、監視設定等好みに合わせて。検証用で２～３時間使うなら500円か、、ちょっと高いか。

「作成」をクリックすると、１分くらいでサーバが起動する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/70d1b8b2-f32c-70c4-4ee0-863250c0ec5a.png)

# 4. OpenShiftの導入を待つ
サーバが作成されると、さくらのクラウド画面でサーバの「コンソール」からISOイメージがブートして動作しているのを確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/aab29682-adfb-0e00-5f8a-3f38c5aed66f.png)

HTML5クライアントでサーバのコンソール画面に接続可能。あーこれはいいな。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/71f04590-75f8-e89a-356c-e88373ca4330.png)

しばらくすると、Red Hat HCC側の画面でStatがReadyになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/c2f876d7-933e-e22b-c1e9-b40071a61579.png)

そうしたら、HCCで「Next」をクリックする。

# 5. クラスタを作成する

Networkingの画面で「Available subnets」を選択して、「Next」。
「Review and create」画面で「Install cluster」をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/ec18f3b1-ee97-d90b-9245-f67d74175be3.png)

インストールは大体35分くらいで完了する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/93be8c42-42f2-39ae-7673-a53d810eeb75.png)

完了したら、クラスタにアクセスするためのkubeconfigを入手することもできるし、OpenShift WebコンソールにアクセスするためのURLも表示される。
作成中に指定したDNS名をレジストラで取得していないのなら、Webブラウザを使うPCのhostsファイルに以下のエントリを追加する。

```
＜サーバのIPアドレス＞ console-openshift-console.apps.sno.example.com oauth-openshift.apps.sno.example.com api.sno.example.com
```

Webコンソールにログインするためのユーザー名は「kubeadmin」、パスワードは先のHCCのインストール画面から入手できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/3186de6e-bf61-7592-69c1-b0bf8b4aa15e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/c0c6dcd1-533e-8019-6d90-c20521a710e3.png)

ここから先はまあ、普通のOpenShiftと変わらない。

# ちなみに

ちなみにだが、構築に使ったRed Hat Hybrid Cloud Console、最近名前が変わったと思うが、これを使って自前構築のOpenShiftクラスタへのアクセスポータルとすることが出来る。マルチクラスタ管理だ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/4aee13f6-3885-55e8-2c07-5dfe53cb82c1.png)

ここからWebコンソール開くこともできるし、サポートケースも作れるし、CPUとメモリー使用率（Reserve率か？）といったごく簡単なメトリクスも取得できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/31a55beb-9db8-fde4-8152-96470090ad5c.png)

まあ、ログはAWS CloudWatchに送り付けたほうが良いだろう。

https://qiita.com/rk05231977/items/7eab4d5aa6c6346eec9f

内部イメージレジストリも、まあ、使うのであればAmazon S3をバックエンドにしたほうが無難ではあるかな。。

https://qiita.com/rk05231977/items/80454f156c16fa5ac982

なお、シングルノードクラスタだとアップデートがちゃんと動くの？というのが怖いところだが、とりあえず4.9.0から執筆時点最新の4.9.4へのアップデートは上手くいった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/51cd39e7-c2a7-348a-20b1-212fe6bec3b0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/5c2844cb-5a61-b558-3991-91ef89a998fb.png)

上手くいかなかったところでサポートに問い合わせても様々な言い訳とユーザー非難の雨霰かもしれないが、まあ、クラスタ作り直せばいい。しびれを切らしたらコミュニティ版Kubernetesを使おう。

https://qiita.com/rk05231977/items/9f4ce13d3cd285891fd7

いやしかし、アップデート中にOSが再起動する際の、さくらのクラウドのhtml5コンソール画面のなんと頼もしいことか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/2cb71d21-77e9-4146-3e31-a24731cadb55.png)

IPアドレスも、良し悪しだろうが、パブリックIPアドレスがサーバーに直接割り当てという形式も個人的には悪くない。この辺はトレンドに負けてそのうち変わるかもだが。

そういえば、さくらのクラウドで停止中のインスタンスの料金はどうなるんだろうか。。？ストレージ部分を除いて無料か。なら寝ているうちはサーバ止めておけばいいか。

https://www.sakura.ad.jp/information/announcements/2017/03/09/1538

ISOブートが出来てブート中の画面も操作できるってことは、クラウドでは夢のWindows Server BackupからのOSのISOイメージで起動してベアメタルリストアできるってことだ。良いんじゃないか。