最近出たというOpenShiftのupstream版である okd
をインストールしようとしたら結構てこずったのでメモ。
Hyper-Vは対応プラットフォームに書かれていないので、手探り感がすごい。
okdは昔は OpenShift Origin
と呼ばれていたが、OpenShift3の途中からokdという名前に変わった。
その後、OpenShift 4になって、ずっと出ていなかったが、OpenShift 4.5にあわせて再登場したらしい。
https://www.publickey1.jp/blog/20/red_hatkubernetesokd_4.html
ちなみに、OpenShift4を手軽に試す環境として、 CodeReady Containers
というものあり、
こちらは1VMで動かす minikube
や minishift
みたいなものだ。
CodeReady Containersも以前構築してみたことがあり、そのときの記事がこちら。
CodeReady ContainersでWindows上にOpenShift環境を構築する
CodeReady Containersは完全お試し用のもので、30日で証明書が切れると再インストール、 すなわち最初からやりなおしという致命的な弱点がある。 OKDはバージョンアップの方法も書かれているので、そういったことは無いと信じたい。
以下の実施内容は、基本的に公式ドキュメントの記載にもとづいておこなった。
https://docs.okd.io/latest/installing/installing_bare_metal/installing-bare-metal.html
準備するもの
名前 | CPU | メモリ | 備考 |
---|---|---|---|
Master | 4vCPU | 24GB | コントロールプレーン |
Bootstrap | 4vCPU | 16GB | インストール時だけ必要 |
ロードバランサ | nginxを利用 | ||
DNS | dnsmasqを利用 | ||
HTTPサーバ | nginxを利用 |
ドキュメントには、コントロールプレーンが3台、ワーカーノードが2台必要って書かれているが、 以下のFAQに、コントロールプレーン1台でもOKって書かれていたので、そのようにしてみた。
Bootstrapサーバがインストール時だけ必要なくせに、16GB必要だし、おかげでLBも用意しなきゃいけないしでつらい。
本来コントロールプレーンもメモリ16GBでよいのだが、さすがに1ノードにまとめるならもうちょっと入れておくかと24GBにした。 本当は32GB確保したかったのだけど、Bootstrapのせいで確保できなかったので妥協。
https://github.com/openshift/okd/blob/master/FAQ.md#can-i-run-a-single-node-cluster
ロードバランサ、DNS、HTTPサーバは先日作ったGitlab用のVMがあったので、そこにまとめて入れることにした。
また、okd(openshift)は、 xxx.クラスタ名.ベースドメイン
という形式のFQDNでアクセスすることになる。
今回は、クラスタ名を okd
、ベースドメインを local
とした。
インストール
作業端末の準備
作業端末を準備する。
openshift-install
コマンドがLinuxとmacだけだったのでどちらか。 自分は、Windowsなので、wsl上で作業した。インストーラをgithubからダウンロードする。
https://github.com/openshift/okd/releases/tag/4.5.0-0.okd-2020-07-29-070316
wget https://github.com/openshift/okd/releases/download/4.5.0-0.okd-2020-07-29-070316/openshift-client-linux-4.5.0-0.okd-2020-07-29-070316.tar.gz wget https://github.com/openshift/okd/releases/download/4.5.0-0.okd-2020-07-29-070316/openshift-install-linux-4.5.0-0.okd-2020-07-29-070316.tar.gz tar xf openshift-client-linux-4.5.0-0.okd-2020-07-29-070316.tar.gz tar xf openshift-install-linux-4.5.0-0.okd-2020-07-29-070316.tar.gz
こちらのページから、Red Hat Developerに登録したアカウントで pull-secret なるファイルをダウンロードする
インストール設定を格納するディレクトリを作成する。このとき、ディレクトリ名はクラスタ名にそろえるということなので、
mkdir okd
とokdディレクトリを作成した。okd/install-config.yaml
を以下の内容で作成する。apiVersion: v1 baseDomain: local compute: - hyperthreading: Enabled name: worker replicas: 0 controlPlane: hyperthreading: Enabled name: master replicas: 1 metadata: name: okd networking: clusterNetwork: - cidr: 10.128.0.0/14 hostPrefix: 23 networkType: OpenShiftSDN serviceNetwork: - 172.30.0.0/16 platform: none: {} fips: false pullSecret: '{"auths": ...}' #先ほどダウンロードした pull-secretの中身 sshKey: 'ssh-ed25519 AAAA...' #公開鍵。なければ適当につくる。
先述のとおり、今回はコントロールプレーンは1台だけなので、ドキュメントと違って、
.controlPlane.replicas
を1にしている。マニフェストの作成
install-config.yamlを配置した okdディレクトリの1階層上で以下のコマンドを実行する。
openshift-install create manifests --dir=okd
実行すると、install-config.yamlは消えてしまうので、何回もやり直しそうならコピーしておくのが無難。
実行後、設定を変更してコントロールプレーンではPodが起動しないように設定することもできるが、 今回は1台構成なので変更せずにそのままとする。
ignitionファイルの作成 okd(OpenShift)のインストールでは、ignitionファイルとよばれるものの中に、 install-config.yamlおよびそこから生成されたマニフェストの情報が含まれているようだ。
openshift-install create ignition-configs --dir=<
を実行すると、
bootstrap.ign
master.ign
worker.ign
というファイルが作成される。作業用端末での操作はいったん止めて、次に周辺サーバの準備、および Fedora CoreOSのインストールをおこなう。
DNSの準備
dnsmasqを適当に設定すればよい。自分は以下の通り/etc/hostsを設定し、必要な名前解決ができるようにした。
192.168.2.11 api.okd.local api-int.okd.local
192.168.2.12 master.okd.local etcd-0.okd.local _etcd-server-ssl._tcp.okd.local
192.168.2.13 bootstrap.okd.local
HTTPサーバの準備
nginxをインストール
dnf install nginx nginx-mod-stream
のちにLBとしても利用したかったので、streamモジュールもインストール。
通常は、インストールすればおしまいだが、Gitlabが 80ポートを占領しているので、Listenするポートを10080に変更した。
http { server { listen 10080; listen [::]:10080; } }
/usr/share/nginx/htmlに必要資材を配置
先ほど作成された
bootstrap.ign
master.ign
worker.ign
を配置する。以下のサイトからRawファイルとsignatureファイルをダウンロードして配置する。 ドキュメントにはsignatureファイルのことが書かれてないが配置しないとインストールに失敗するので注意(1敗)。
また、Rawファイルは展開する必要はない。圧縮ファイルのままで配置しないとインストールに失敗するので注意(1敗)。 なお、RawとRaw(4k Native)の2種類あるが、よくわからなかったので、Rawのほうを使った。
https://getfedora.org/en/coreos/download?tab=metal_virtualized&stream=stable
Load Balancerの設定
nginxをTCPロードバランサとするために、 /etc/nginx/nginx.conf
に以下の設定を入れた。
stream {
upstream k8s-api {
server 192.168.2.12:6443;
server 192.168.2.13:6443;
}
upstream machine-config {
server 192.168.2.12:22623;
server 192.168.2.13:22623;
}
server {
listen 6443;
proxy_pass k8s-api;
}
server {
listen 22623;
proxy_pass machine-config;
}
}
Fedora CoreOSをインストール
ここから実際にbootstrapサーバやMasterサーバにokdを動かすためのOSであるFedora CoreOSをインストールしていく。
ISOをダウンロード
先ほどRawファイルをダウンロードしたときと同じサイトだが、 https://getfedora.org/en/coreos/download?tab=metal_virtualized&stream=stable からISOをダウンロードする
Hyper-Vの管理コンソールから、仮想マシンを作成する。
メモリの動的割当は無効化した。
ISOをマウントしてOSを起動する
インストール選択画面で タブキー を押し、カーネル引数を入力できるようにする
表示されているパラメータに続けて以下のように入力する
Bootstrap
coreos.inst=yes coreos.inst.install_dev=sda coreos.inst.image_url=http://192.168.2.11:10080/fedora-coreos-32.raw.xz coreos.inst.ignition_url=http://192.168.2.11:10080/bootstrap.ign ip=192.168.2.13::192.168.2.1:255.255.255.0:bootstrap.okd.local:eth0:none nameserver=192.168.2.11
Master
coreos.inst=yes coreos.inst.install_dev=sda coreos.inst.image_url=http://192.168.2.11:10080/fedora-coreos-32.raw.xz coreos.inst.ignition_url=http://192.168.2.11:10080/master.ign ip=192.168.2.12::192.168.2.1:255.255.255.0:master.okd.local:eth0:none nameserver=192.168.2.11
それぞれのパラメータの詳細は以下のとおり。
coreos.inst.image_url
には、rawファイルにアクセスできるURLを書く。coreos.inst.ignition_url
には、それぞれのignitionファイルにアクセスできるURLを書く。ip
は、次のフォーマットでIPアドレスを設定するIPアドレス::デフォルトゲートウェイ:サブネットマスク:ホスト名:デバイス名:none
。 IPアドレスの直後だけコロンが2つなことに注意(1敗)。nameserver
は、ネームサーバのアドレスを書く。これもドキュメントには目立たないところにあるので忘れないように(1敗)。ちなみに手入力がつらかったのだが、Hyper-Vにはクリップボードから入力という神機能があった。 ただし、動作としてペーストではなくて1文字ずつ解釈して変わりに入力してくれるRPAみたいな機能のため、 JIS配列とUS配列の記号位置による違いがそのまま反映される。
=
が_
になってしまうとか。これは、あらかじめ自分の環境もIMEを変更してUSキーボードにしておくことで回避できた。
入力したらエンターキーを押すとインストールがはじまる。
インストールがおわると一瞬エラーメッセージのようなものが 赤字 で表示されて再起動してしまうのだけれどエラーではないので注意(N敗)。 単に、再起動時にISOをunmountしようとして、できなかったといってるだけである。
コンマ何秒しか表示されないので、しかたがなく画面を録画して確認して、がっかり。
再起動したら、再度タブを押してISOを手動でunmountしてから再起動する。
これをやらないと、せっかくFedore CoreOSがインストールできたのに、またインストール処理に入ってしまう。 しかも、未設定の状態で(N敗)。
タブを押すとパラメータ入力待ちとなってくれるため、おちついてディスクをとりはずして再起動できる。
これでFedora CoreOSのインストールはおしまい。
okdのインストール
CoreOSのインストールもおわり、あとはokdをインストールするだけ……なのだけど、実はインストールは 先ほどのignitionファイルの内容をもとに裏で勝手におこなわれるため、待ってるだけでよい。
作業端末で、以下のコマンドを実行するとインストール状況を監視してくれる。
openshift-install --dir=okd wait-for bootstrap-complete --log-level=debug
なお、インストールは30分ぐらいかかるが、20分ぐらいはずっとエラーメッセージが出続ける (上記コマンドの標準出力も、CoreOSの標準出力も)。
見てても落ち着かないだけなので、のんびり待ちましょう(1敗)。
最終的に、以下のような感じで出力されてコマンドが終了する。 そうしたら無事に終了である。
DEBUG Bootstrap status: complete
INFO It is now safe to remove the bootstrap resources
INFO Time elapsed: 30m
okdへのアクセス
okd/auth 配下に、kubeconfigファイルとkubeadmin-passwdファイルができている。
kubeconfigファイルを使えば oc
、 kubectl
でCLIアクセスできるし、
https://console-openshift-console.apps.okd.local/
にアクセスすることでWebコンソールも利用可能。
初期ユーザは kubeadmin であり、パスワードは kubeadmin-passwd に書かれている。
この辺は、CodeReady Containersと同じだ。
CodeReady Containersのころは、OpenShift 4.2相当だったと思うので、 だいぶみためが変わっている。
インストールが無事にできたので、今度はなんか適当にアプリケーションを動かしてみよう。
Share