OpenShiftという製品をご存じでしょうか?RedHatが提供している、Kubernetesを基盤としたコンテナプラットフォームです。コンテナだけでなく仮想マシンを動作させることもできます。
魅力的な製品なのですが、ライセンス料が数百万円/年かかるので趣味のユーザーには手が出ません。
※60日使える試用版はありますよ。
そのOpenShiftのコミュニティ版として、OKDが存在します。
OpenShiftは手厚いサポートがありますが、OKDはノーサポートです。新機能などは先にOKDで検証され、エンタープライズな用途にも耐えると確認されたらOpenShiftでリリースされる、というような関係です。その代わりOKDは無料で使うことができます。
今回はそのOKDをインストールしてみます。
当記事は「OKD(OpenShiftのコミュニティ版)をインストールする①」として、概要の説明とOKDインストール作業までを記載します。
インストール作業イメージ
OKDのインストール方式はいくつか用意されていますが、今回はAssisted Installerを使用します。これは対話式のWeb画面でインストールを進めるもので、初心者に優しい方式です。
OpenShift(有償)の場合は、RedHatがWebサイト上にAssited Installerを用意してくれていますので、それを利用します。
Assited Installerにインストール情報を入力すると、インストール対象ノード(サーバ)を起動するためのdiscovery isoというイメージファイルが出力されます。
このisoイメージでインストール対象ノードを起動すると、ノードはAssited Installerに自分の情報を登録しに行きます。その後は、Assited Installerが各ノードに指示を出してインストールが進みます。

しかし、OKD(無償)の場合はWebサイト上にAssited Installerを用意してくれたりはしません。自前のサーバ上でAssisted Installerのコンテナを実行して使うことになります。
Assisted Installerの起動さえしてしまえば、基本的にはOpenShiftと同様にインストールすることができます。「基本的には」と強調したのは、OKD向けのAssisted Installer設定が十分な検証やタイムリーな更新がされているとは言えず、きちんと動作するまである程度試行錯誤が必要だからです。
この記事で一番書きたかったポイントも、Assisted InstallerでOKDインストールが成功する設定だったりします。

OKDの構成
今回作成するOKDクラスタの構成イメージ図です。

今回はokdnode1~3の3ノードでOKDクラスタを作成します。
より小さい構成としては、Single node OKD(SNO)や、Two-Node with Arbiter、Two-Node with fencingがあります。SNOはその名のとおりシングル構成で冗長性がありません。Two-Node系は4.19とか4.20で出てきた新しい概念のようです。(詳細は調べきれていないので割愛。)
逆に、本番運用向けには、「コントロールプレーンノードを3台以上、インフラ系コンポーネントを処理するインフラノードを3台以上、ユーザーアプリケーションを処理するコンピュートノードを2台以上で負荷に応じて設置」みたいな構成になりますが、自宅環境ではちょっと無理ですね。
OKDクラスタ外から管理コマンドを実行したりする環境(=踏み台サーバ)が必要なので、OKDクラスタとは別にfumidai-okdサーバを配置します。このサーバはokdnode1~3から共有ストレージとして利用するNFSサーバを兼任します。
レジストリ用途ではNFSのようなファイルストレージではなくオブジェクトストレージが推奨されているため、obj-storageサーバを配置します。このサーバでは、s3互換オブジェクトストレージであるgarageが稼働します。
OKDインストール時に必要なAssisted Installerを実行するため、okdaiサーバを配置します。
DNSサーバは、既存のルータの機能を利用しています。
ネットワークは、OKD専用に192.168.100.0/24のセグメントを用意しました。普段使いのセグメントとは別になっています。つまり、家庭のWi-Fiに繋がっているPCやスマホなどはこのセグメントには存在しません。
(参考)物理構成
物理的には、ミニPC(6コア12スレッド、64GBメモリ)を2台、ミニPC(4コア4スレッド、12GBメモリ)を1台用意しました。(以降、物理PC1、2、3と呼びます。)
物理PC1、2、3とも、KVM仮想化ホストとして動作します。
KVM仮想マシンは以下のように配置しています。
物理PC1上:OKDノード1、OKDノード2
物理PC2上:OKDノード3、Assisted Installer
物理PC3上:踏み台PC、オブジェクトストレージ
また、物理PC1、2、3間は2.5GbEで接続されています。
(OpenShift/OKDの推奨構成は10Gですがうちに対応機器がないので、せめて少しでも速く、という感じです。)

