OpenShiftを1VMでインストールをする。

投稿者: | 2月 22, 2024

なんか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以上必要なのは、ちょっとハードルが高いかもしれない。

コメントを残す