1. はじめに
検証の際に、作成済みのROSA HCPクラスターにMachinepoolを追加する機会がありました。
その際、ROSA HCPでのMachinepool追加方法が、ROSA Classicでの方法と微妙に異なっていたので、まとめました。
なお、現時点(2024年12月)のRedHat公式ドキュメントの内容はROSA Classicベースで記載されており、ROSA HCP環境には当てはまらない点がいくつかありました。そちらについても説明しております。
※この記事の内容は2024年12月現在の情報であり、下記の製品リリースに基づいています。
Red Hat OpenShift Service on AWS with Hosted Control Planes v4.14.37
2. 目次
- 1. はじめに
- 2. 目次
- 3. そもそもMachinepoolとは
- 4. ROSA HCPにMachinepoolを追加する方法
- 5.ドキュメントに記載の内容(Classic仕様)との相違点
- 6. まとめ
3. そもそもMachinepoolとは
3.1. Machinepoolの概要
- Machinepoolとは、クラスター内の同じ設定を持つコンピュートノードのグループのことです。ここでいう設定とは、インスタンスタイプ、デプロイされるAZ、スケーリング、ノードラベル、テイントなどのことです。
- ROSAでWorker Nodeを増やそうと思ったら、Machinepool内のWorker Nodeを追加する、もしくは新しい設定のMachinepoolを作成するという形をとることになります。
3.2. Machinesetとの違い
-
OpenshiftにはMachinesetという概念があります。MachinesetとMachinepoolの違いについて、RedHatのドキュメントには以下のように記載されています。
Machinepoolは、Machinesetを計算するための上位レベルの構造です。Machinepoolは、アベイラビリティーゾーン全体で同じ設定のクローンがすべて含まれるMachinesetを作成します。
-
つまり、Machinesetをさらにグループ化したものがMachinepoolというイメージでしょうか。Machinesetもまた、クラスター内の同じ設定を持つコンピュートノードのグループのことですが、こちらは1つのゾーンに紐づいて存在しています。一方でMachinepoolは、各ゾーンに存在する同じ設定のMachinesetを合わせた概念であるため、複数のソーンにまたがって存在しています。例えば、us-east1cのMachineset、1dのMachineset、1eのMachinesetを3つ合わせて一つのMachinepoolになります。(Classicの場合。詳細は後述)
-
オプションでひとつのゾーンのみにMachinepoolを作成することも出来ますが、multi-az構成のクラスターの場合、全てのゾーンにまたがって存在させるのがデフォルトです。single-az構成のクラスターの場合はMachinepoolも一つのゾーンのみで構成されます。(Classicの場合。詳細は後述)
-
また、MachinesetがOpenshiftの概念であるのに対し、MachinepoolはROSA上の概念です。そのため、以下のような違いがあります。
- Machinesetは
oc
コマンドで操作。Machinepoolはrosa
コマンドで操作。 - ROSA環境でMachinesetの追加や編集をユーザーが直接行うことは不可能。リストの取得は可能。
- MachinesetのリストにはInfra Nodeも含まれる。MachinepoolのリストにはInfra Nodeは含まれない。(ROSAの場合、Infra Nodeはユーザーの管理外であるため)
- Machinesetは
-
こちらについては、以下の記事でより詳しく説明されています。
AWS上でのマネージド OpenShift サービス ROSAの提供開始 / 使い方
3.3. ところが、ROSA HCPだと・・・
- ここまでROSAのMachinepoolという概念について、公式ドキュメントをもとに整理してみましたが、ROSA HCP環境でMachinepoolを作成してみたところ、上記に記載した仕様と異なる点がいくつかありました。
- 具体的には、これまでmulti-az環境のMachinepoolはデフォルトですべてのAZにまたがるものであり、オプションでシングルAZにもできる、とご説明してきたのですが、ROSA HCPでのMachinepoolはむしろ一つのAZに紐づける設定がデフォルトになっており、複数のAZにまたがって存在させる方法があるのかどうかが不明という状況です。
4. ROSA HCPにMachinepoolを追加する方法
ドキュメントに記載の内容(ROSA Classicの仕様)とROSA HCPの仕様を比較する前に、まずMachinepoolの追加方法を簡単にご説明します。
4.1. CLIでの追加方法
- rosa CLIで以下のコマンドを実行します。
rosa create machinepool --cluster=<cluster-name> \ --name=<machine_pool_id> \ --replicas=<replica_count> \ --instance-type=<instance_type> \ --labels=<key>=<value>,<key>=<value> \ --taints=<key>=<value>:<effect>,<key>=<value>:<effect> \ --use-spot-instances \ --spot-max-price=<price> \ --disk-size=<disk_size> \ --availability-zone=<availability_zone_name> \ --additional-security-group-ids <sec_group_id> \ --subnet <subnet_id>
- このうち、 下記3つの引数以外はすべてオプションですので、デフォルト設定でよければ省略が可能です。
-
--cluster
:クラスター名 -
--name
:Machinepoolにつける名前 -
--replicas
:プロビジョニングするコンピュートノードの数
-
- こちらは、オートスケーリングしないMachinepoolを作成するコマンドです。オートスケーリングさせる場合、
--replicas
ではなく、min-replicas
と--max-replicas
を引数として指定する必要があります。 - 引数の内容やデフォルト設定の詳細は、公式ドキュメントをご参照ください。
- このうち、 下記3つの引数以外はすべてオプションですので、デフォルト設定でよければ省略が可能です。
4.2. OCM(Openshift Cluster Manager)での追加方法
-
OpenShift Cluster Managerに移動し、サイドバーの
Cluster List
をクリックします。 - 追加したいクラスターを選択します。
-
Machine pools
タブで、Add machine pool
ボタンをクリックします。 - 追加したいMachinepoolの各設定項目を入力していきます。
Machine pool name、Private subnet name、Compute node instance type、Compute node countは必須項目です。 -
Add machine pool
をクリックしてマシンプールを作成します。
5.ドキュメントに記載の内容(Classic仕様)との相違点
5.1. CLIで追加する方法について
ドキュメントの内容
-
上記の「4.1. CLIでの追加方法」に記載した通り、CLIでMachinepoolを追加する際、
--replicas
という引数を使用してプロビジョニングするコンピュートノードの数を指定するのですが、こちらについて、ドキュメントには以下のように記されています。単一アベイラビリティーゾーンを使用して ROSAをデプロイしている場合は、ゾーンのMachinepoolにプロビジョニングするコンピュートノードの数を定義します。複数のアベイラビリティーゾーンを使用してクラスターをデプロイしている場合は、全ゾーンでプロビジョニングするコンピュートノードの数を定義し、その数は3の倍数である必要があります。
-
multi-az構成の場合、--replicasで指定するコンピュートノードの数は3の倍数でなければならないと記載されています。
HCP環境での検証結果
-
使用している環境はmulti-az環境なのですが、
--replicas=1
でも問題なくMachinepoolの追加が出来ました。
※workers-3というMachinepoolを新規で追加$ rosa create machinepool --cluster=xxxxx --name=workers-3 --replicas=1 --instance-type=r4.xlarge --region us-east-1 I: Checking available instance types for machine pool 'workers-3' I: Machine pool 'workers-3' created successfully on hosted cluster 'xxxxx' I: To view the machine pool details, run 'rosa describe machinepool --cluster xxxxx --machinepool workers-3' I: To view all machine pools, run 'rosa list machinepools --cluster xxxxx' $ rosa list machinepool --cluster=xxxxx --region us-east-1 ID AUTOSCALING REPLICAS INSTANCE TYPE LABELS TAINTS AVAILABILITY ZONE SUBNET DISK SIZE VERSION AUTOREPAIR workers-3 No 1/1 r4.xlarge us-east-1d subnet-xxxxxxxxxxxxxxxxx 300 GiB 4.14.37 Yes workers-0 No 1/1 r4.xlarge us-east-1d subnet-xxxxxxxxxxxxxxxxx 300 GiB 4.14.37 Yes workers-1 No 1/1 r4.xlarge us-east-1e subnet-xxxxxxxxxxxxxxxxx 300 GiB 4.14.37 Yes workers-2 No 1/1 r4.xlarge us-east-1c subnet-xxxxxxxxxxxxxxxxx 300 GiB 4.14.37 Yes
-
また、
--replicas=3
で追加してみても、3つのAZにまたがったMachinepoolが作成されるわけではなく、1つのAZに3つのコンピュートノードを持つMachinepoolになりました。
※workers-3というMachinepoolを新規で追加$ rosa create machinepool --cluster=xxxxx --name=workers-3 --replicas=3 --instance-type=r4.xlarge --region us-east-1 I: Checking available instance types for machine pool 'workers-3' I: Machine pool 'workers-3' created successfully on hosted cluster 'xxxxx' I: To view the machine pool details, run 'rosa describe machinepool --cluster xxxxx --machinepool workers-3' I: To view all machine pools, run 'rosa list machinepools --cluster xxxxx' $ rosa list machinepool --cluster=xxxxx --region us-east-1 ID AUTOSCALING REPLICAS INSTANCE TYPE LABELS TAINTS AVAILABILITY ZONE SUBNET DISK SIZE VERSION AUTOREPAIR workers-3 No 3/3 r4.xlarge us-east-1d subnet-xxxxxxxxxxxxxxxxx 300 GiB 4.14.37 Yes workers-0 No 1/1 r4.xlarge us-east-1d subnet-xxxxxxxxxxxxxxxxx 300 GiB 4.14.37 Yes workers-1 No 1/1 r4.xlarge us-east-1e subnet-xxxxxxxxxxxxxxxxx 300 GiB 4.14.37 Yes workers-2 No 1/1 r4.xlarge us-east-1c subnet-xxxxxxxxxxxxxxxxx 300 GiB 4.14.37 Yes
-
ちなみに、
--replicas
の引数に2つ以上のAZを指定することはできませんでした。 -
つまりHCP環境の場合、multi-AZ構成でも引数に3の倍数を指定する必要はなく、むしろCLIでは複数のAZにまたがるMachinepoolは作成ができないようです。
5.2. OCMで追加する方法について
ドキュメントの内容
-
ドキュメントには、以下のように記載されています。
(オートスケーリングを有効化する場合)複数のアベイラビリティーゾーンを使用してクラスターをデプロイした場合は、Minimum nodes per zone および Maximum nodes per zone を設定します。これは、ゾーンごとの最小および最大のコンピュート制限を定義します。
(オートスケーリングを有効化しない場合)複数のアベイラビリティーゾーンを使用してクラスターをデプロイした場合は、ドロップダウンメニューからコンピュートノードの数 (ゾーンごと) を選択します。これは、ゾーンごとにMachinepoolにプロビジョニングするコンピュートノードの数を定義します。
-
どちらの場合も、ゾーンごとのコンピュートノードの数を定義するようにという説明があります。つまり、3と指定した場合、全ゾーンに3つずつコンピュートノードが作成されるという理解です。
HCP環境での検証結果
- OCMでMachinepoolを追加する際は、上記「4.2. OCMでの追加方法」でご紹介したとおり画面内の各設定値を入力してから、
Add machine pool
ボタンをクリックして作成することになります。 - その中の設定値の1つとして、
Private subnet name
という欄があるのですが、こちらはプルダウンで選択する形式になっており、最初から一つのAZしか選択できない仕様になっております。そのため、3つのAZにまたがったMachinepoolは作成しようがないかと思われます。
6. まとめ
以上のように、ROSA Classicにおいては、MachinepoolはすべてのAZにまたがって配置する仕様がデフォルトだったようなのですが、ROSA HCPの場合、むしろ複数のAZにまたがるように作成する方法が不明という状態です。
同じ設定のコンピュートノードを全AZに配置したい場合、同じ設定のMachinepoolをAZごとに1つずつ作成していくことになるのかと思われます。