はじめに
これまで、IBM CloudのPower Systems Virtual ServerやVirtual Private CloudにOpenShiftをUPIインストールしてきました。この記事ではマネージドサービス「Red Hat OpenShift on IBM Cloud」をプライベート・エンドポイントで作成してざっくりと構成を見ていきます。
1. Red Hat OpenShiftクラスターの作成
1.1 クラスター作成
IBM CloudコンソールからRed Hat OpenShiftのクラスターを作成します。
事前に以下を作成しておきます。
・クラウド・オブジェクト・ストレージ
・仮想プライベート・クラウド(VPC)とVPC内のサブネットx3
・各サブネットのパブリック・ゲートウェイ
■ インフラストラクチャー(IBM Cloudコンソールより)
■ ロケーション(IBM Cloudコンソールより)
■ ワーカー・プール(IBM Cloudコンソールより)
インターネット側からSSL VPNで接続するためのclassicノードと、classicノードとVPC間を接続するためのTransit Gatewayを合わせて下図のような環境になりました。黄色丸はIBM Cloudコンソールの「VPCインフラストラクチャー」、「DNS Services」メニューからは確認できません。一方、赤丸は「VPCインフラストラクチャー」メニューで確認することができます。
1.2. クラスターへのアクセス
サービス・エンドポイントを「プライベート・エンドポイントのみ」としたため、このままでは、IBM Cloudの「OpenShift」メニューからOpenShift Webコンソールにアクセスすることができません。
classicノードに起動したプロキシを経由することで、OpenShift Webコンソールにアクセスすることができました。但し、直接ログインすることはできず、IBM Cloudへのログインを促されます。
作業端末 → classicノード(squidフォワードプロキシ:3128)
→ OpenShiftルーターPod → Openshift WebコンソールPod
classcノードではsquidを起動しています。デフォルトDNSでOpenShift WebコンソールのURLを名前解決できています。これはロード・バランサーのIPアドレスです。
dig @10.0.80.11 console-openshift-console.roks-jp-tok-3-bx2-4x16-~-i000.jp-tok.containers.appdomain.cloud
### 標準出力↓
10.244.160.6
10.244.32.6
コマンドライン操作に必要なkubeconfigは以下のように取得しました。
ibmcloud ks cluster config --cluster roks-jp-tok-3-bx2.4x16 --admin -output yaml > /tmp/kubeconfig
export KUBECONFIG=/tmp/kubeconfig
oc get co
### 標準出力↓
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE
console 4.8.14 True False False 6d19h
csi-snapshot-controller 4.8.14 True False False 6d19h
dns 4.8.14 True False False 6d19h
image-registry 4.8.14 True False False 6d19h
ingress 4.8.14 True False False 6d19h
kube-apiserver 4.8.14 True False False 6d19h
kube-controller-manager 4.8.14 True False False 6d19h
kube-scheduler 4.8.14 True False False 6d19h
kube-storage-version-migrator 4.8.14 True False False 6d19h
marketplace 4.8.14 True False False 6d19h
monitoring 4.8.14 True False False 3d21h
network 4.8.14 True False False 6d19h
node-tuning 4.8.14 True False False 6d19h
openshift-apiserver 4.8.14 True False False 6d19h
openshift-controller-manager 4.8.14 True False False 6d19h
openshift-samples 4.8.14 True False False 6d19h
operator-lifecycle-manager 4.8.14 True False False 6d19h
operator-lifecycle-manager-catalog 4.8.14 True False False 6d19h
operator-lifecycle-manager-packageserver 4.8.14 True False False 2d23h
service-ca 4.8.14 True False False 6d19h
storage 4.8.14 True False False 6d19h
2. 構成確認
2.1. ノード
Red Hat OpenShift on IBM Cloudは、ゾーンあたり1workerノードで作成しました。ノード一覧を確認するとROLESに「master,worker」と表示されていますが、実際にはworkerノードとしてのみ機能します。
oc get nodes
### 標準出力↓
NAME STATUS ROLES AGE VERSION
10.244.160.4 Ready master,worker 93m v1.21.1+a620f50
10.244.32.4 Ready master,worker 93m v1.21.1+a620f50
10.244.96.4 Ready master,worker 93m v1.21.1+a620f50
workerノードのOSはRHCOSでなくRHEL 7.9で、DNSサーバーは「DNS Services」インスタンスのIPアドレス、NTPサーバーはVPCで利用可能とされているNTPサーバーのIPアドレスになっていました。前述のようにIBM Cloudの「DNS Services」メニューでは何も確認できません。
oc debug node/10.244.32.4
### 標準出力↓
Starting pod/10244324-debug ...
To use host binaries, run `chroot /host`
chroot /host
### 標準出力↓
Pod IP: 10.244.32.4
If you do not see a command prompt, try pressing enter.
cat /etc/redhat-release
### 標準出力↓
Red Hat Enterprise Linux Server release 7.9 (Maipo)
cat /etc/resolv.conf
### 標準出力↓
nameserver 161.26.0.7
nameserver 161.26.0.8
grep "^server" /etc/ntp.conf
### 標準出力↓
server time.adn.networklayer.com iburst minpoll 3 maxpoll 4
server 127.127.1.0 # local clock
server 161.26.0.6 # added by /sbin/dhclient-script
2.2. Pod
masterノード上のPodは表示されません。
oc get pod -A -o wide | grep -v "10.244.32.4" | grep -v "10.244.96.4" | grep -v "10.244.160.4"
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ルーターPodは、LoadBalancerタイプのService経由で利用できるようになっており、Service「router-default」のNodePortの31050番ポートと32106番ポートは、VPCに作成されたロード・バランサーの負荷分散先になっていました。NodePortであるため、ルーターPodを起動していないworkerノード(10.244.96.4)でも同ポートでLISTENしてます。
oc get svc -n openshift-ingress
### 標準出力↓
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
router-default LoadBalancer 172.21.46.135 8aae851f-jp-tok.lb.appdomain.cloud 80:32106/TCP,443:31050/TCP 7d1h
router-internal-default ClusterIP 172.21.218.93 <none>
oc describe svc router-default -n openshift-ingress
### 標準出力↓
Name: router-default
Namespace: openshift-ingress
…
LoadBalancer Ingress: 8aae851f-jp-tok.lb.appdomain.cloud
Port: http 80/TCP
TargetPort: http/TCP
NodePort: http 32106/TCP
Endpoints: 172.17.35.145:80,172.17.43.79:80
Port: https 443/TCP
TargetPort: https/TCP
NodePort: https 31050/TCP
Endpoints: 172.17.35.145:443,172.17.43.79:443
oc get pod -n openshift-ingress -o wide
### 標準出力↓
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
router-default-6bf59f86fd-ggrf2 1/1 Running 0 7d1h 172.17.43.79 10.244.160.4 <none> <none>
router-default-6bf59f86fd-h8994 1/1 Running 0 7d1h 172.17.35.145 10.244.32.4 <none> <none>
oc debug node/10.244.96.4
### 標準出力↓
Starting pod/10244964-debug ...
To use host binaries, run `chroot /host`
chroot /host
### 標準出力↓
Pod IP: 10.244.96.4
If you do not see a command prompt, try pressing enter.
ss -na | egrep "32106|31050"
### 標準出力↓
tcp LISTEN 0 32768 *:31050 *:*
tcp LISTEN 0 32768 *:32106 *:*
■ ロード・バランサー バックエンド・プール「tcp-443-31050」の負荷分散先
■ ロード・バランサー バックエンド・プール「tcp-80-32106」の負荷分散先
2.3. Storage Class
アドオン「Block Storage for VPC」により、複数の「StorageClass」が用意されています。
「Block Storage for VPC」は、複数ゾーンに対応しないため注意が必要です。
oc get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
ibmc-vpc-block-10iops-tier (default) vpc.block.csi.ibm.io Delete Immediate false 7d1h
ibmc-vpc-block-5iops-tier vpc.block.csi.ibm.io Delete Immediate false 7d1h
ibmc-vpc-block-custom vpc.block.csi.ibm.io Delete Immediate false 7d1h
ibmc-vpc-block-general-purpose vpc.block.csi.ibm.io Delete Immediate false 7d1h
ibmc-vpc-block-metro-10iops-tier vpc.block.csi.ibm.io Delete WaitForFirstConsumer false 7d1h
ibmc-vpc-block-metro-5iops-tier vpc.block.csi.ibm.io Delete WaitForFirstConsumer false 7d1h
ibmc-vpc-block-metro-custom vpc.block.csi.ibm.io Delete WaitForFirstConsumer false 7d1h
ibmc-vpc-block-metro-general-purpose vpc.block.csi.ibm.io Delete WaitForFirstConsumer false 7d1h
ibmc-vpc-block-metro-retain-10iops-tier vpc.block.csi.ibm.io Retain WaitForFirstConsumer false 7d1h
ibmc-vpc-block-metro-retain-5iops-tier vpc.block.csi.ibm.io Retain WaitForFirstConsumer false 7d1h
ibmc-vpc-block-metro-retain-custom vpc.block.csi.ibm.io Retain WaitForFirstConsumer false 7d1h
ibmc-vpc-block-metro-retain-general-purpose vpc.block.csi.ibm.io Retain WaitForFirstConsumer false 7d1h
ibmc-vpc-block-retain-10iops-tier vpc.block.csi.ibm.io Retain Immediate false 7d1h
ibmc-vpc-block-retain-5iops-tier vpc.block.csi.ibm.io Retain Immediate false 7d1h
ibmc-vpc-block-retain-custom vpc.block.csi.ibm.io Retain Immediate false 7d1h
ibmc-vpc-block-retain-general-purpose vpc.block.csi.ibm.io Retain Immediate false 7d1h
ibmc-vpcblock-odf-10iops vpc.block.csi.ibm.io Delete WaitForFirstConsumer false 7d1h
ibmc-vpcblock-odf-5iops vpc.block.csi.ibm.io Delete WaitForFirstConsumer false 7d1h
ibmc-vpcblock-odf-custom vpc.block.csi.ibm.io Delete WaitForFirstConsumer false 7d1h
ibmc-vpcblock-odf-general vpc.block.csi.ibm.io Delete WaitForFirstConsumer false 7d1h
ibmc-vpcblock-odf-ret-10iops vpc.block.csi.ibm.io Retain WaitForFirstConsumer false 7d1h
ibmc-vpcblock-odf-ret-5iops vpc.block.csi.ibm.io Retain WaitForFirstConsumer false 7d1h
ibmc-vpcblock-odf-ret-custom vpc.block.csi.ibm.io Retain WaitForFirstConsumer false 7d1h
ibmc-vpcblock-odf-ret-general vpc.block.csi.ibm.io Retain WaitForFirstConsumer false 7d1h
2.4. その他
ノードは「machinesets」として管理されていないため、OpenShift側からworkerノードをスケールさせることはできません。IBM Cloudコンソールからであればスケール可能です。
oc get machinesets -n openshift-machine-api
### 標準出力↓
error: the server doesn't have a resource type "machinesets"
workerノードのOSがRHELであるためか、OpenShift Webコンソールからのバージョンアップはできないようです。IBM Cloudコンソールからであればバージョンアップ可能です。