Red Hat が提供するエンタープライズなコンテナ・プラットフォーム「OpenShift」がシングルノードに対応したようです。
そうとなれば試してみたい欲求が抑えられませんよね?
というわけで要件を満たす機器を選定するところから SNO (Single Node OpenShift) を導入してみました。
ハードウェア要件
SNO をインストールするには以下のスペックが必要です。
プロファイル | CPU | メモリ | ストレージ |
---|---|---|---|
最低限 | 8 vCPU コア | 32 GB | 120 GB |
普通(?) の OpenShift だとコントロールプレーンで 4 コア/16 GB、コンピュートノードで 2 コア/8 GB が最小要件となっているので、一台辺りのスペックは高くなってしまいます。 一台でコントロールプレーンとコンピュートノードの役割を担うのでそこら辺は仕方ないですね。
マシン | OS | CPU | メモリ | ストレージ | IOPS |
---|---|---|---|---|---|
ブートストラップ | RHCOS | 4 | 16 GB | 100 GB | 300 |
コントロールプレーン | RHCOS | 4 | 16 GB | 100 GB | 300 |
コンピュート | RHCOS、RHEL7 7.9、または RHEL 8.4 | 2 | 8 GB | 100 GB | 300 |
機器選定
上記のハードウェア要件を満たす機器を探しました。 すでに ASRock DeskMini A300 というベアボーンを導入しているのですが、今回は別の機器を検討しました。(新しいものが欲しかったので!)
DeskMini 導入時の記事はこちら。
結論から言うと、第 11 世代 i5-1135G7 を搭載した NUC11PAHi5 を選びました。
選定基準ですが、メモリとストレージは置いといて、まずは CPU コア数をベースに考えました。 自宅ラボで有名な NUC のスペックを確認してみると、都合よくハードウェア要件を満たすモデルがありました。
11 世代 NUC には CPU が異なる 3 モデルがありますが、一番お手頃な NUC11PAHi3 (Core i3-1115G4) は 2 コア 4 スレッドのため要件を満たしません。 NUC11PAHi5 (i5-1135G7) と NUC11PAHi7 (i7-1165G7) は 4 コア 8 スレッドで要件を満たしています。
あとはお財布との相談で、NUC11PAHi5 となりました(5000 兆円あったら NUC11PAHi7 にしてた)。
最近は Minisforum というメーカーが面白そうなベアボーンを出していたのでそちらも検討したのですが、Windows 搭載モデルが多く「OS 入れ替えるのに Windows 分の費用も上乗せされてるんだよなぁ…」とか考えてるうちに候補から外れてしまいました。
NUC11PAHi5 の最大搭載可能メモリ 64 GB と、SNO のハードウェア要件を十分に満たせます。 DeskMini が 32 GB で検証環境としてはギリギリなこともあり、一気に 64 GB にしようかと思ったのですが、ここでもお財布のストップがかかって 32 GB メモリを 1 枚にしました。 いずれ 2 枚目買って 64 GB にするんだ…。
https://www.amazon.co.jp/gp/product/B08J2RT82C/
ちなみに、この記事を書いている日はアマゾンのブラックフライデー初日です。 上記メモリが安くなってないかなぁと覗いたら値上がりしてました。なんでや
ストレージは家の中で転がっていた 256 GB の SSD にしました。 m.2 の空きがあるので、いずれストレージが不足してきたら拡張する予定です。
あとは NUC には電源ケーブルが付属しないということで、アマゾンの売れ筋から見繕いました。
https://www.amazon.co.jp/gp/product/B014GLJIMO/
- NUC11PAHi5 (筐体 + CPU)
- メモリ 32GB
- SSD 256 GB
- 電源ケーブル
- LAN ケーブル
以上が SNO を構築するために用意したハードウェアになります。
インストール
機器の準備ができたので、早速 SNO のインストールをおこないます。 SNO に関する公式ドキュメントは以下になります。
他の環境に OpenShift をインストールするのと比べてかなりページ数が少ないのが気になりますね…。
とは言え必要十分な情報は記載されているので、ドキュメント読みながらやればこの投稿は必要ないくらい簡単にインストールできますが、この投稿を意味あるものにするためにドキュメントの手順に合わせてインストール時のスクショを載せていきましょう。
SNO 用 DNS レコード登録
唯一のソフトウェア的な要件として、SNO が利用する DNS レコードの事前登録があります。
自宅ラボでは PowerDNS を使って DNS サーバを構築しており、そこに上記のレコードを静的登録しました。
検出 ISO 生成
Red Hat Hybrid Cloud Console 1 の Install OpenShift with the Assisted Installer というページから「検出 ISO」を作成します。
ベアメタルへの OpenShift インストールには IPI (Installer-provisioned infrastructure) と UPI (User-provisioned infrastructure) の 2 通りの方法があったのですが、新しく Assisted Bare Metal Installer が登場したようです(テックプレビュー段階でした)。
検出 ISO は Hybrid Cloud Console からノードを検出できるようにするためのイメージで、USB メモリなどに焼いて SNO をインストールする機器にぶっ刺して使います。
それでは Assisted Installer のページで SNO のインストールをおこなっていきます。
まずはクラスタの情報として Cluster name
と Base domain
を入力します。
Base domain
は前項で登録した DNS レコードと合わせてください。
そして Install single node OpenShift (SNO)
にチェックを入れます。
チェックを入れると「SNO は高可用性ないですよー」「SNO にはノード追加できませんよー」という注意書きが表示されます。
また、OpenShift version
で選択できるバージョンも限定されます。
SNO をチェック入れてると上記画像のとおり 4.8.12 と 4.9.0 が選択できましたが、チェックを外すと 4.6.16 も選択可能となりました。(2021/11/9 時点)
4.7 はどこいったんだ?という疑問はひとまずスルーして、クラスタの情報を入力したら「Next」です。 次ページの「Generate Discovery ISO」から検出 ISO のイメージをダウンロードできます。
「Generate Discovery ISO」をクリックするとポップアップが表示されます。 ここでは「フル」と「最小」のどちらのイメージをダウンロードするか選択し、SNO にアクセスするための SSH 公開鍵を登録します。 今回は「フルイメージ」を選択しました。
ポップアップの「Generate Discovery ISO」をクリックすると準備中となり、
しばらく待つとダウンロード可能になります。
URL を見るとイメージは S3 に格納されているようです(AWS 詳しくないので合ってるか不安…)。 「Download Discovery ISO」をクリックして検出 ISO をダウンロードします。 検出 ISO のサイズは約 1 GB (今回は 987 MB) でした。
ダウンロードしたイメージを USB メモリなどに焼きます。 今回は Raspberry Pi Imager を使いましたが、問題なく SNO ノードで起動することができました。
USB メディアを使用したインストール
検出 ISO の準備ができたら、NUC に USB メモリを刺して電源を入れます。 USB からブートする設定になっていれば、Hybrid Cloud Console 上に検出されたノードの情報が表示されます。 検出直後は Hostname と Status の項目が警告になっています。
Hostname は「localhost」が使えないということらしいので変更します。
Hostname を変更すると Status の警告も無くなりました。
最後にネットワークの設定をおこないます。
SNO のネットワークは User-Managed Networking
しか選択できない状態となっています。
Available subnets
に SNO ノードが利用できるサブネットが表示されます。
今回は自宅ラボ用ネットワーク 192.168.1.0/24
に繋いでいたのですが、その情報も取得されてプルダウンに表示されていました。
サブネットを選択すると Status が Ready となり、ネットワーク関連の情報も表示されました。
最後に設定内容をレビューして問題なければ、いよいよ SNO がインストールされます。
インストール進行状況も Hybrid Cloud Console から確認できます。
今回のインストールでは途中でインストールが停止してしまいました。 インストール途中に NUC が再起動されたのですが、「BIOS のブートを USB 起動に設定」かつ「USB メモリ挿しっぱなし」という状況だったため、検出 ISO が再度起動してしまったことが原因でした。 上記のどちらかを対処すればインストールが再開します。
無事にインストール完了しました!
これで NUC 一台で OpenShift を稼働させることができました。 あとは kubeconfig をダウンロードしてクラスタに繋いだり、コンソールにアクセスして GUI で Operator を入れたり、OpenShift ならでは検証ができるようになります。
その他
OpenShift の評価版
「Red Hat Developer Suite」という Red Hat 製品のいくつかを無料で使える素晴らしいサブスクリプションがあります。
Red Hat製品を無料で試してみよう | Now on Red Hat
上記のページで OpenShift も対象っぽい記載があるので「太っ腹じゃん!」と思いながら今回の SNO 構築を決めたのですが、どうやら OpenShift は対象外のようで評価版という形で SNO は使うことになりました。
評価版と言っても期間は 60 日間で、クラスタを再インストールしたら再度 60 日に巻き戻ったので遊ぶ分には十分かなという感じです。
kubeadmin のパスワード
インストールで作成される管理ユーザ「kubeadmin」で oc login
しようとしたのですが、パスワードがなかなか見つかりませんでした。
Hybrid Cloud Console のクラスタページの「Installation progress」の左にある > マークをクリックすると…
こんなところに隠れていました。
結構探したよ…。
ルート証明書
インストール直後のコンソールにブラウザでアクセスしても、証明書エラーとなりログイン画面にすら辿り着けませんでした。
SNO のページではないですが、OpenShift のドキュメントにルート証明書を変更する手順はありました。 しかし今回はそのままのルート証明書でアクセスするようにしました。
oc get secret router-ca -n openshift-ingress-operator -o jsonpath='{.data.tls\.crt}' | base64 -d > router-ca.crt
というコマンドで証明書を抽出して、クライアント PC にインストールしました。
これでコンソールにもアクセスできるようになりました。
所感
自分が初めて OpenShift を触ったのは 4.2 くらいのときで、やれブートストラップノードが必要だの、やれ Ignition がどうだのと、勉強にはなったのですが中々つらい気持ちもありました。
それに比べて SNO (Single Node OpenShift) のインストールはとても簡単でした(Assisted Installer のおかげ?)。 もっとヒィヒィ言いながらインストールさせてくれてもよかったのに…って気持ちも湧きそうなくらいです。
わざわざ NUC で OpenShift 用意して自宅でなにするよって疑問も残ってますが、kubeadm で作ったクラスタと比較しながら Kubernetes の勉強に使えればよいですね。
SNO の中で各コンポーネントがどのように動いているか等は改めて投稿したいと思います。
何はともあれ、OpenShift を気軽に触れる環境が自宅にあるというのはとても精神衛生上よろしいので、ぜひこれを読んだ人も SNO やってみてはどうでしょう。
-
Red Hat Insights で提供されるサイトのようです。Ansible Automation Platform とも連携できるようなのでいつか試してみたい。 新しくなった Ansible Automation Platform と Insights を連携してみよう! - 赤帽エンジニアブログ ↩︎