OpenShiftのリソースがめちゃぐいなので。。。ちっこいのがあった。MicroShiftというもの。Microsoftではなく、MicroShift。
仕事がかなりパツパツなところでほぼ現実逃避。いまだ、オカンを偲ぶこともできていないんだが。
閑話休題
なんかドキュメントを読んだけど、うまく動かず。。。と思ったらMicroshift 4.17は結構動く。
はまりどころは、
- LVMのVGに空き領域をRHELのインストーラーで作っておく。(ドキュメントからはそれは読み取れず)
- LVM VGのThin Poolを先に作っておく
- lvmdのデフォルト設定を全部書くと動かない
- microshiftを起動させたらnodeがReadyになるまでちゃんと待つこと。(systemctlが返ってきてもまだ起動中)
インストール要件
必要なもの
- RHELのサブスクリプション (Developer subscriptionでも可)
- RHEL9.5のISOイメージ (rhel-9.5-x86_64-dvd.iso) —>最新版のRHELです。
- インターネットの接続環境
- 2vCPU 4GB RAM 50GB HDD以上の物理マシンあるいは仮想マシン x 1
- IPアドレス x 1
- kubevirtを動かしたいならCPU仮想化機能
今回は、RHEL9.5 (amd64)で構築
4 Core / 8GB RAM 160GB HDDという大きめの構成で作ってみた。
OSのインストール
スクラッチでRHEL9.5をインストールをする。理由は、LVMを作り込む必要があるから。
パーティション設定
Customを指定してDoneをクリック
Click here to create then automaticallyをクリック
/homeがあればを消し、/ を30GBにする。
Volume GroupのModifyをクリック
Size policyをFixedにする
Volume Groupに空きができていることを確認する。Doneをクリック。Accept Changesをクリック
パッケージのインストール
Minimum Installを選択
ネットワーク構成
DHCPでも構わない。Host Nameを設定
rootユーザの設定
パスワードを設定して、Allow root SSH login with passwordのチェックをオン
これでインストール
インストール後、RHELのサブスク登録し、dnf updateで最新にする。OSの設定は何もいじらない。(FirewallとSELinuxも触らない)
kubevirtを使うなら
dnf -y install qemu-kvm libvirt virt-install virt-viewer
for drv in qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done
LVMの設定確認
vgの名前がrhelで、空き領域があることを確認
vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 2 0 wz–n- 158.41g <120.54g
Thinpoolの作成
VGの空き領域120GBの範囲内でvg rhelにlv thin 100GBとして作成する。
lvcreate -L 100G --thinpool thin rhel
Thin pool volume with chunk size 64.00 KiB can address at most <15.88 TiB of data.
Logical volume “thin” created.
thinというlvができていることを確認する。
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao—- 30.00g
swap rhel -wi-ao—- 7.87g
thin rhel twi-a-tz– 100.00g 0.00 10.43
microshift 4.17のインストール
以下、ほぼコピペで可能
subscription-manager repos \
--enable rhocp-4.17-for-rhel-9-$(uname -m)-rpms \
--enable fast-datapath-for-rhel-9-$(uname -m)-rpms
dnf -y install microshift
dnf -y install microshift-olm
dnf -y update
#クライアント補完設定
# Avoid _get_comp_words_by_ref:
cat << 'EOF' >> ~/.bashrc
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi
EOF
oc completion bash > /etc/bash_completion.d/oc
kubectl completion bash > /etc/bash_completion.d/kubectl
source /etc/bash_completion.d/oc
source /etc/bash_completion.d/kubectl
補完を正しく動作させたいのであれば、ここでログインをし直す。
Pull Secretを入手して、/etc/crio/openshift-pull-secretに置く。
https://console.redhat.com/openshift/install/pull-secret
MicroShiftの設定と起動
# Pull Secretの設定
chown root:root /etc/crio/openshift-pull-secret
chmod 600 /etc/crio/openshift-pull-secret
# Firewallの設定
firewall-cmd --permanent --zone=trusted --add-source=10.42.0.0/16
firewall-cmd --permanent --zone=trusted --add-source=169.254.169.1
# Remote Access
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-port=5353/udp
firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp
firewall-cmd --permanent --zone=public --add-port=30000-32767/udp
firewall-cmd --permanent --zone=public --add-port=6443/tcp
firewall-cmd --permanent --zone=public --add-port=9000/tcp
ETHDEV=`nmcli device | grep ethernet | cut -d " " -f1`
firewall-cmd --permanent --zone=public --change-zone=${ETHDEV}
firewall-cmd --permanent --zone=public --add-masquerade
firewall-cmd --zone=trusted --add-source=192.168.0.0/16 --permanent
firewall-cmd --reload
# ストレージの設定
# Snapshotを使わないなら、以下だけで十分
#cp /etc/microshift/lvmd.yaml.default /etc/microshift/lvmd.yaml
# Snapshotを使う設定。LVM vg:rhelにlv thinというThinpoolを作ってあることが前提
cat << 'EOF' > /etc/microshift/lvmd.yaml
# Unix domain socket endpoint of gRPC
#socket-name: /run/lvmd/lvmd.socket
device-classes:
# The name of a device-class
- name: default
# The group where this device-class creates the logical volumes
volume-group: rhel
# Storage capacity in GiB to be spared
spare-gb: 0
# A flag to indicate that this device-class is used by default
default: true
# The number of stripes in the logical volume
#stripe: ""
# Thin Setting
thin-pool:
name: thin
overprovision-ratio: 10
type: thin
# The amount of data that is written to one device before moving to the next device
#stripe-size: ""
# Extra arguments to pass to lvcreate, e.g. ["--type=raid1"]
#lvcreate-options:
#- ""
EOF
# microshiftの起動
systemctl start microshift
systemctl enable microshift
# kubeconfigの設定
mkdir -p ~/.kube/
cat /var/lib/microshift/resources/kubeadmin/kubeconfig > ~/.kube/configchmod go-r ~/.kube/config
systemctl start microshiftが完了してから、実際の稼働までは2-3分くらいかかる。
oc get pod -A で全てrunning、oc get nodeでReadyになるまで待つ。
oc get pod -A
oc get node
もし、5分経ってもtopolvm-controllerがPodInitializingのままで止まっている場合は、
kubectl -n openshift-storage delete pod topolvm-controller-xxxxxxxxxxx
として、再作成させるとうまくいく可能性がある。
ストレージスナップショットクラスの設定
oc apply -f - <<EOF
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: topolvm-snapclass
annotations:
snapshot.storage.kubernetes.io/is-default-class: "true"
driver: topolvm.io
deletionPolicy: Delete
EOF
oc get sc,volumesnapshotclass
ストレージクラス : topolvm-provisioner (default)
スナップショットクラス: topolvm-snapclass
ができる。
Routeの設定
OpenShiftのRouteを使いたい。デフォルトは、apps.example.com。再起動すると元に戻るので注意。
以下の例は、`cat /etc/hostname`.example.com、abcd.,`cat /etc/hostname`.example.comの名前解決を全て、Microshiftのサーバが受けるように設定する例
oc -n openshift-ingress set env deployment/router-default ROUTER_SUBDOMAIN="\${name}-\${namespace}.`cat /etc/hostname`.example.com" ROUTER_ALLOW_WILDCARD_ROUTES="true" ROUTER_OVERRIDE_HOSTNAME=”true"
OKDコンソール
firewall-cmd --permanent --zone=public --add-port=9000/tcp
oc create serviceaccount -n kube-system openshift-console
curl -OL https://gist.githubusercontent.com/adelton/d3d1312ebc16578b63517ffe601cc69b/raw/26288ea6612cfed4512ccf8190f2a4ebec381266/openshift-console.eval
curl -OL https://gist.githubusercontent.com/adelton/d3d1312ebc16578b63517ffe601cc69b/raw/26288ea6612cfed4512ccf8190f2a4ebec381266/openshift-console.yaml
bash openshift-console.eval | oc create -f -
ブラウザでhttp://<このホストのIPアドレス>:9000 を開くとコンソールが表示される。
トークンの期限切れでログインができなくなった場合は以下でトークンの更新をすると再度アクセスができる。
oc set env -n kube-system deployment/openshift-console-deployment BRIDGE_K8S_AUTH_BEARER_TOKEN=$( oc create token -n kube-system openshift-console )
その他ツールのインストール
helmのインストール
curl -L https://mirror.openshift.com/pub/openshift-v4/clients/helm/latest/helm-linux-amd64 -o /usr/local/bin/helm
chmod +x /usr/local/bin/helm
helm completion bash > /etc/bash_completion.d/helm
source /etc/bash_completion.d/helm
これで終わり。あっという間にロースペックの環境でOpenShiftに小さいのができてしまう。UIもあるっぽいのだが未だ動かせず。ただ、これでSnapshotをサポートCSIストレージができてしまうのは、すごい。ストレージはOpenShift Single Node使われているストレージ全く同じのLVMストレージ。ただ、このストレージ、Podが正常に立ち上がるまでボリュームができない形式なのでちょつと使いにくいんだけど。
手動でインストールする必要があるがさらにKubevirtも動いてしまった。インストール方法はやり過ぎなので割愛。
簡単にOpenShiftを動かしたいという場合には便利ではないかと。