OKD(OpenShiftのコミュニティ版)をインストールする②

こちらの記事の続きです。前回は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の設定はクイックスタートガイドを参考に進めました。

Quick Start
An S3 object store so reliable you can run it outside datacenters

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の以下の記事を参考にさせてもらいました。

OpenShift Image Registry + ONTAP S3 でシンプルにオンプレプライベートレジストリを始める - 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の記事を参考に実施します。

OpenShift Image Registry + ONTAP S3 でシンプルにオンプレプライベートレジストリを始める - Qiita
コンテナイメージを扱うときに セキュリティ上の懸念や環境の構成などの理由で オンプレ上のプライベートレジストリを用意したいケースもあるかと思います。 その際、レジストリのストレージ領域としてオブジェクトストレージを利用したい場合があるかと思...

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

コメント

タイトルとURLをコピーしました