OpenShiftのリソースがめちゃぐいなので。。。ちっこいのがあった。MicroShiftというもの。Microsoftではなく、MicroShift。
仕事がかなりパツパツなところでほぼ現実逃避。いまだ、オカンを偲ぶこともできていないんだが。
閑話休題
なんかドキュメントを読んだけど、うまく動かず。
はまりどころは、
- LVMのVGに空き領域をRHELのインストーラーで作っておく。(ドキュメントからはそれは読み取れず)
- LVM VGのThin Poolを先に作っておく
- lvmdのデフォルト設定を全部書くと動かない
- microshiftを起動させたらnodeがReadyになるまでちゃんと待つこと。(systemctlが返ってきてもまだ起動中)
インストール要件
必要なもの
- RHELのサブスクリプション (Developer subscriptionでも可)
- RHEL9.3のISOイメージ (rhel-9.3-x86_64-dvd.iso)
- インターネットの接続環境
- 2vCPU 4GB RAM 50GB HDD以上の物理マシンあるいは仮想マシン x 1
- IPアドレス x 1
今回は、RHEL9.3 (amd64)で構築
4 Core / 8GB RAM 160GB HDDという大きめの構成で作ってみた。
OSのインストール
スクラッチでRHEL9.3をインストールをする。理由は、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も触らない)
LVMの設定確認
vgの名前がrhelで、空き領域があることを確認
vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 2 0 wz–n- 158.41g <120.54g
Thinpoolの作成
VGの空き領域の範囲内でvg rhelにlv thinとして作成する。
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.15のインストール
4.14を入れたい場合は、4.15->4.14にするだけでOK。以下、ほぼコピペで可能
subscription-manager repos \
--enable rhocp-4.15-for-rhel-9-$(uname -m)-rpms \
--enable fast-datapath-for-rhel-9-$(uname -m)-rpms
dnf install -y microshift
# 4.15ならmicroshift-olmもインストール
rpm -q microshift | grep 4.15
if [ $? -eq 0 ]; then
dnf -y install microshift-olm
fi
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
minishiftの設定と起動
# 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
ができる。
その他ツールのインストール
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が正常に立ち上がるまでボリュームができない形式なのでちょつと使いにくいんだけど。
簡単にOpenShiftを動かしたいという場合には便利ではないかと。