_・)Keep Smiling

モソモソと日々の雑感を書き溜めるというか書き殴るというか書き捨てるというか

_・)OKDクラスターをAssisted Installerで構築してみる(その1)

この記事は OpenShift Advent Calendar 2024 の 25日目の記事です。やったぜ最終日、メリークリスマス!!!!!!!

そういえば、こないだマックでサラダ食べてたら、隣のJKが「おうちk8sクラスターでOpenShift使いたいけど、有償版とか開発者向けサブスクリプションじゃなくて、気楽に使いたいよねー」って話していました。

OK、それならばUpstreamが僕らにはあるじゃないか!

okd.io

ということで、はい、今日はですね、OKDクラスターを構築していきたいと、思います❗(YouTuber風)

みんな大好き機材の話

今回は、自宅Lab環境(おうちKubernetes)としてミニPCを何台か用意してベアメタルOKDクラスターを作っていきます。 ベアメタル環境へのインストール詳細はドキュメントがあるので併せてご覧ください。

docs.okd.io

私はもともと3台のOpenShiftクラスターを飼ってたいたんですが、ちょっとコア数が物足りなくなってきていました。

そしたら今年のブラックフライデーでちょっと気絶しているうちに、妖精さんが6台のミニPCに増やしてくれました。ありがとうマスターカード。今月か来月の引き落としが恐いぜ。

大まかなマシンスペックはこんな感じです。

  • 元々あったミニPC(3台)
    • Beelink SER5
      • CPU: AMD Ryzen 5 5500U(6コア/12スレッド)
      • Mem: 換装して DDR4 32GB x2
      • Storage: 512GB NVMe SSD + 1TB SATA SSD
  • 妖精さんが追加してくれたミニPC(3台)
    • GMKtec NucBox M5 Plus
      • CPU: AMD Ryzen 7 5825U(8コア/16スレッド)
      • Mem: 換装して DDR4 32GB x2
      • Storage: 512GB NVMe SSD + 1TB NVMe SSD

今さっき、改めてAmazon見てみたら、 GMKtec NucBox M5 Plusはクーポン使えば3万円台でしたね。やっすー。 ちなみにご予算ですが、だいたい3台と諸々の周辺パーツ(電源タップとかケーブルとかスイッチとか)で20万いかないくらいです。 上手に買い物したらもっと安くできるかも。

なお、機材はかなりコンパクトなので、自室のデスク背後にあるプリンタ台の上に乗せてあります。

コンパクトに積まれてるけど若干エアフロー的なアレが不安。

このあとOKDをインストールしていく中で、各マシンのMACアドレスが必要となります。 これらのミニPCは大抵Windowsがプリインストールされてますので、一回起動してMACアドレスを調べるか、BIOSから確認するか、またはお好きなLinuxディストリビューションのLiveイメージを起動してMACアドレスを確認してみてくだい。

DNSとNTPはやっぱいるよね!

分散システムの運用で地味にハマるのはProxy DNSとNTPです。

たまに業務的な構築作業(現職の話ではないよ!)でも、このへんが超適当な環境に出くわすと2〜3時間は環境構築担当者を問い詰めたくなります。hostsで全部なんとかしようと思うなよ!!!!!!!

おっと、すみません。負の思い出がスパークしかけました。

OKDのインストールでは、クラスターのドメイン名を指定する必要があります。既に独自ドメインをお持ちでDNSサーバを構成されている場合は、後述するレコードを登録してあげてください。そうしたものが無い場合は、ローカルでDNSサーバを立てましょう。

ちなみに、私はRaspberry Pi上にUnboundDNSサーバを構築して、ローカルドメインの名前解決をやらせています(ついでにNTPサーバもコレ)。 レコードの定義も簡単ですし、お勧めです。

今回はunboundの使い方には触れません。NTPサーバ(Chronyとかsystemd-timesyncdとか)についても触れません。長くなるので。悪しからず。がんばって何かしら用意してください。

必要なDNSレコード

DNSレコード要件の詳細はドキュメントに記載がありますが、大まかに以下のレコードが正しく名前解決できなくてはいけません。

ちょっと準備が大変かもしれませんが、まぁ分散システムとはそういうものです。諦めましょう。

OKDのインストールメソッド

OKDはベアメタル環境以外にもインストール可能ですし、それぞれの環境に応じたインストール手法(ほぼ全自動だったり、柔軟なカスタマイズのできる手動インストールだったり)が用意されています。

今回のベアメタル環境へのインストールでも、いくつかのインストール手法が用意されていますが、その中でも一番簡単な「WebベースのAssisted Installer」を使った対話式のインストール方法を使います。

その他のインストール手法については、ドキュメントや赤帽エンジニアブログの以下の記事をご覧ください(OpenShiftのインストール手法の話ですが)。

rheb.hatenablog.com

Assisted Installerの準備

さて、ここで問題となるのはWebベースのAssisted Installerをどこに用意するか・・・という事です。

OpenShiftの場合、Assisted Installerは「Red Hat Hybrid Cloud Console」から利用が可能ですが、残念ですがOKDの場合は利用出来ません。

では、どうするかというと、自分で用意するんじゃああああ!!! 甘ったれるな!!!!!(今深夜2時なのでテンションがおかしいです)

