はじめに
仕事でOpenShiftを扱うため、勉強環境が欲しくなった。OpenShiftはKubernetesにRedHatがもりもり機能を付け加えて有償で提供しているものである。OpenShiftにはいくつかディストロが存在する。
もっとも有名であろうディストロがOCP(OpenShift Container Platform)である。これが一般的に企業で使わている。OCPのライセンス費用はとても個人で払えるような額ではない。
ということで、今回は無償で使えるコミュニティ開発版のOKD(Origin Community Distribution of Kubernetes)というものを使っていく。
OKDはRedHatの開発・検証版という位置づけのようで、こちらで安定したらOCPとしてリリースするようである。つまり、RHELとCentOS Streamのような関係であるのだろう。
検証環境
今回は手持ちのXeonサーバーにProxmoxでVM立ててインストールを行う。VM WareやVertual Boxでも、NICのMacAdress等がわかれば手順は基本的に一緒。
| 環境 | |
|---|---|
| CPU | Xeon E5 2698 v3(16C32T) |
| メモリ | DDR4 ECC REG 48GB |
| ストレージ | NVMe m.2 500GB |
こちらをホストマシンの環境として、OKDの最小要件である 8vCPU/16GB/120GB のVMを作成しOKDをインストールする。
OKDをインストールするためにISOを作成する必要があるのだが、それはまた別のVMを立てて行う。
※OKDのインストーラーは x86上での動作が前提
※筆者は4.15と4.20以外のバージョンでの動作は未確認。
事前準備
1. isoを作成する用の作業環境を用意する
- VMでも何でもいいのでdockerが動作する環境
- 今回はubuntu22.04のVMを作業環境とする
2. gitとdocker,docker-composeのインストールを行う
sudo apt install git docker.io docker-compose
3. iso作成パッケージの取得
git clone https://github.com/takuteh/okd_setup_package.git
cd okd_setup_package
4. ssh公開鍵の作成
- OKDクラスタに対してログインするのにパスワード認証はできず、ssh公開鍵が必須となる
- ノードを操作する予定のマシン上でsshキーペアの作成を行う
- 下記コマンドを実行後何回かEnterを押しておけば
~/.ssh/id_rsa.pubに公開鍵ができるので控えておく
ssh-keygen -t rsa -b 4096
5. インストール予定のマシンのNIC名とMACアドレスの取得
- まずはVMの作成を行う、CPU8コア/メモリ16GB/ディスク120GBを指定、CPUの種類は4.15ではx86-64-v2-AESで動作したが、4.20はkernel panicになり動作しなかったためhostを選ぶ
- yamlにはNICのインターフェース名とMACアドレスを正しく入れる必要があるが、proxmoxからは確認する方法がわからなかったので、とりあえず適当なOSをbootして確認する。
- 後でディスク交換してokdインストールをする
- NIC名が
ens18、mac_addressがbc:24:11:bc:b8:80とわかった
6. RedHatアカウントの作成
RedHat Hybrid Cloud Consoleにログインできるようにしておく
こちらは後でpullSecretを取得するために必要になる
インストール用ISO作成
- こちら からインストールしたいOKDのバージョンを選ぶ
このように複数バージョン出てくるので、好きなものを選ぶ 今回は4.20.0-okd-scos.17を使用する
※ecとついているものは実験用・開発用という位置づけのよう
okdバージョンを指定する
echo OKD_VERSION=4.20.0-okd-scos.17 > ./configs/okd_version.env
1.install-config.yamlの編集
vi ./configs/install-config.yaml
---
apiVersion: v1
baseDomain: example.com
compute:
- hyperthreading: Enabled
name: worker
replicas: 2
controlPlane:
hyperthreading: Enabled
name: master
replicas: 3
metadata:
name: ocp4
networking:
clusterNetwork:
- cidr: 10.128.0.0/14 #podに振られるネットワーク(変更不要)
hostPrefix: 23
serviceNetwork:
- 172.30.0.0/16 #クラスタ内のserviceに振られるネットワーク(変更不要)
machineNetwork:
- cidr: 10.100.0.0/24 #・・・(1)
platform:
none: {}
pullSecret: '{"auths":{"fake":{"auth":"aWQ6cGFzcwo="}}}'#・・・(2)
# ssh公開鍵・・・(3)
sshKey: |
ssh-ed25519 AAAA... user1@example.com
ssh-ed25519 AAAA... user2@example.com
変更の必要がある項目
- (1)machineNetwork・・・VM自体に振られるネットワークアドレス。筆者の環境では10.100.0.0/24
- (2)pullSecret・・・こちらからコピーする
- (3)sshKey・・・ノードに対してログインするマシンのssh公開鍵、okdのノードに対してsshはパスワード認証できないため、sshの鍵を埋め込んでおく必要がある。
2.agent-config.yamlの編集
vi ./configs/agent-config.yaml
apiVersion: v1alpha1
kind: AgentConfig
metadata:
name: okd-sno # クラスタ名
rendezvousIP: 10.100.0.151 # Masterノードの固定IP・・・(1)
hosts:
- hostname: master0 # ノードのホスト名
interfaces:
- name: enp0s18 # VM NIC名・・・(2)
macAddress: BC:24:11:98:73:CF # VM NICのMACアドレス・・・(3)
networkConfig:
interfaces:
- name: enp0s18 #VM NIC名・・・(2)
type: ethernet
state: up
mac-address: BC:24:11:98:73:CF # VM NICのMACアドレス・・・(3)
ipv4:
enabled: true
address:
- ip: 10.100.0.151 # MasterVMの固定IP・・・(1)
prefix-length: 24
dhcp: false
dns-resolver:
config:
server:
- 10.100.0.1 # ルータやProxmoxネットワークのDNS・・・(4)
routes:
config:
- destination: 0.0.0.0/0
next-hop-address: 10.100.0.1 # デフォルトゲートウェイ・・・(5)
next-hop-interface: enp0s18 # VM NIC名・・・(2)
table-id: 254
変更の必要がある項目
コメントを入れているが、番号をつけていないものは任意で変更
- (1)Masterノードの固定IP・・・ノードにつけたいIP、DHCPの範囲とは被らないよう注意
- (2)VM NIC名・・・事前準備で確認したVMのNIC名
- (3)VM NICのMACアドレス・・・事前準備で確認したVMのNICのMACアドレス
- (4)DNS・・・Podが外の世界と通信する際に参照するDNSサーバー
-
(5)デフォルトゲートウェイ・・・VMに振られるネットワーク(MachineNW)のデフォゲ
ファイルの変更が完了したらスクリプトを実行、iso作成用のコンテナが動作する
sudo sh ./setting.sh
okdというディレクトリにisoとkubeconfigなどが生成される
pi@ubuntu:~/okd_setup_package/okd $ ls *
agent.x86_64.iso rendezvousIP
auth:
kubeadmin-password kubeconfig
OKDインストール
上記で作成したISOを先ほど使用した、ubuntuのISOと交換してVMを起動する。
VMを停止した状態でISOを差し替えて起動

