こちらの記事の続きです。前回はOKDのインストールをおこないました。
当記事では踏み台サーバのセットアップとOKD Webコンソールにログインするための設定、それからストレージサーバのセットアップをおこないます。
踏み台サーバのセットアップ
踏み台サーバでOpenShift CLI(ocコマンド)を使用できるようにします。
以下のRedHatブログ記事の「2-4 その他ツール類のインストール (1) OpenShift CLI(oc)のインストール」を参考に実施しました。
続いて、以下のRedHatブログ記事の「OpenShift CLI(oc)による操作 2-4 kubeconfigを使ったログイン方法」を参考に、OKDのインストール完了時にAssisted Installer画面からダウンロードしたKubeconfigファイルを使ってログインできるようにしておきます。
OKD Webコンソールにログインするための設定
OKDのインストール完了時に、Assisted Installerの画面にはOKD Webコンソールにログインするための情報が表示されています。

ユーザはkubeadmin、パスワードは非表示で右端のボタンをクリックするとコピーされる仕組みです
…が、当記事投稿時点で、Assisted Installer画面内のコピーボタンは全部動作しません!
したがって、kubeadminのパスワードを知ることができません。
kubeadmin以外のユーザを作成してログインできるようにします。
以下のRedHatブログ記事の「4. アイデンティティープロバイダーの設定とkubeadminユーザーの削除」を参考にokdadminというユーザを作成し、クラスター管理者として定義しました。
これでOKD Webコンソールにログインすることができます。
ストレージサーバのセットアップ
ストレージサーバでは、共有ストレージとしてNFSとgarage(s3互換オブジェクトストレージ)をセットアップします。
NFS設定
ストレージサーバ上でのNFS設定は、RedHatブログ記事の「2. 踏み台サーバー上のNFSサーバー設定」を参考に実施しました。
続けて、OKDにNFSディスクを認識させる作業は、「3. NFS CSIドライバーの設定」を参考に実施しました。こちらはocコマンドを使うので踏み台サーバから操作します。
「4. イメージレジストリの設定」は実施しません。RedHatブログ記事ではNFSディスク上に作成する手順ですが、今回はオブジェクトストレージを利用するためです。
garage設定
garageの設定はクイックスタートガイドを参考に進めました。