インストール事前作業
OKDインストールの事前作業として以下の作業をおこないます。
- DNSレコード登録
- 踏み台サーバ、オブジェクトストレージサーバ、Assisted Installer用サーバのOSインストール
- OKDノードとなるサーバのMACアドレス確認
DNSレコード登録
インストール作業前にいくつかDNSレコードを登録し名前解決できるようにしておく必要があります。最低限必要なDNSレコードは以下のとおりです。
| コンポーネント | レコード | 設定例 (すべてAレコード) | 説明 |
|---|---|---|---|
| Kubernetes API | api.<cluster_name>.<base_domain>. | api.okd.home.lab 192.168.100.76 | API ロードバランサーを特定するための DNSレコード。 クラスタ外のクライアントからも名前解決できる必要がある。 |
| Kubernetes API | api-int.<cluster_name>.<base_domain>. | api-int.okd.home.lab 192.168.100.76 | API ロードバランサーを内部的に識別するための DNSレコード。 クラスタ内で名前解決できればよい。 |
| ルート | *.apps.<cluster_name>.<base_domain>. | *.apps.okd.home.lab 192.168.100.77 | Ingressロードバランサーを参照するワイルドカード DNSレコード。 たとえばコンソール画面のURL「console-openshift-console.apps.<cluster_name>.<base_domain>」を開く際などに使用される。 クラスタ外のクライアントからも名前解決できる必要がある。 |
| コントロールプレーンマシン /コンピュートマシン | <ノード名>.<cluster_name>.<base_domain>. | okdnode1.home.lab 192.168.100.78 okdnode2.home.lab 192.168.100.79 okdnode3.home.lab 192.168.100.80 | コントロールプレーンノード/ワーカーノードの各マシンを特定するための DNSレコード。 クラスタ内で名前解決できればよい。 |
踏み台サーバ、オブジェクトストレージサーバ、Assisted Installer用サーバのOSインストール
Linuxサーバを3台準備します。今回はRHEL10を使用しました。
※Red Hat Developer サブスクリプションを利用しています。無償で、物理・仮想あわせて16台までRHELを利用可能です。
RHELインストール時のソフトウェアの選択は、「サーバー」(GUIが無いほう)で十分です。
この後作業中にいくつか追加パッケージが必要になりますが、必要になった都度追加しますので、現時点では考慮不要です。
踏み台サーバでSSH鍵の作成
Assisted Installerの中で、踏み台サーバのSSHパブリックキーを入力する箇所があります。あらかじめ鍵を生成しておきます。
踏み台サーバに一般ユーザでログインして、以下のコマンドを実行します。
$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/suzu-ha/.ssh/id_ed25519):
Created directory '/home/suzu-ha/.ssh'.
Enter passphrase for "/home/suzu-ha/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/suzu-ha/.ssh/id_ed25519
Your public key has been saved in /home/suzu-ha/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx suzu-ha@fumidai-okd
The key's randomart image is:
+--[ED25519 256]--+
...
生成されたキーは、デフォルトでは「ユーザのホームディレクトリ/.ssh/」ディレクトリの中にあります。「.pub」とついているほうがパブリックキーです。
$ ls -la /home/suzu-ha/.ssh/id_ed25519*
-rw-------. 1 suzu-ha suzu-ha 411 11月 1 22:48 /home/suzu-ha/.ssh/id_ed25519
-rw-r--r--. 1 suzu-ha suzu-ha 100 11月 1 22:48 /home/suzu-ha/.ssh/id_ed25519.pub
$ cat /home/suzu-ha/.ssh/id_ed25519.pub
ssh-ed25519 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ suzu-ha@fumidai-okd
OKDノードとなるサーバのMACアドレス確認
Assisted Installerの中で、OKDノードのMACアドレスを入力しなければいけません。今回はKVM仮想マシンを使用しますので、あらかじめKVM仮想マシンを作成し、MACアドレスを確定させておきます。
Assisted Installerの起動
Assisted Installer用サーバに一般ユーザでログインします。
作業ディレクトリを作成し、そこに移動します。
$ mkdir assisted-service
$ cd assisted-service/
以下のリポジトリから、pod.ymlとokd-configmap.ymlをダウンロードします。
https://github.com/openshift/assisted-service/tree/master/deploy/podman
pod.ymlはassisted-serviceコンテナの起動方法を定義したファイルです。
okd-configmap.ymlはassisted-serviceの設定を定義したファイルです。
$ wget https://raw.githubusercontent.com/openshift/assisted-service/refs/heads/master/deploy/podman/pod.yml
$ wget https://raw.githubusercontent.com/openshift/assisted-service/refs/heads/master/deploy/podman/okd-configmap.yml
okd-configmap.ymlの中の、自ホストのIPアドレスを書き換えます。
ASSISTED_SERVICE_HOST: 127.0.0.1:8090
↓
ASSISTED_SERVICE_HOST: 192.168.100.81:8090
IMAGE_SERVICE_BASE_URL: http://127.0.0.1:8888
↓
IMAGE_SERVICE_BASE_URL: http://192.168.100.81:8888
SERVICE_BASE_URL: http://127.0.0.1:8090
↓
SERVICE_BASE_URL: http://192.168.100.81:8090
ここからが、この記事で一番書きたかった部分です。
本来は上記の編集だけで良いはずなのですが、記事作成時点のokd-configmap.yml(Commits on May 30, 2025)ではOKDインストールが失敗します。
こちらの記事(https://github.com/okd-project/okd/issues/2018)によると、ブートストラップOS(インストール作業のために一時的に利用されるOS)がFedora CoreOS(FCOS)であることが悪さをしているようです。
※OKDのベースとなるOSはFCOSからCentOS Stream CoreOS(SCOS)に移行しているので、FCOSを使用することで何らかの不整合があるのかもしれません。
OS_IMAGES、RELEASE_IMAGESの部分を以下のとおり書き換えます。上記の記事をベースにアレンジしたもので、OKD4.18~4.20までインストールできる設定になっています。
この設定ファイルでは、ブートストラップOSとしてRed Hat Enterprise Linux CoreOS (RHCOS)が使用されますが、インストール処理が終わるとSCOSに入れ替わっています。
OS_IMAGES: '[{"openshift_version":"4.16","cpu_architecture":"x86_64","url":"https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/39.20240322.3.1/x86_64/fedora-coreos-39.20240322.3.1-live.x86_64.iso","version":"39.20240322.3.1"}]'
↓
OS_IMAGES: '[{"openshift_version":"4.18","cpu_architecture":"x86_64","url":"https://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/4.18/4.18.23/rhcos-4.18.23-x86_64-live.x86_64.iso","version":"418.94.202508060022-0"},{"openshift_version":"4.19","cpu_architecture":"x86_64","url":"https://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/4.19/4.19.10/rhcos-4.19.10-x86_64-live-iso.x86_64.iso","version":"9.6.20250826-1"},{"openshift_version":"4.20","cpu_architecture":"x86_64","url":"https://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/pre-release/4.20.0-rc.0/rhcos-4.20.0-rc.0-x86_64-live-iso.x86_64.iso","version":"9.6.20250826-1"}]'
RELEASE_IMAGES: '[{"openshift_version":"4.16","cpu_architecture":"x86_64","cpu_architectures":["x86_64"],"url":"registry.ci.openshift.org/origin/release:4.16","version":"4.16.0-0.okd","default":true,"support_level":"beta"}]'
↓
RELEASE_IMAGES: '[{"openshift_version":"4.18","cpu_architecture":"x86_64","cpu_architectures":["x86_64"],"url":"quay.io/okd/scos-release:4.18.0-okd-scos.10","version":"4.18.0-okd-scos.10","default":true,"support_level":"beta"},{"openshift_version":"4.19","cpu_architecture":"x86_64","cpu_architectures":["x86_64"],"url":"quay.io/okd/scos-release:4.19.0-okd-scos.9","version":"4.19.0-okd-scos.9","support_level":"beta"},{"openshift_version":"4.20","cpu_architecture":"x86_64","cpu_architectures":["x86_64"],"url":"quay.io/okd/scos-release:4.20.0-okd-scos.5","version":"4.20.0-okd-scos.5","support_level":"beta"}]'
設定ファイルを保存したらコンテナを起動します。コンテナ起動にはpodmanが必要なのでパッケージを追加します。
$ sudo dnf install podman
$ sudo podman play kube --configmap okd-configmap.yml pod.yml
Pod:
(略)
Containers:
(略)
(参考)コンテナを停止するときはこのコマンドです。
$ sudo podman play kube --down pod.yml
コンテナが起動したら、以下のURLを開きます。
http://(Assisted Installer用サーバのホスト名またはIPアドレス):8080/
(当環境では、http://okdai.home.lab:8080/)
このような画面が表示されます。
okd-configmap.ymlで定義したとおり、okd-4.18~okd-4.20が選択肢として表示されていることが分かります。

インストール実行
ここからはRedHatのブログ記事を参考に進めましょう。OpenShift向けに記載されていますが、OKDもほぼ同一です。
インストールが完了するとこのような表示になります。
「Download kubeconfig」リンクから取得するkubeconfigファイルは超重要ファイルなので、Assisted-Installerコンテナを停止する前に必ずダウンロードしておきましょう。

長くなったので、続きは次の記事で。


コメント