幸い、Assisted Installer自体はコンテナイメージとして提供されており、自宅マシン(LinuxでもWindowsでもMacでも)上で簡単に稼働させることができます。便利。

Podmanを使ったAssisted Installerの構成

それでは早速、Assisted Installerを動かしていきましょう。

今回はPodmanをインストールしたローカルマシン(Mac使ってます)にAssisted Installerを構築します。 Podman自体のインストールはここでは触れませんが、Podman DesktopのInstallerをダウンロードしてきてインストールして貰えば迷うことはないんじゃないかなぁと思います。

構築の方法はこちらのGithubリポジトリを参照します。

github.com

今回は、コンテナを削除しても情報が保持されるようにしたいので永続ストレージ有りの構成で進めます。また、自宅環境でかつ外部から直接入って来れない環境なので、今回はHTTPで通信します。証明書とか考えないで済むし・・・。

まず、ローカルマシン上に次のファイルをダウンロードします。

次にokd-configmap.ymlを任意のエディタで開いて各サービスのエンドポイント/URLに記載がある「127.0.0.1」の箇所を、Podmanを実行しているローカルマシンのIPアドレスに変更します。

尚、このIPアドレスはOKDの各ノードからアクセスできるようにしてください。

apiVersion: v1
kind: ConfigMap
metadata:
  name: config
data:
  ASSISTED_SERVICE_HOST: (ローカルマシンのIPアドレス):8090
  ASSISTED_SERVICE_SCHEME: http
  AUTH_TYPE: none
    ・
    ・
  (略)
    ・
    ・
  IMAGE_SERVICE_BASE_URL: http://(ローカルマシンのIPアドレス):8888
  IPV6_SUPPORT: "true"
  ISO_IMAGE_TYPE: "full-iso"
    ・
    ・
  (略)
    ・
    ・
  SERVICE_BASE_URL: http://(ローカルマシンのIPアドレス):8090
  STORAGE: filesystem
    ・
    ・
  (略)
    ・
    ・

尚、本日時点ではこのokd-configmap.ymlにはOKD 4.16のIMAGE情報しか含まれていません。 と言いますのも、実はごく最近までとある事情でOKDのリリースが止まっていたからです。詳細はリンク先のBlog記事をご覧ください。

かいつまんで言うと、これまでのOKDにはFedora CoreOSベースで一部RHEL由来のコンテンツが含まれていたので、これをCentOS Stream CoreOSベースに切り換えてRHELのコンテンツも含まれないようにした・・・という流れです。

他のインストール手法ではOKD 4.17をインストールできますが、残念ながらGithubリポジトリ上のAssisted Installer用Configmapには、この情報が含まれていません。 OKD4.17以降をAssisted Installerでインストールしたい場合は、ConfigMapに最新の含まれるようになるまで待つか、自分で必要な情報を探してきてokd-configmap.ymlを更新します。

とりあえず、私がざっくりこことか、ここで調べた結果を、雰囲気で埋めてみたのが以下の内容です。自己責任でご利用ください。

apiVersion: v1
kind: ConfigMap
    ・
    ・
  (略)
    ・
    ・  
  OS_IMAGES: '[{"openshift_version":"4.17","cpu_architecture":"x86_64","url":"https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/41.20241122.3.0/x86_64/fedora-coreos-41.20241122.3.0-live.x86_64.iso","version":"41.20241122.3.0"},{"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"}]'
  RELEASE_IMAGES: '[{"openshift_version":"4.17","cpu_architecture":"x86_64","cpu_architectures":["x86_64"],"url":"quay.io/okd/scos-release:4.17.0-okd-scos.0","version":"4.17.0-okd-scos.0","default":true,"support_level":"beta"},{"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"}]'
    ・
    ・
  (略)
    ・
    ・

ファイルの編集が終わったら、早速Podmanコマンドを実行して、Assisted Installerを起動してみます。

$ podman play kube --configmap okd-configmap.yml pod-persistent.yml
Pod:
14a1a2f22ba1975538dfd1f489a808f4229623e0598a7f5ec2d3c6df4bc4bf23
Containers:
86e639142600d5dc1b38ae2fd2a12701e9ca6c80d2ba73ae18ac306da202af25
ffd9f801537180f74cc3ba7809b387de18ef1902a14e7794b54a6dcce4b5f72e
54b4c35fc2f7f7bb445a216407c835faf0bc0617a8bdb8416d715ed8824d7401
5bb0c9a5733f74a445aac148cadaa6b0a6bc3f91aaf842e6aae84368b07ba709

無事に起動ができてそうなら、早速ブラウザで「http://(ローカルマシンのIPアドレス):8080」にアクセスしてみましょう。 次の様な画面が出てきたら起動成功です!

Assisted InstallerのWeb UI画面

OKDクラスターの作成は明日へ・・・

本来はここでクラスターの作成まで書き切りたかったのですが、既に12月25日も29時を回ってしまい、いい加減寝ないと4時間後から参加する研修で死んでしまう・・・。

という訳でAdvent Calendarとしては中途半端ですが、実際のクラスターの構築は明日つづきを書きたいと思います。まぁ、ここまでできたらインストール自体はうまく行くはずなので・・・。

では、みなさまおやすみなさいませ。べりぃくるしみます。

続き

続きを書きました。

tsukaman.hateblo.jp