Red Hat が提供するエンタープライズなコンテナ・プラットフォーム「OpenShift」がシングルノードに対応したようです。

Meet single node OpenShift: Our newest small OpenShift footprint for edge architectures

The cloud native approach to developing and deploying applications is increasingly being adopted in the context of edge computing. However, edge workloads and use cases span a myriad of locations, technical requirements, and physical footprints. 


そうとなれば試してみたい欲求が抑えられませんよね?

というわけで要件を満たす機器を選定するところから 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
Deploy Single-Node Kubernetes at the Edge with OpenShift

We have been working to make our Red Hat OpenShift footprint smaller to fit into these more constrained environments by putting both control and worker capabilities into a single-node.


機器選定

上記のハードウェア要件を満たす機器を探しました。 すでに 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 レコードの事前登録があります。

必要な DNS レコード

自宅ラボでは PowerDNS を使って DNS サーバを構築しており、そこに上記のレコードを静的登録しました。

検出 ISO 生成

Red Hat Hybrid Cloud Console 1Install OpenShift with the Assisted Installer というページから「検出 ISO」を作成します。

ベアメタルへの OpenShift インストールには IPI (Installer-provisioned infrastructure) と UPI (User-provisioned infrastructure) の 2 通りの方法があったのですが、新しく Assisted Bare Metal Installer が登場したようです(テックプレビュー段階でした)。

Assisted Bare Metal Installer

検出 ISO は Hybrid Cloud Console からノードを検出できるようにするためのイメージで、USB メモリなどに焼いて SNO をインストールする機器にぶっ刺して使います。

それでは Assisted Installer のページで SNO のインストールをおこなっていきます。

Cluster details

まずはクラスタの情報として Cluster nameBase domain を入力します。 Base domain は前項で登録した DNS レコードと合わせてください。

そして Install single node OpenShift (SNO) にチェックを入れます。 チェックを入れると「SNO は高可用性ないですよー」「SNO にはノード追加できませんよー」という注意書きが表示されます。

Cluster details

また、OpenShift version で選択できるバージョンも限定されます。 SNO をチェック入れてると上記画像のとおり 4.8.12 と 4.9.0 が選択できましたが、チェックを外すと 4.6.16 も選択可能となりました。(2021/11/9 時点)

Install single node OpenShift をチェックしなかった場合のバージョン

4.7 はどこいったんだ?という疑問はひとまずスルーして、クラスタの情報を入力したら「Next」です。 次ページの「Generate Discovery ISO」から検出 ISO のイメージをダウンロードできます。

Host discovery

「Generate Discovery ISO」をクリックするとポップアップが表示されます。 ここでは「フル」と「最小」のどちらのイメージをダウンロードするか選択し、SNO にアクセスするための SSH 公開鍵を登録します。 今回は「フルイメージ」を選択しました。

Generate Discovery ISO

ポップアップの「Generate Discovery ISO」をクリックすると準備中となり、

Discovery image is being prepared

しばらく待つとダウンロード可能になります。

Discovery ISO is ready to download

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 の項目が警告になっています。

Information and warnings

Hostname は「localhost」が使えないということらしいので変更します。

Hostname is not valid

Edit Host

Hostname を変更すると Status の警告も無くなりました。

Status ready

最後にネットワークの設定をおこないます。 SNO のネットワークは User-Managed Networking しか選択できない状態となっています。

Networking(サブネット選択前)

Available subnets に SNO ノードが利用できるサブネットが表示されます。 今回は自宅ラボ用ネットワーク 192.168.1.0/24 に繋いでいたのですが、その情報も取得されてプルダウンに表示されていました。

サブネットを選択すると Status が Ready となり、ネットワーク関連の情報も表示されました。

Networking(サブネット選択後)

最後に設定内容をレビューして問題なければ、いよいよ SNO がインストールされます。

Review and create

インストール進行状況も Hybrid Cloud Console から確認できます。

Installation progress

今回のインストールでは途中でインストールが停止してしまいました。 インストール途中に NUC が再起動されたのですが、「BIOS のブートを USB 起動に設定」かつ「USB メモリ挿しっぱなし」という状況だったため、検出 ISO が再度起動してしまったことが原因でした。 上記のどちらかを対処すればインストールが再開します。

Pending user action

無事にインストール完了しました!

インストール成功

これで 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」の左にある > マークをクリックすると…

パスワードの場所

こんなところに隠れていました。

パスワードの場所

結構探したよ…。

ルート証明書

インストール直後のコンソールにブラウザでアクセスしても、証明書エラーとなりログイン画面にすら辿り着けませんでした。

ingress-operator 発行の証明書

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 やってみてはどうでしょう。


  1. Red Hat Insights で提供されるサイトのようです。Ansible Automation Platform とも連携できるようなのでいつか試してみたい。 新しくなった Ansible Automation Platform と Insights を連携してみよう! - 赤帽エンジニアブログ ↩︎