なんか1VMでKubenetesを作ることが多い。あまりインフラ側を気にしたくないから。。。ではなく、リソースが無い。ただそれだけ。それだったらKindやMinikubeでいいじゃんということになるが、
- ネットワーク要件に縛られたく無い。
- インテグレーションをしっかりしたい。
この要件だと、kindとかMinikubeだと制限が多い。となると通常のKubernetesをシングルノードで立てるしかない。シングルノードとは、単体ノードがMaster兼Workerになることである。
となると、その1ノードのリソースが大量にいるのは言うまでもない。
今までやってきたのは、Vanilla Kubernetes、k3sで作ってきたが今回はOpenShiftである。
閑話休題
OpenShiftを手元で簡単に動かすのであれば、CodeReadyの仮想マシンで動かすこともできるが、結構リソースを必要としていて、遅い。開発目的なら、Sandboxを利用したほうがいい。
https://www.redhat.com/ja/technologies/cloud-computing/openshift/get-started
今回はOpenShiftをインフラレベルから作りたいので、ちゃんとノードを作ることにする。
また、リソースがそれほど取れないので、1ノードで作成してみることにする。(といいつつ、リソースは結構必要)
用意するもの
サブスクリプション
RedhatのDeveloper Subscription(無料)に加入しておく。
https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux/developer-program
OpenShiftは評価版として、60日利用可能。
必要なファイル
構築自体には用意するファイルはない。
Webのウィザードに沿ってやっていくことにより、途中でインストール用のISOイメージが落とせる。また、クライアント用のツールは、あとでダウンロードをする。
環境
インターネットへ出られる必要がある。
ハードウェア
このインストールでは、シングルノードで構築するので、1台の物理マシン(1VM)が必要。
Redhat Enterprise Linux 9が動かせる物理サーバあるいは、仮想マシン
仮想環境で動かす場合は、vSphereにこだわる必要はない。(シングルノードの場合は、 単純ベアメタルとして動作して、各種連携ができない。)
必要となるハードウェアスペック
あくまでもインストーラーでチェックされるスペックなので、実際は、あればあるほど困らない。リソースを追加するのであれば優先度としては、CPU、メモリの順番
CPU
OpenShift Virtualizationを動かす必要がなければ、8CPU 以上
OpenShift Virtualizationを動かす必要があれば、15CPU 以上 (CPUの仮想化を有効にする)
メモリ
16GB RAM以上 (OpenShift Virtualizationを使うならもっと必要)
HDD
CSIドライバがいらない場合 1台目のHDD 120GB 以上(非推奨)
CSIドライバを入れる、あるいは OpenShift Virtualizationを動かすのであれば追加のHDDとして50GB HDD 以上
NIC
1つ (DHCP、できればDHCPからNTPサーバの配布も行えるとベター)
データストアやHDDは必ずSSD以上のものを使う。
OpenShift Virtualizationの注意事項
– OpenShift Virtualizationは、各workerノードでKVMを動作させることになるので、ハードウェアや仮想マシンの設定で、仮想環境が動かせるようにしておく。
– インストール済みのイメージやWindowsのISOイメージは、OpenShiftから提供されないので、Windows OSを動かす場合は、手持ちのISOイメージをWebサーバにアップロードしておくか、別途PVCとして設定する必要がある。
上記を満たさないと、インストールが続行できない。
ネットワーク
OpenShiftホストが続されているネットワークは、DHCPサーバ、NTPサーバが必要。
24ビットのセグメント1つで、1IPがあればいい。
必要なDNSエントリ
DNSサーバは、WindowsでもLinuxでも構わない。
Cluster_name.base_domainというドメインの設定が必要
例 os-cl1.ent6.cloudshift.corp
以下のDNSクエリが同一IPアドレス(OpenShiftマシンにアサインされているIPアドレス)で返る必要がある。
API
api.<cluster_name>.<base_domain>
内部 API
api-int.<cluster_name>.<base_domain>
Ingress ルート
*.apps.<cluster_name>.<base_domain>
*.apps.<cluster_name>.<base_domain>は、abcd.apps.<cluster_name>.<base_domain>でも、xyz.apps.<cluster_name>.<base_domain>でも同じIPアドレスが返る。
つまり、以下のクエリは同じIPアドレスが返る必要がある。
host api.${CLUSTERNAME}.${DNSDOMAINNAME}
host api-init.${CLUSTERNAME}.${DNSDOMAINNAME}
host abcd.apps.${CLUSTERNAME}.${DNSDOMAINNAME}
OpenShift端末(アクセス端末)の構成
以下の条件を満たす、Windows / Mac / Linux (GUI環境)ホストを1台用意する。
– インストーラーとしてアクセスするWebコンソールや、インストール後のホストにあるコンソールにブラウザでアクセス
– CLIコマンドの実行環境
インストール
Hybrid Cloud Consoleにアクセス
https://console.redhat.com/openshift/assisted-installer/clusters
流れとしては、
– Webコンソール (Hybrid Cloud Console)で、クラスタの設定
– SSHキーが練り込まれたISOイメージをダウンロード
– そのISOイメージでOpenShiftマシンとなる空のマシンを起動
– WebコンソールでOpenShiftマシンの起動が確認できたら、Webコンソール (Hybrid Cloud Console)でインストールを続行。
– インストールが完了したら、Webコンソール (OpenShift Console、建てたホストにある)にログインあるいは、ocコマンド、kubectlコマンドでCLIでアクセスをする
Create New Clusterをクリック
OpenShift 4.12.49 (Kubernetes v1.25)あるいはOpenShift 4.13.32(Kubernetes v1.26)を選択(よくわからなければ、4.13系を選択。)
Cluster name: os-cl1
Base domain: ent6.cloudshift.corp
Install single node OpenShift (SNO)のチェックを入れる。
Baseドメインは、DNSのゾーンとして必要になる。既存のゾーンを持つのであれば、既存のゾーンを入力
選択できるOpenShiftバージョン。あくまでも、キャプチャー採取時の例なので、実際は、もっとあたらしいバージョンが利用可能かもしれない。
OpenShift Virtualization (Kubevirt)も使う場合は、Install OpenShift Virtualizationのチェックをオン。ただし、CPU数の動作要件を満たしている必要がある。
また、必ずInstall Logical Volume Manager Storageのチェックを入れる。TopoLVMというCSI Driverがインストールされる。
https://github.com/topolvm/topolvm
Add Hostをクリック
Minimal Imageは、100MB程度しかないイメージだが、起動時に必要なイメージをダウンロードする。ダウンロードに失敗をすることがあるので、Full Image(1.1GB)を選択する。
Full image fileを選択して、手持ちのSSHの公開キーをドラッグあるいはペースト
cat ~/.ssh/id_rsa.pub
Generate ISOをクリック
Download Discovery ISOをクリックするとISOイメージがダウンロードされる。
wgetが使える環境があるのであればCommand to download the ISOをコピペ
Command to download the ISOをコピペ。
このISOでOpenShiftマシンとなる空のマシンを起動する。
VMware VMで作る場合、ここで仮想マシンを作成する。
シングルノードの環境は、vSphere連携が一切できないので、仮想環境は、Redhat Enterprise Linux 9がサポートされている環境ならなんでもOK.
仮想マシン名は、os-cl1host
マシンタイプは、
OpenShift 4.6-4.12: Redhat Enterprise Linux 8
OpenShift 4.13: Redhat Enterprise Linux 9
CPUは、OpenShift Virtualizationを利用しないなら、8CPU以上、OpenShift Virtualization利用するなら15CPU以上にして、CPUの仮想化を有効にする。
メモリは、16GB以上
HDDは、1台目は120GB以上、2台目は50GB以上
SCSI BUSは、VMware Paravirtualization、NICは、vmxnet3にしておく。(デフォルトで有効なので設定不要)
VMware環境の場合は、Advanced Optionで、必ずEnableUUID=Tureの有効にする。
構成した仮想マシン例
OpenShiftマシンの電源をして、しばらくするとコンソールが以下のメッセージになる。Full Imageなら数分。実際、数回再起動する。
正しく設定されると
ssh -i ~/.ssh/id_rsa core@<VMのIPアドレス>
でログインができる。(する必要はないが)
少しするとホストのリストが出てくる。ReadyになればOK。
Insufficientになった場合
CPUの仮想化が有効にされていない、あるいは、CSIドライバを追加しているのにHDDを追加していない。
LVMのCSIドライバを使うのにディスクを追加していない。
右側の:でホスト名の変更ができる。
ホスト名をos-cl1hostとする。(キャプチャはos-cl1だけど。)
ReadyになるとNextをクリックできる。
Storage 特にさわらずにNext
Networking
この時点で、DNSのエントリが設定されていないと、DNSのエラーやNTPのエラーがでて先に進めない。
NTPサーバの設定を入力しておく。
DNSの設定
ここで、DNSの設定をしておく。
Option 1 DNSで設定をしておく。アプリを立てた場合でもメンテナンスフリー
Option 2 アクセスする端末側のhostsに追記。アプリを建てた場合には、都度、必ずエントリを追加する必要がある。
DNSサーバは、WindowsのDNSでも、LinuxのDNSでも構わない。
DNSで必ず登録するエントリは、
ゾーン: ${CLUSTERNAME}.${DNSDOMAINNAME}.
SNOの持つIPv4アドレス api-init.${CLUSTERNAME}.${DNSDOMAINNAME}
SNOの持つIPv4アドレス api.${CLUSTERNAME}.${DNSDOMAINNAME}
SNOの持つIPv4アドレス *,apps.${CLUSTERNAME}.${DNSDOMAINNAME}
BindのZoneファイル設定(手書きの場合)
$ORIGIN os-cl1.ent6.cloudshift.corp.
os-cl1host A 192.168.16.240
api A 192.168.16.240
api-init A 192.168.16.240
* A 192.168.16.240
WindowsのDNSサーバで作る場合
Wildカードの設定
全てが終わったらNextをクリック
Install clusterをクリック
約1時間くらいかかる。(マシンパワーに構成に依存。Intel11世代だと40分、Intel12世代だと30分くらい。)
インストールが完了すると以下のようになる。
インストール終了後の作業
アクセス情報は以下にあるので、メモ、kubeconfigをダウンロードしておく。(すぐに!)
OpenShift端末(アクセス端末)の構成
OpenShift端末は、WIndows、Mac、Linuxのどれでも構築可能。
Linuxのディストリビューションは何でも構わないが、必要となるパッケージのインストールが簡単なUbuntu 22.04.3が楽。
SSH鍵のペアーはこの端末にもっておいたほうがいい。
ssh-keygen -t rsa
Linuxの場合
# OpenShift Client
curl -k https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/openshift-client-linux.tar.gz > oc.tar.gz
tar zxf oc.tar.gz
rm -rf oc.tar.gz
chmod +x oc
chmod +x kubectl
INSTALLPATH=/usr/local
mv oc $INSTALLPATH/bin/
mv kubectl $INSTALLPATH/bin/
rm -rf README.md
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
# Kubevirt Client (OpenShift Virtualizationを使う場合のみ。virtctl vncを使う場合は、Xwindowが起動していて、vnc-viewerがインストールされている必要がある)
VERSION=v1.1.1
ARCH=$(uname -s | tr A-Z a-z)-$(uname -m | sed 's/x86_64/amd64/') || windows-amd64.exe
curl -L -o virtctl https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-${ARCH}
chmod +x virtctl
install virtctl /usr/local/bin
rm -rf virtctl
virtctl completion bash >/etc/bash_completion.d/virtctl
source /etc/bash_completion.d/virtctl
mkdir -p ~/auth
MAC (ARMの場合)
brewでインストールしたほうが楽
# OpenShift Client
brew install openshift-cli kubernetes-cli
# Kubevirt Client (OpenShift Virtualizationを使う場合のみ。virtctl vncを使う場合は、vnc-viewerがインストールされている必要がある)
VERSION=v1.1.1
curl -L -o virtctl https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-darwin-arm64
chmod +x virtctl
mv virtctl ~/bin
mkdir -p ~/auth
Windows (WIndows 10/11の場合)
手動でいれてもいいがwingetでインストールしたほうが楽
Windows Server 2022の場合は、別途Wingetをいれておく。(https://www.blog.slow-fire.net/2023/09/03/windows-server-2022にwingetをインストール、最新のターミナルもイ/)
Wingetでインストール
# OpenShift Client
winget install kubectl "OpenShift Client"
# Kubevirt Client (OpenShift Virtualizationを使う場合のみ。virtctl vncを使う場合は、vnc-viewerがインストールされている必要がある)
Invoke-WebRequest https://github.com/kubevirt/kubevirt/releases/download/v1.1.1/virtctl-v1.1.1-windows-amd64.exe -OutFile "virtctl-v1.1.1-windows-amd64.exe"
一旦ウィンドウを閉じて開き直す
ダウンロードしたkubeconfigファイルは
~/authにコピーをしておく。
また以下のパーミッションにしておく。
chmod 600 ~/auth/kubeconfig
Helmのインストール
RHEL
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
Ubuntu
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | tee /etc/apt/keyrings/helm.gpg >/dev/null
apt install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | tee /etc/apt/sources.list.d/helm-stable-debian.list
apt update
apt -y install helm
helm completion bash >/etc/bash_completion.d/helm
Mac
brew install helm
Windows (WIndows 10/11の場合)
Wingetでインストール
winget install Helm.Helm
補完を使う場合
helm completion powershell | Out-String | Invoke-Expression
Web Console (OpenShift Console)でのログイン
Hybrid Cloud Console(インストールのときに利用したもの)ではなく、新規に建てたホストにあるコンソール
Launch OpenShift ConsoleをクリックするかURLをクリック
コマンドラインでのログイン
~/auth/kubeconfigがあると言う前提
ocコマンドでのログイン
kubeadminのパスワードを入力
oc login https://console-openshift-console.apps.os-cl1.ent6.cloudshift.corp:6443 --insecure-skip-tls-verify=true -u kubeadmin`
状況を見るには
oc status
kubectlコマンド
Linuxの場合
echo "KUBECONFIG=~/auth/kubeconfig" > /etc/profile.d/openshift.sh
source /etc/profile.d/openshift.sh
kubectl get node -o wide
Windows PowerShellの場合
$Env:KUBECONFIG="$HOME/auth/kubeconfig"
kubectl get node -o wide
以下実行例
管理者ユーザ追加
「一時的な管理ユーザーとしてログインしています。他のユーザーがログインできるように、クラスターの OAuth 設定 を更新してください。」を消す。
クラスターのOAuth設定をクリック
HTPassword (htpasswd)を選択
htpasswdのファイルを作る。ユーザ名 admin / パスワード hogehoge とする。
htpasswd -c -B -b ~/htpasswd admin hogehoge
cat ~/htpasswd
admin:$2y$05$zoN14WA0nKLRu08l4ABfoufmfsqGHJPuv/grLLehHQY8ioSCo2sd2
貼り付けて追加をクリック
追加されたらログアウト(ステータスを確認すること)
ログインし直すと、2種類出てくるので、htpasswdを選択して、admin/hogehogeでログインが可能となる。
adminユーザに管理者権限をつけるには
oc adm policy add-cluster-role-to-user cluster-admin <ユーザー名>
実行例
oc login https://console-openshift-console.apps.os-cl1.ent6.cloudshift.corp:6443 --insecure-skip-tls-verify=true -u kubeadmin
oc adm policy add-cluster-role-to-user cluster-admin admin
駆け足だったが、慣れてしまえばそれほど難しくない。
DNSの設定をしっかりやっていれば、特に問題はおきないと思う。しかし、OpenShift Virtualizationを使うには16CPU以上必要なのは、ちょっとハードルが高いかもしれない。