はじめに
こんにちはサイオステクノロジーの小野です。前回はOpenShift AIの概要について簡単に説明しました。今回はOpenShiftのノードの追加方法について解説します。OpenShift AIを利用するためには、GPUノードを追加する必要があるのでしっかりと操作を覚えましょう。
OpenShift(AWS)について
OpenShiftはAmazon Web Services、Google Cloud Platform、IBM Cloud、Microsoft Azure のクラウド、vSphereなど多くのプラットフォーム上に簡単に構築することができます。AWS上で構築する際はEC2にノードがデプロイされるので、幅広いスペックを選べたり、簡単にサーバー移行が可能であったりといったメリットがあります。したがって、今回はAWS上にOpenShiftを構築してノードを追加します。
ノードの種類
マスターノード(コントロールプレーンノード)
Kubernetesクラスターの管理と制御を行う役割を持つノードです。Kubernetesの特徴である負荷分散や高可用性はマスターノードによって管理されます。
ワーカーノード
コンテナ化されたアプリケーションが動作するノードです。
インフラノード
ルーティングやロギング、モニタリングなどのインフラストラクチャサービスを実行するために専用で用意するノードです。ワーカーノードと分けることでワーカーノードが落ちた場合やアップデートする場合にインフラを保つことができます。ちなみにインフラノードという用語はOpenShiftのドキュメントではよく出てきますが、Kubernetesのドキュメントには登場しません。
ノードの管理
マシンセット(MachineSet)
定義された数の同一のマシン(ノード)を保持し、管理するためのリソースです。マシンセットは、特定の設定を持つマシン(ノード)のレプリカを作成し、所望のレプリカ数を維持します。マシンセットは、ノードのスケーリングや自動修復(失敗したノードの置き換え)を行うために使用されます。
マシンコンフィグ(MachineConfig)
マシンコンフィグはマシンの構成を定義します。マシンコンフィグを使用することでクラスター内のノードに対して一貫した構成を適用できます。
マシンコンフィグプール (MachineConfigPool)
マシンコンフィグプールは、特定のマシンコンフィグを適用するノードのグループを定義します。マシンコンフィグプールを使用すると、異なるタイプや設定を持つノードの集まりをより簡単に管理できます。例えば、一部のノードはGPUを搭載しているが、他のノードは搭載していない、といった場合に便利です。
AWSでのノードの追加手順
OpenShiftのノード追加の方法についてこれから解説します。マシンセットを設定することで簡単にノードの追加が可能です。なお、今回行う手順(高いインスタンス等を設定)では高額な利用料金が発生する場合があるのでご注意ください。
前提条件
- OpenShiftをIPIで構築した直後の状態から操作します。
- OpenShift:4.17.1
- 構築する環境:AWS(amd64)
- リージョン:us-east-2
- クラスター名:ocp-test
- cluster-admin権限があるユーザ操作
マシンセットの確認
コンソール画面のコンピュート > MachineSetsに移動します。
3つのマシンセットが存在することを確認します。
新規マシンセットの作成
MachineSetの作成を押します。
Red Hatのドキュメントに載っているサンプルを用いてマシンセットを作成します。
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
labels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id>
name: <infrastructure_id>-<role>-<zone>
namespace: openshift-machine-api
spec:
replicas: 1
selector:
matchLabels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id>
machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<zone>
template:
metadata:
labels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id>
machine.openshift.io/cluster-api-machine-role: <role>
machine.openshift.io/cluster-api-machine-type: <role>
machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<zone>
spec:
metadata:
labels:
node-role.kubernetes.io/<role>: ""
providerSpec:
value:
ami:
id: ami-046fe691f52a953f9
apiVersion: machine.openshift.io/v1beta1
blockDevices:
- ebs:
iops: 0
volumeSize: 120
volumeType: gp2
credentialsSecret:
name: aws-cloud-credentials
deviceIndex: 0
iamInstanceProfile:
id: <infrastructure_id>-worker-profile
instanceType: m6i.large
kind: AWSMachineProviderConfig
placement:
availabilityZone: <zone>
region: <region>
securityGroups:
- filters:
- name: tag:Name
values:
- <infrastructure_id>-worker-sg
subnet:
filters:
- name: tag:Name
values:
- <infrastructure_id>-private-<zone>
tags:
- name: kubernetes.io/cluster/<infrastructure_id>
value: owned
- name: <custom_tag_name>
value: <custom_tag_value>
userDataSecret:
name: worker-user-dataname: worker-user-data
サンプルの変更点
- 基本的には既存のマシンセットを参考にして入力してください。
- <infrastructure_id>:<クラスター名>-<ランダム文字列>
- infrastructure_idは以下のコマンドで確認するか、既存のマシンセットのyamlを見て確認してください。
-
$ oc get infrastructure cluster -o jsonpath='{.status.infrastructureName}' ocp-test-sp9lv
- <role>:worker
- <region>:us-east-2
- <zone>:us-east-2a(リージョンとは別なので注意)
- metadata.name:マシンセットの名前(サンプルの通りに設定すると既存のマシンセットの名前と被ってエラーが出るので注意)
- instanceType:g4dn.xlarge(今回はGPUノードを追加することを考えるのでGPU用のインスタンスタイプを選択)
- securityGroupsのfliters:’tag:Name’
- securityGroupsのvalues:<infrastructure_id>-node, <infrastructure_id>-lb(2つ設定する)
- ami.id:ami-048d893cb41cbd3cf(インスタンスタイプに対応したAMI)
- subnetのvalues:<infrastructure_id>-subnet-private-<zone>
変更後のyaml
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
labels:
machine.openshift.io/cluster-api-cluster: ocp-test-sp9lv
name: ocp-test-sp9lv-worker-us-east-2a-gpu
namespace: openshift-machine-api
spec:
replicas: 1
selector:
matchLabels:
machine.openshift.io/cluster-api-cluster: ocp-test-sp9lv
machine.openshift.io/cluster-api-machineset: ocp-test-sp9lv-worker-us-east-2a
template:
metadata:
labels:
machine.openshift.io/cluster-api-cluster: ocp-test-sp9lv
machine.openshift.io/cluster-api-machine-role: worker
machine.openshift.io/cluster-api-machine-type: worker
machine.openshift.io/cluster-api-machineset: ocp-test-sp9lv-worker-us-east-2a
spec:
metadata:
labels:
node-role.kubernetes.io/<role>: ""
providerSpec:
value:
ami:
id: ami-048d893cb41cbd3cf
apiVersion: awsproviderconfig.openshift.io/v1beta1
blockDevices:
- ebs:
iops: 0
volumeSize: 120
volumeType: gp2
credentialsSecret:
name: aws-cloud-credentials
deviceIndex: 0
iamInstanceProfile:
id: ocp-test-sp9lv-worker-profile
instanceType: g4dn.xlarge
kind: AWSMachineProviderConfig
placement:
availabilityZone: us-east-2a
region: us-east-2
securityGroups:
- filters:
- name: 'tag:Name'
values:
- ocp-test-sp9lv-node
- filters:
- name: 'tag:Name'
values:
- ocp-test-sp9lv-lb
subnet:
filters:
- name: tag:Name
values:
- ocp-test-sp9lv-subnet-private-us-east-2a
tags:
- name: kubernetes.io/cluster/ocp-test-sp9lv
value: owned
userDataSecret:
name: worker-user-data
マシンセットの作成
サンプルの変更が完了したものを入力して作成を押します。
マシンセットが作成されたら、マシンの作成が始まるのでしばらく待ちます。
マシンセットのデプロイ
作成したMachineSetのMachineのメッセージで「Machine successfully created」が表示されたらマシン作成完了です。
作成したMachineSetのMachinesタブに移動して作成したMachineの欄にノードが表示されていて、ノードのステータスがReadyになっていればノードの追加完了です。
AWS画面での確認
AWSコンソールにログインし、リージョンをus-east-2に設定した後、EC2 > インスタンスのページを開きます。
OpenShiftのマシンセットを作成することで、自動的にEC2のインスタンスが作成されていることが確認できます。
注意事項
- AMIのアーキテクチャがx86_64であるかarm64であるかによって使えるインスタンスタイプが変わるので注意してください。
- AMIのアーキテクチャ確認
-
$ aws ec2 describe-images --image-ids ami-048d893cb41cbd3cf --query "Images[*].{Architecture:Architecture}" [ { "Architecture": "x86_64" } ]
-
- インスタンスタイプが対応しているアーキテクチャ確認
-
$ aws ec2 describe-instance-types --region us-east-2 --instance-types g4dn.xlarge --query "InstanceTypes[*].ProcessorInfo.SupportedArchitectures" [ [ "x86_64" ] ]
-
- AMIのアーキテクチャ確認
- AMIの起動モードがUEFIであるかlegacy-biosであるかによっても使えるインスタンスタイプが変わるので注意してください。
- AMIの起動モード確認
-
$ aws ec2 describe-images --image-ids ami-048d893cb41cbd3cf --query "Images[*].BootMode" [ "legacy-bios" ]
-
- インスタンスタイプの対応している起動モード確認
-
$ aws ec2 describe-instance-types --region us-east-2 --instance-types g4dn.xlarge --query "InstanceTypes[*].SupportedBootModes" [ [ "legacy-bios", "uefi" ] ]
-
- AMIの起動モード確認
最後に
AWS上にOpenShiftを構築してマシンセットを作成することで、GPUノードの追加ができました。以上の手順を参考にしてノード追加を行ってみてください。
最後に重要な注意事項として、GPUノードを追加しましたが、今の段階だとまだGPUがノードに認識されていません。したがってGPUを用いて機械学習を行うことができません。次回はノードにGPUを認識させるためにNode Feature Discovery OperatorとNVIDIA Operatorを導入する方法について解説します。お楽しみに。