このようにしばらくインストールが進んでるログが出力される。
インストール時間は30~40分程度だと思われるが、それ以上かかる場合はインストールがうまくできていない可能性がある

ちなみに以下のようなエラーが出た場合、おそらくNICの設定が合っていないため見直す。

- クラスタの操作マシンにocコマンドをインストール
- ノード内で直接ocコマンドを打つこともできるが、他のマシンで操作したい場合はocコマンドを導入 今回はiso作成用のubuntuのVMにインストールする
- ocコマンドのバージョンはインストールするokdのバージョンに合わせる
OKD_VERSION=4.20.0-okd-scos.17
cd /tmp
curl -LO https://github.com/okd-project/okd/releases/download/${OKD_VERSION}/openshift-client-linux-${OKD_VERSION}.tar.gz
tar -xvzf openshift-client-linux-${OKD_VERSION}.tar.gz
sudo cp oc /usr/local/bin/
oc version
先ほど生成したkubeconfigをクラスタを操作したいマシン上に持ってきて、KUBECONFIG環境変数にkubeconfigのPATHを設定する
export KUBECONFIG=~/.kubeconfig
kubeconfigの中身を見るとわかるのだが、クラスタへの接続はドメインでアクセスする前提のため、DNSサーバーに設定をするか/etc/hostsに以下を追記する ※必要に応じて変更
#<apiサーバーのip> api.<クラスタ名>.<ベースドメイン>
10.100.0.151 api.okd-sno.example.com
10.100.0.151 api-int.okd-sno.example.com
そうするとocコマンドが通るようになる。
oc get node
nodeのstatusがReadyになっていればクラスタが使える状態

GUIにアクセスしてみる
またGUIにアクセスするためにDNSサーバーか/etc/hostsに追記しておく必要がある
windowsからアクセスしたい場合はC:\Windows\System32\drivers\etc\hostsに追記
※環境に合わせて変更
10.100.0.151 console-openshift-console.apps.okd-sno.example.com
10.100.0.151 oauth-openshift.apps.okd-sno.example.com
以下のコマンドでGUIのurlを表示
oc whoami --show-console
core@master0:~$ oc whoami --show-console
https://console-openshift-console.apps.okd-sno.example.com #←このurlにアクセス
ログイン画面が出たら
ユーザー名:kubeadmin
パスワード:先ほど生成したkubeadmin-passwordの中身

ログインすると以下のような画面が出る
4.20からGUIの画面が少し変わったらしい

さいごに
今回入れたOKDでoc admコマンド等も動くことが確認できたので、ある程度OpenShiftの練習はできると思われるが、Advanced Cluster Management for Kubernetes(ACM)やOpenshift Data Foundation(ODF)などはOCPの有償ライセンスに付属するOperatorのようなので、残念ながら入れられないそう。
どうやら、下記コマンドでOperator Hubの制限を解除すればRedHat提供のOperatorが使えるようになるらしい
ACMもODFも表示されました...
oc patch operatorhub cluster -p '{"spec": {"disableAllDefaultSources": false}}' --type=merge
今回はシングルノードクラスタ(SNO)の構築を行ったが、そのうちマルチノード構成も試してみようと思う。
参考



