こんにちは、Red Hat
版のKubernetes
である、OpenShift
を担当しています。花田です。
前回は、OpenShift
の AWS上のマネージドサービスであるROSA
の cluster を作成する。
独自の概念であるMachinepool
という概念を使って、Worker Node
を使いしてみて、その周りの制限を探ってみる。という事をやってみました。
今回は、ROSA
で作成される構成がどういうものになのか、AWS
コンソール上から見ていこうと思います。
EC2 インスタンスの構成を観察してみる
初期状態のROSA
の EC2
の構成を観察してみます。今回は
rosa create cluster --cluster-name rosa-cluster --multi-az
で Multi AZ
の最小構成で ROSA
クラスターを作成した時の AWS Console からの EC2の眺めてみます。
Single AZ
構成の時の EC2
インスタンスについては、マニュアルの「1.5. プロビジョニングされる AWS インフラストラクチャー」に書いているのですが、同じかどうかの確認です。
インスタンスの名前から役割が想像できるようになっています。
Master Node
m5.xlarge
x 3Infra Node
r5.xlarge
x 3Worker Node
m5.xlarge
x 3
で構成されている事が見て取れます。Single AZ
構成と同じインスタンスタイプが使われていて、本数だけが増えています。
こちらのページによると
m5.xlarge
= 4 vCPU 16GB :コンピューティング最低化ノードr5.xlarge
= 4 vCPU 32GB :メモリ最適化ノード
なので、Infra Node
にメモリが多めのインスタンスを使用している事がわかります。
ロードバランサーの構成を観察してみる
さて、次は ELB (Elastic Loadbalancer)の構成を見て行きます。
なにやら5つ程、ELB
( NLB
x 2, CLB
x 3) が作成されています。このままだと良く分からないので、構成を確認しながら図に起こしてみた所、以下のようになりました。
OpenShift (Kubernetes)
で API Server
のアクセスを受け付けるポートは6443
ですが、それを受け付ける ELB
が Red Hat SRE
用と、ユーザー用で分かれている事がわかります。入り口のトラフィックの経路を分割しておこう。という思想が見て取れます。
Red Hat SRE
用とされる6443
の Load Balancer
は、CLB
が使われており、対象も Master Node
だけではなくWoker Node
にも分散されています。この部分は標準的なオンプレのOpenShift
と異なる部分で気になる所です。
が、ここはRed Hat
のSRE
チームが使用する部分なので、追求は一旦、脇に置いておきましょう。(気になる方は、フォワード先の Port
をどんな Service
が構成されているか確認してみると面白いかもしれません)
他にも Red Hat SRE
用の CLB
には、ソースセキュリティグループが設定されており、Red Hat
が使用する特定の IPアドレスレンジのみのインバウンドが許可されているのが見て取れました。
ユーザーHTTP アプリ用の ELB(CLB)
ユーザーが作成した Web アプリケーションは、図の上部のCLB
が受け取り、Infra Node
上にある Router
(OpenShift
の Ingress
実装) にフォワードされます。
NLB
のフォワード先の構成は、 以下のように全てのNode
が対象になっています。が、実際にInService
となっているのは2つのInfra Node
だけです。
OpenShift
では、Router
と呼ばれる Infra Node
上のPod
が (配置はどこでも良いのですが、通常 Infra Node
に Label
やTaint
を使って配置します)、一旦、クラスター外部から来た 80/443
の受け口となり、Worker Node
上で稼働するユーザーのコンテナに対してリクエストをフォワードします。
OpenShift
で使用されるRouter Pod
の実体は、Load Balancer
アプリとして良く使用されるHA Proxy
です。クラスター内のHA Proxy
が一旦トラフィックを受け止めて、そこからさらにクラスター内のどこかのWorker Nodde
上に存在するPod
にフォワードする。と考えれば、動きが理解しやすいかもしれません。
このRouter Pod
の配置を確認してみます。
# Router Pod は、openshift-ingress という namespace に所属しています。 $ oc get pods -n openshift-ingress -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES router-default-f998c67f9-mtkcx 1/1 Running 0 6h31m 10.130.2.21 ip-10-0-135-141.ap-northeast-1.compute.internal <none> <none> router-default-f998c67f9-snxw4 1/1 Running 0 6h31m 10.131.2.21 ip-10-0-189-232.ap-northeast-1.compute.internal <none> <none> $
Router Pod
(router-default-xxxxxx-xxxxxx) は、2つだけデプロイされているのがわかります。(紙面の都合上、確認ログは省きますが、上記のInService
の Infra Node
の上にこれら Pod
がデプロイされていました)
ですので、NLB
は、Router Pod
のある所にだけ、リクエストをフォワードしている事がわかります。
Router Pod を増やしてみる
せっかく Infra Node
が 3本あるので、Router
の Pod
も3つにしたい所です。2→3 に Router Pod
の数を増やしてみます。
# Router Pod をコントロールする、Ingress Controller (名前は default) の設定を編集します。 $ oc edit ingresscontroller/default -n openshift-ingress-operator <省略> spec: defaultCertificate: name: rosa-cluster-primary-cert-bundle-secret domain: apps.rosa-cluster.btpl.p1.openshiftapps.com nodePlacement: nodeSelector: matchLabels: node-role.kubernetes.io/infra: "" tolerations: - effect: NoSchedule key: node-role.kubernetes.io/infra operator: Exists replicas: 3 # ここを 2→ 3に編集して保存 routeSelector: {} <省略> $ $ oc get pods -n openshift-ingress NAME READY STATUS RESTARTS AGE router-default-f998c67f9-b2pvl 1/1 Running 0 17s router-default-f998c67f9-mtkcx 1/1 Running 0 6h39m router-default-f998c67f9-snxw4 1/1 Running 0 6h39m $
無事 Router
が 3つに増えました。
ロードバランサー側のステータスを確認してみます。
ロードバランサー側もInfora Node
全てがInService
としてフォワード先になりました。
ストレージボリュームを観察してみる
EC2
、ELB
と来て、次はストレージの初期構成を観察してみます。
まずは EBS
の状態です。
Name
カラムから推測ができる通りに
Master Node
350GiBio1
1000 IOPSInfra Node
300GiBgp2
900 IOPSWorker Node
300GiBgp2
900 IOPS
がアタッチされています。
etcd
のある Master Node
にやや大きめの領域と、若干高めのIOPS
をプロビジョニングしている事がわかります。
その他に、Name
カラムからは何のボリュームか良く分からない 100 GiB x 2 と10GiB x 3
のボリュームが見えます。これらは、確認した所 Infra Node
にアタッチされていました。
恐らく、OpenShift Monitoring
用のボリュームではないか。と当たりを付けて、OpenShift Monitoring
がデプロイされる namespace
である、openshift-monitoring
に所属する PVC
(Persistent Volume Claim)を確認してみます。
$ oc get pvc -n openshift-monitoring NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE alertmanager-data-alertmanager-main-0 Bound pvc-4d3f789e-69a2-4018-a1e2-203c4d11c02e 10Gi RWO gp2 7h55m alertmanager-data-alertmanager-main-1 Bound pvc-3575ba46-984e-434b-9137-165d9aebcd77 10Gi RWO gp2 7h55m alertmanager-data-alertmanager-main-2 Bound pvc-242a40fe-3610-4b7a-b309-b394a19a3e6c 10Gi RWO gp2 7h55m prometheus-data-prometheus-k8s-0 Bound pvc-b358791e-5665-4cf1-9dcd-17e8ca0d5ec4 100Gi RWO gp2 7h55m prometheus-data-prometheus-k8s-1 Bound pvc-b152847b-5b80-45fd-a19a-a08f1e0ca455 100Gi RWO gp2 7h55m $
ビンゴ!です。10 GiB x 3 は、Alert Manager
用、100 GIB x 2 は、Prometheus
のデータ保管用のボリュームのようです。
これらの Alert Manger
と、Prometheus
は、OpenShift Monitoring
と呼ばれるOpenShift
の監視用のサブコンポーネントを構成するモジュールです。
次に S3
を見て行きます。バックアップの保管先と思われる S3
のバケットが作成されています。
名前
のカラムから、上の2つは backup
用、下の1つは registry
用だと思われます。
一応、xxxxx-image-registry-xxxxx
の方だけでも確認してみます。Image Registry
の構成の中身を、バケット名の一部を使って grep してみると…
$ oc get configs.imageregistry.operator.openshift.io -o yaml | grep "rosa-cluster-" bucket: rosa-cluster-sl69n-image-registry-ap-northeast-1-ktnkgfriwbfla bucket: rosa-cluster-sl69n-image-registry-ap-northeast-1-ktnkgfriwbfla $
S3
のバケット名が指定されていました。
ちなみにこの OpenShift
に標準でバンドルされている Image Registry
ですが、一番長い呼ばれ方だと Integrated OpenShift Container Platform Registryと呼ばれます。
Red Hat SRE チームの AWSインフラへのアクセス
ここまで、見て回った Master Node
や、Infra Node
や周辺の AWS
オブジェクトは、 Red Hat SRE
チームが管理する部分なので、基本的にユーザーが触らなくて良い(触ってはいけない)部分になります。
ROSA
はマネージドのOpenShift
環境なので、ユーザーの関心範囲はWorker Node
とその上にデプロイするユーザーのアプリケーションであり、Manster Node
や、Worker Node
等は、Red Hat SRE
チームが管理します。
とは言え Worker Node
を追加したり、新しい PV
を追加したり。と AWS
上のオブジェクトに変更をもたらすはずのユーザーの操作というものがあります。
それらの作業は rosaコマンドや、OpenShift
の CLI
である oc
コマンド、後述するOCM (OpenShift Cluster Manager)
を通して行う事になります。
また反対に、Red Hat SRE
チームも通常は、AWS
アカウントにアクセスはしません。緊急時にのみ「明確に定義された監査可能な手段」でアクセスする場合があります。詳細については、マニュアルの「3.3. アイデンティティーおよびアクセス管理」を参照下さい。
また、Red Hat SRE
チームとユーザーの責任範囲については、「第2章 責任分担マトリクス」のようなドキュメントも用意されています。
ROSA クラスターの管理 (OCM : OpenShift Cluster Manager)
ROSA
をインストールするためには、cloud.redhat.com でアカウントを作成する必要があります。
作成したアカウントで cloud.redhat.com にログインした後、インストールするモジュールをAWS
上に引っ張ってくるための token
を取得します。
この cloud.redhat.com
には、インストール用のtoken
を取得する以外にも Red Hat
製品の統合管理ツールとしての機能を持っています。
cloud.redhat.com にログインし、左側のペインのOpenShift
というメニューをクリックします。
rosa-cluster
として名前を付けたROSA
のOpenShift
クラスターが表示されています。これは、OCM
(OpenShift Cluster Manager) と呼ばれるクラウド・サービスの画面で、OpenShift
クラスターを管理するためのツールです。
ここに表示されるOpenShift
クラスターは、ROSA
で作成された OpenShift
クラスターだけでなく、同じ cloud.redhat.com
ユーザーアカウントを使用して、token
を取得した全ての OpenShift
クラスターが表示されます。
つまり Azure
の上に作成しても IBM Cloud
の上に作成しても GCP
の上に作成しても オンプレミスのVMware
の上に作成したものも、同じユーザーアカウントを使って token
を取得して構築したOpenShift
クラスターであれば、全てこちらに表示され、現在のステータス等が確認できるようになっています。
さらにROSA
では、幾つかの Cluster 管理機能をここからも行えるようになっています。
例えば、ROSA
で作成したOpenShift
クラスターを選択すると以下のようなNetwork
構成の画面があります。
この画面では、デフォルトではインターネットに公開する設定になっている、API Server
や、ユーザーアプリケーションのRouter
の設定を Private
に切り替える事ができるようになっています。
他にも、こちらの記事で rosa
コマンドを使って行われている Machinepool
の作成とMacinepool
への Worker Node
の追加等もこの OCM
からできるようになっています。
ROSA
クラスターのアップグレードの設定 (自動、手動) や、Support
ケースの起票など、ROSA
クラスターの管理に必要な事が、ここからできるようになっています。
今回は、ROSA
によって作成されるデフォルトの AWS
上のオブジェクトをざっと見て周ったのと、ROSA
を含めたOpenShift
クラスターを統合管理するツールであるOCM (OpenShift Cluster Manager)
をご紹介しました。
ROSA
は今後もアップデートが予定されており、今後も使いやすさに磨きがかかっていく予定ですが、随時情報をアップデートしていきたいと思います。