garage用のディレクトリを作成します。
meta:メタデータ保存用
data:オブジェクト保存用
conf:コンフィグ保存用
となります。
$ sudo mkdir /data/garage
$ sudo chmod 777 /data/garage
$ mkdir /data/garage/meta
$ mkdir /data/garage/data
$ mkdir /data/garage/conf
設定ファイル /data/garage/conf/garage.toml を作成します。シークレットやトークンは乱数で生成されるようになっています。
IPアドレスやドメインは環境に合わせてください。
metadata_dir、data_dirのパスが先ほど作成したものと異なりますが、このままで大丈夫です。
$ cd /data/garage/conf
$ cat > garage.toml <<EOF
metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"
db_engine = "sqlite"
replication_factor = 1
rpc_bind_addr = "[::]:3901"
rpc_public_addr = "192.168.100.65:3901"
rpc_secret = "$(openssl rand -hex 32)"
[s3_api]
s3_region = "garage"
api_bind_addr = "[::]:3900"
root_domain = ".s3.okd-storage.home.lab"
[s3_web]
bind_addr = "[::]:3902"
root_domain = ".web.okd-storage.home.lab"
index = "index.html"
[k2v_api]
api_bind_addr = "[::]:3904"
[admin]
api_bind_addr = "[::]:3903"
admin_token = "$(openssl rand -base64 32)"
metrics_token = "$(openssl rand -base64 32)"
EOF
garageサーバ(コンテナ)を起動します。
コンテナのポート3900~3903をホスト(ストレージサーバ)の同じポートにパブリッシュします。
ホストに作成したgarage.tomlファイルをコンテナの/etc/garage.tomlとして、
ホストのmeta、dataディレクトリをコンテナの/var/lib/garage/meta、/var/lib/garage/dataとして
それぞれバインドします。
$ podman run -d \
--name garage \
-p 3900:3900 -p 3901:3901 -p 3902:3902 -p 3903:3903 \
-v /data/garage/conf/garage.toml:/etc/garage.toml:Z \
-v /data/garage/meta:/var/lib/garage/meta:Z \
-v /data/garage/data:/var/lib/garage/data:Z \
dxflrs/garage:v2.1.0
garageの状態を確認します。HEALTHY NODESに名前が出てきたらとりあえずOKです。
$ podman exec -ti garage /garage status
==== HEALTHY NODES ====
ID Hostname Address Tags Zone Capacity DataAvail Version
59bfe46682962d23 d4e83314766f 192.168.100.65:3901 NO ROLE ASSIGNED v2.1.0
クラスタレイアウト(各ノードで利用可能なディスク領域とゾーンの名前の定義)を作成します。
ディスクは500GB、ゾーン名はmyroomとしました。
$ podman exec -ti garage /garage layout assign 59bfe46682962d23 -z myroom -c 500G
$ podman exec -ti garage /garage layout apply --version 1
ZoneとCapacityが反映されていることが分かります。
$ podman exec -ti garage /garage status
==== HEALTHY NODES ====
ID Hostname Address Tags Zone Capacity DataAvail Version
59bfe46682962d23 d4e83314766f 192.168.100.65:3901 [] myroom 500.0 GB 1.6 TB (98.1%) v2.1.0
バケットを作成します。
$ podman exec -ti garage /garage bucket create okd-bucket
==== BUCKET INFORMATION ====
Bucket: ea1ac7ed3b6693d8026f7ff6f6b059fd48fc38c7454f90782d9ac668e381164a
Created: 2025-12-28 13:07:42.518 +00:00
Size: 0 B (0 B)
Objects: 0
Website access: false
Global alias: okd-bucket
==== KEYS FOR THIS BUCKET ====
Permissions Access key Local aliases
バケットのリストにokd-bucketが追加されたことがわかります。
$ podman exec -ti garage /garage bucket list
ID Created Global aliases Local aliases
ea1ac7ed3b6693d8 2025-12-28 okd-bucket
$ podman exec -ti garage /garage bucket info okd-bucket
==== BUCKET INFORMATION ====
Bucket: ea1ac7ed3b6693d8026f7ff6f6b059fd48fc38c7454f90782d9ac668e381164a
Created: 2025-12-28 13:07:42.518 +00:00
Size: 0 B (0 B)
Objects: 0
Website access: false
Global alias: okd-bucket
==== KEYS FOR THIS BUCKET ====
Permissions Access key Local aliases
APIキーを作成します。
シークレットキーはここでしか表示されないようです。あとからgarage key info okd-api-keyを実行しても表示されませんでした。
$ podman exec -ti garage /garage key create okd-api-key
==== ACCESS KEY INFORMATION ====
Key ID: XXXXXXXXXXXXXXXXXXXXXXXXXX
Key name: okd-api-key
Secret key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Created: 2025-12-28 13:08:32.204 +00:00
Validity: valid
Expiration: never
Can create buckets: false
==== BUCKETS FOR THIS KEY ====
Permissions ID Global aliases Local aliases
$ podman exec -ti garage /garage key list
ID Created Name Expiration
XXXXXXXXXXXXXXXXXXXXXXXXXX 2025-12-28 okd-api-key never
$ podman exec -ti garage /garage key info okd-api-key
==== ACCESS KEY INFORMATION ====
Key ID: XXXXXXXXXXXXXXXXXXXXXXXXXX
Key name: okd-api-key
Secret key: (redacted)
Created: 2025-12-28 13:08:32.204 +00:00
Validity: valid
Expiration: never
Can create buckets: false
==== BUCKETS FOR THIS KEY ====
Permissions ID Global aliases Local aliases
キーによるバケットへのアクセスを許可します
$ podman exec -ti garage /garage bucket allow \
--read \
--write \
--owner \
okd-bucket \
--key okd-api-key
==== BUCKET INFORMATION ====
Bucket: ea1ac7ed3b6693d8026f7ff6f6b059fd48fc38c7454f90782d9ac668e381164a
Created: 2025-12-28 13:07:42.518 +00:00
Size: 0 B (0 B)
Objects: 0
Website access: false
Global alias: okd-bucket
==== KEYS FOR THIS BUCKET ====
Permissions Access key Local aliases
RWO XXXXXXXXXXXXXXXXXXXXXXXXXX okd-api-key
動作確認をします。
awscliなどのCLIツール、または、S3 BROWSERなどのGUIツールでgarageに接続し、アップロード・ダウンロードできればOKです。
接続にはAPIエンドポイント(例:192.168.100.65:3900)、アクセスキーID、シークレットアクセスキーが必要です。リージョンはgarageです(デフォルトから変更していなければ)。
イメージレジストリの設定(garageを使用)
この部分は、qiitaの以下の記事を参考にさせてもらいました。

イメージレジストリの現在の設定を確認します。
storageは空白、managementStateはRemovedです。
$ oc get configs.imageregistry.operator.openshift.io -o json | jq '.items[] | {storage: .spec.storage, managementState: .spec.managementState}'
{
"storage": {},
"managementState": "Removed"
}
イメージレジストリの設定値を変更します。
$ oc edit configs.imageregistry.operator.openshift.io/cluster
spec:の下のstorage:部分を以下のように編集します。
storage:
managementState: Unmanaged
s3:
bucket: okd-bucket
region: garage
regionEndpoint: http://192.168.100.65:3900/
S3アクセス用のシークレットを登録します。
$ oc create secret generic image-registry-private-configuration-user --from-literal=REGISTRY_STORAGE_S3_ACCESSKEY=XXXXXXXXXXXXXXXXXXXXXXXXXX --from-literal=REGISTRY_STORAGE_S3_SECRETKEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX --namespace openshift-image-registry
イメージレジストリを有効化します。
$ oc patch config.imageregistry.operator.openshift.io/cluster --type merge -p '{"spec":{"managementState":"Managed"}}'
変更後のイメージレジストリの設定を確認します。
$ oc get configs.imageregistry.operator.openshift.io -o json | jq '.items[] | {storage: .spec.storage, managementState: .spec.managementState}'
{
"storage": {
"managementState": "Unmanaged",
"s3": {
"bucket": "okd-bucket",
"region": "garage",
"regionEndpoint": "http://192.168.100.65:3900/"
}
},
"managementState": "Managed"
}
有効化してしばらくすると、レジストリのPodが起動してきます。
$ oc get pod -n openshift-image-registry -l docker-registry=default
NAME READY STATUS RESTARTS AGE
image-registry-ffb45d8b7-fsrcr 1/1 Running 0 16s
イメージレジストリの動作確認は先ほどのqiitaの記事を参考に実施します。

長くなったので今回はここまで!



コメント