MicroShiftのインストール

投稿者: | 11月 19, 2024

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を動かしたいという場合には便利ではないかと。

コメントを残す