2.5. GCP でコンピュートマシンセットを作成する
異なるコンピュートマシンセットを作成して、Google Cloud Platform (GCP) 上の OpenShift Container Platform クラスターで特定の目的で使用できます。たとえば、インフラストラクチャーマシンセットおよび関連マシンを作成して、サポートするワークロードを新しいマシンに移動できます。
高度なマシン管理およびスケーリング機能は、Machine API が動作しているクラスターでのみ使用できます。user-provisioned infrastructure を持つクラスターでは、Machine API を使用するために追加の検証と設定が必要です。
インフラストラクチャープラットフォームタイプが none
のクラスターでは、Machine API を使用できません。この制限は、クラスターに接続されている計算マシンが、この機能をサポートするプラットフォームにインストールされている場合でも適用されます。このパラメーターは、インストール後に変更することはできません。
クラスターのプラットフォームタイプを表示するには、以下のコマンドを実行します。
$ oc get infrastructure cluster -o jsonpath='{.status.platform}'
2.5.1. GCP 上のコンピュートマシンセットカスタムリソースのサンプル YAML
このサンプル YAML は、Google Cloud Platform (GCP) で実行されるコンピューティングマシンセットを定義し、node-role.kubernetes.io/<role>: ""
でラベル付けされたノードを作成します。<role>
は追加するノードラベルです。
OpenShift CLI を使用して取得した値
以下の例では、OpenShift CLI を使用してクラスターの値の一部を取得できます。
- インフラストラクチャー ID
<infrastructure_id>
文字列は、クラスターをプロビジョニングしたときに設定したクラスター ID に基づくインフラストラクチャー ID です。OpenShift CLI がインストールされている場合は、以下のコマンドを実行してインフラストラクチャー ID を取得できます。$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
- イメージパス
<path_to_image>
文字列は、ディスクの作成に使用されたイメージへのパスです。OpenShift CLI がインストールされている場合は、以下のコマンドを実行してイメージへのパスを取得できます。$ oc -n openshift-machine-api \ -o jsonpath='{.spec.template.spec.providerSpec.value.disks[0].image}{"\n"}' \ get machineset/<infrastructure_id>-worker-a
サンプル GCP MachineSet
値
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1 name: <infrastructure_id>-w-a 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>-w-a template: metadata: creationTimestamp: null labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machine-role: <role> 2 machine.openshift.io/cluster-api-machine-type: <role> machine.openshift.io/cluster-api-machineset: <infrastructure_id>-w-a spec: metadata: labels: node-role.kubernetes.io/<role>: "" providerSpec: value: apiVersion: gcpprovider.openshift.io/v1beta1 canIPForward: false credentialsSecret: name: gcp-cloud-credentials deletionProtection: false disks: - autoDelete: true boot: true image: <path_to_image> 3 labels: null sizeGb: 128 type: pd-ssd gcpMetadata: 4 - key: <custom_metadata_key> value: <custom_metadata_value> kind: GCPMachineProviderSpec machineType: n1-standard-4 metadata: creationTimestamp: null networkInterfaces: - network: <infrastructure_id>-network subnetwork: <infrastructure_id>-worker-subnet projectID: <project_name> 5 region: us-central1 serviceAccounts: 6 - email: <infrastructure_id>-w@<project_name>.iam.gserviceaccount.com scopes: - https://www.googleapis.com/auth/cloud-platform tags: - <infrastructure_id>-worker userDataSecret: name: worker-user-data zone: us-central1-a
- 1
<infrastructure_id>
は、クラスターのプロビジョニング時に設定したクラスター ID に基づくインフラストラクチャー ID を指定します。- 2
<node>
には、追加するノードラベルを指定します。- 3
- 現在のコンピュートマシンセットで使用されるイメージへのパスを指定します。
GCP Marketplace イメージを使用するには、使用するオファーを指定します。
-
OpenShift Container Platform:
https://www.googleapis.com/compute/v1/projects/redhat-marketplace-public/global/images/redhat-coreos-ocp-413-x86-64-202305021736
-
OpenShift Platform Plus:
https://www.googleapis.com/compute/v1/projects/redhat-marketplace-public/global/images/redhat-coreos-opp-413-x86-64-202305021736
-
OpenShift Kubernetes Engine:
https://www.googleapis.com/compute/v1/projects/redhat-marketplace-public/global/images/redhat-coreos-oke-413-x86-64-202305021736
-
OpenShift Container Platform:
- 4
- オプション:
key:value
のペアの形式でカスタムメタデータを指定します。ユースケースの例は、カスタムメタデータの設定 について GCP のドキュメントを参照してください。 - 5
<project_name>
には、クラスターに使用する GCP プロジェクトの名前を指定します。- 6
- 単一のサービスアカウントを指定します。複数のサービスアカウントはサポートされていません。
2.5.2. コンピュートマシンセットの作成
インストールプログラムによって作成されるコンピュートセットセットに加えて、独自のマシンセットを作成して、選択した特定のワークロードのマシンコンピューティングリソースを動的に管理できます。
前提条件
- OpenShift Container Platform クラスターをデプロイしている。
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
パーミッションを持つユーザーとして、oc
にログインする。
手順
コンピュートマシンセットのカスタムリソース (CR) サンプルを含む新しい YAML ファイルを作成し、
<file_name>.yaml
という名前を付けます。<clusterID>
および<role>
パラメーターの値を設定していることを確認します。オプション: 特定のフィールドに設定する値がわからない場合は、クラスターから既存のコンピュートマシンセットを確認できます。
クラスター内のコンピュートマシンセットをリスト表示するには、次のコマンドを実行します。
$ oc get machinesets -n openshift-machine-api
出力例
NAME DESIRED CURRENT READY AVAILABLE AGE agl030519-vplxk-worker-us-east-1a 1 1 1 1 55m agl030519-vplxk-worker-us-east-1b 1 1 1 1 55m agl030519-vplxk-worker-us-east-1c 1 1 1 1 55m agl030519-vplxk-worker-us-east-1d 0 0 55m agl030519-vplxk-worker-us-east-1e 0 0 55m agl030519-vplxk-worker-us-east-1f 0 0 55m
特定のコンピュートマシンセットカスタムリソース (CR) 値を表示するには、以下のコマンドを実行します。
$ oc get machineset <machineset_name> \ -n openshift-machine-api -o yaml
出力例
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1 name: <infrastructure_id>-<role> 2 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> 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> spec: providerSpec: 3 ...
次のコマンドを実行して
MachineSet
CR を作成します。$ oc create -f <file_name>.yaml
検証
次のコマンドを実行して、コンピュートマシンセットのリストを表示します。
$ oc get machineset -n openshift-machine-api
出力例
NAME DESIRED CURRENT READY AVAILABLE AGE agl030519-vplxk-infra-us-east-1a 1 1 1 1 11m agl030519-vplxk-worker-us-east-1a 1 1 1 1 55m agl030519-vplxk-worker-us-east-1b 1 1 1 1 55m agl030519-vplxk-worker-us-east-1c 1 1 1 1 55m agl030519-vplxk-worker-us-east-1d 0 0 55m agl030519-vplxk-worker-us-east-1e 0 0 55m agl030519-vplxk-worker-us-east-1f 0 0 55m
新しいコンピュートマシンセットが利用可能になると、
DESIRED
とCURRENT
の値が一致します。コンピュートマシンセットが使用できない場合は、数分待ってからコマンドを再実行してください。
2.5.3. マシンセットを使用した永続ディスクタイプの設定
マシンセットの YAML ファイルを編集することで、マシンセットがマシンをデプロイする永続ディスクのタイプを設定できます。
永続ディスクのタイプ、互換性、リージョン別の可用性、制限事項の詳細は、永続ディスク に関する GCP Compute Engine のドキュメントを参照してください。
手順
- テキストエディターで、既存のマシンセットの YAML ファイルを開くか、新しいマシンセットを作成します。
providerSpec
フィールドの下で以下の行を編集します。apiVersion: machine.openshift.io/v1beta1 kind: MachineSet ... spec: template: spec: providerSpec: value: disks: type: <pd-disk-type> 1
- 1
- 永続ディスクのタイプを指定します。有効な値は、
pd-ssd
、pd-standard
、およびpd-balanced
です。デフォルト値はpd-standard
です。
検証
-
Google Cloud コンソールを使用して、マシンセットによってデプロイされたマシンの詳細を確認し、
Type
フィールドが設定済みのディスクタイプに一致していることを確認します。
2.5.4. マシンセットを使用した Confidential VM の設定
マシンセットの YAML ファイルを編集することにより、マシンセットがデプロイするマシンに使用する Confidential VM オプションを設定できます。
機密仮想マシンの機能、互換性の詳細は、Confidential VM に関する GCP Compute Engine のドキュメントを参照してください。
現在、Confidential VM は 64 ビット ARM アーキテクチャーではサポートされていません。
OpenShift Container Platform 4.14 は、AMD Secure Encrypted Virtualization Secure Nested Paging (SEV-SNP) を備えた Confidential 仮想マシンなど、一部の Confidential Compute 機能をサポートしていません。
手順
- テキストエディターで、既存のマシンセットの YAML ファイルを開くか、新しいマシンセットを作成します。
providerSpec
フィールドの下の次のセクションを編集します。apiVersion: machine.openshift.io/v1beta1 kind: MachineSet ... spec: template: spec: providerSpec: value: confidentialCompute: Enabled 1 onHostMaintenance: Terminate 2 machineType: n2d-standard-8 3 ...
- 1
- Confidential VM を有効にするかどうかを指定します。有効な値は
Disabled
またはEnabled
です。 - 2
- ハードウェアやソフトウェアの更新など、ホストのメンテナンスイベント中の VM の動作を指定します。Confidential VM を使用するマシンの場合は、この値を
Terminate
に設定する必要があります。これにより、VM が停止します。Confidential VM はライブ VM 移行をサポートしていません。 - 3
- Confidential VM をサポートするマシンタイプを指定します。Confidential VM は、N2D および C2D シリーズのマシンタイプをサポートしています。
検証
- Google Cloud コンソールで、マシンセットによってデプロイされたマシンの詳細を確認し、Confidential VM オプションが設定した値に一致していることを確認します。
2.5.5. マシンをプリエンプション可能な仮想マシンインスタンスとしてデプロイするマシンセット
マシンを保証されていないプリエンプション可能な仮想マシンインスタンスとしてデプロイする GCP で実行されるコンピュートマシンセットを作成して、コストを節約できます。プリエンプション可能な仮想マシンインスタンスは、追加の Compute Engine 容量を使用し、通常のインスタンスよりもコストが低くなります。プリエンプション可能な仮想マシンインスタンスは、バッチやステートレス、水平的に拡張可能なワークロードなどの割り込みを許容できるワークロードに使用することができます。
GCP Compute Engine は、プリエンプション可能な仮想マシンインスタンスをいつでも終了することができます。Compute Engine は、中断が 30 秒後に発生することを示すプリエンプションの通知をユーザーに送信します。OpenShift Container Platform は、Compute Engine がプリエンプションに関する通知を発行する際に影響を受けるインスタンスからワークロードを削除し始めます。インスタンスが停止していない場合は、ACPI G3 Mechanical Off シグナルが 30 秒後にオペレーティングシステムに送信されます。プリエンプション可能な仮想マシンインスタンスは、Compute Engine によって TERMINATED
状態に移行されます。
以下の理由により、プリエンプション可能な仮想マシンインスタンスを使用すると中断が生じる可能性があります。
- システムまたはメンテナンスイベントがある
- プリエンプション可能な仮想マシンインスタンスの供給が減少する
- インスタンスは、プリエンプション可能な仮想マシンインスタンスについて割り当てられている 24 時間後に終了します。
GCP がインスタンスを終了すると、プリエンプション可能な仮想マシンインスタンスで実行される終了ハンドラーによりマシンリソースが削除されます。コンピュートマシンセットの レプリカ
数を満たすために、ココンピュートマシンセットは、プリエンプティブル VM インスタンスを要求するマシンを作成します。
2.5.5.1. コンピュートマシンセットの使用によるプリエンプション可能な仮想マシンインスタンスの作成
preemptible
をコンピュートマシンセットの YAML ファイルに追加し、GCP でプリエンプション可能な仮想マシンインスタンスを起動できます。
手順
providerSpec
フィールドの下に以下の行を追加します。providerSpec: value: preemptible: true
preemptible
がtrue
に設定される場合、インスタンスの起動後に、マシンにinterruptable-instance
というラベルが付けられます。
2.5.6. マシンセットを使用した Shielded VM オプションの設定
マシンセットの YAML ファイルを編集することで、マシンセットがデプロイメントするマシンに使用する Shielded VM オプションを設定できます。
Shielded VM の特徴と機能の詳細は、Shielded VM に関する GCP Compute Engine のドキュメントを参照してください。
手順
- テキストエディターで、既存のマシンセットの YAML ファイルを開くか、新しいマシンセットを作成します。
providerSpec
フィールドの下の次のセクションを編集します。apiVersion: machine.openshift.io/v1beta1 kind: MachineSet # ... spec: template: spec: providerSpec: value: shieldedInstanceConfig: 1 integrityMonitoring: Enabled 2 secureBoot: Disabled 3 virtualizedTrustedPlatformModule: Enabled 4 # ...
検証
- Google Cloud コンソールを使用して、マシンセットによってデプロイされたマシンの詳細を確認し、Shielded VM オプションが設定した値に一致していることを確認します。
2.5.7. マシンセットの顧客管理の暗号鍵の有効化
Google Cloud Platform (GCP) Compute Engine を使用すると、ユーザーは暗号鍵を指定してディスク上の停止状態のデータを暗号化することができます。この鍵は、顧客のデータの暗号化に使用されず、データ暗号化キーの暗号化に使用されます。デフォルトでは、Compute Engine は Compute Engine キーを使用してこのデータを暗号化します。
Machine API を使用するクラスターでは、顧客管理の鍵による暗号化を有効にすることができます。まず KMS キーを作成 し、適切なパーミッションをサービスアカウントに割り当てる必要があります。サービスアカウントが鍵を使用できるようにするには、KMS キー名、キーリング名、および場所が必要です。
KMS の暗号化に専用のサービスアカウントを使用しない場合は、代わりに Compute Engine のデフォルトのサービスアカウントが使用されます。専用のサービスアカウントを使用しない場合、デフォルトのサービスアカウントに、キーにアクセスするためのパーミッションを付与する必要があります。Compute Engine のデフォルトのサービスアカウント名は、service-<project_number>@compute-system.iam.gserviceaccount.com
パターンをベースにしています。
手順
特定のサービスアカウントが KMS キーを使用できるようにし、サービスアカウントに正しい IAM ロールを付与するには、KMS キー名、キーリング名、場所を指定して次のコマンドを実行します。
$ gcloud kms keys add-iam-policy-binding <key_name> \ --keyring <key_ring_name> \ --location <key_ring_location> \ --member "serviceAccount:service-<project_number>@compute-system.iam.gserviceaccount.com” \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
マシンセット YAML ファイルの
providerSpec
フィールドで暗号化キーを設定します。以下に例を示します。apiVersion: machine.openshift.io/v1beta1 kind: MachineSet ... spec: template: spec: providerSpec: value: disks: - type: encryptionKey: kmsKey: name: machine-encryption-key 1 keyRing: openshift-encrpytion-ring 2 location: global 3 projectID: openshift-gcp-project 4 kmsKeyServiceAccount: openshift-service-account@openshift-gcp-project.iam.gserviceaccount.com 5
更新された
providerSpec
オブジェクト設定を使用して新しいマシンが作成されると、ディスク暗号化キーが KMS キーで暗号化されます。
2.5.8. コンピュートマシンセットの GPU サポートの有効化
Google Cloud Platform (GCP) Compute Engine を使用すると、ユーザーは仮想マシンインスタンスに GPU を追加できます。GPU リソースにアクセスできるワークロードは、この機能を有効にしてコンピュートマシンでより優れたパフォーマンスが得られます。GCP 上の OpenShift Container Platform は、A2 および N1 マシンシリーズの NVIDIA GPU モデルをサポートしています。
モデル名 | GPU タイプ | マシンタイプ [1] |
---|---|---|
NVIDIA A100 |
|
|
NVIDIA K80 |
|
|
NVIDIA P100 |
| |
NVIDIA P4 |
| |
NVIDIA T4 |
| |
NVIDIA V100 |
|
- 仕様、互換性、地域の可用性、制限など、マシンタイプの詳細は、N1 マシンシリーズ、A2 マシンシリーズ、GPU リージョンとゾーンの可用性 に関する GCP Compute Engine のドキュメントをご覧ください。
Machine API を使用して、インスタンスに使用するサポートされている GPU を定義できます。
N1 マシンシリーズのマシンを、サポートされている GPU タイプの 1 つでデプロイするように設定できます。A2 マシンシリーズのマシンには GPU が関連付けられており、ゲストアクセラレータを使用することはできません。
グラフィックワークロード用の GPU はサポートされていません。
手順
- テキストエディターで、既存のコンピュートマシンセットの YAML ファイルを開くか、新しいマシンセットを作成します。
コンピュートマシンセットの YAML ファイルの
providerSpec
フィールドで GPU 設定を指定します。有効な設定の次の例を参照してください。A2 マシンシリーズの設定例:
providerSpec: value: machineType: a2-highgpu-1g 1 onHostMaintenance: Terminate 2 restartPolicy: Always 3
N1 マシンシリーズの設定例:
providerSpec: value: gpus: - count: 1 1 type: nvidia-tesla-p100 2 machineType: n1-standard-1 3 onHostMaintenance: Terminate 4 restartPolicy: Always 5
2.5.9. 既存の OpenShift Container Platform クラスターへの GPU ノードの追加
デフォルトのコンピュートマシンセット設定をコピーおよび変更して、GCP クラウドプロバイダー用の GPU 対応マシンセットとマシンを作成できます。
次の表は、検証済みのインスタンスタイプを示しています。
インスタンスタイプ | NVIDIA GPU アクセラレーター | GPU の最大数 | アーキテクチャー |
---|---|---|---|
| A100 | 1 | x86 |
| T4 | 1 | x86 |
手順
-
既存の
MachineSet
のコピーを作成します。 -
新しいコピーで、
metadata.name
とmachine.openshift.io/cluster-api-machineset
の両方のインスタンスで、マシンセットのname
を変更します。 インスタンスタイプを変更して、新しくコピーした
MachineSet
に次の 2 行を追加します。machineType: a2-highgpu-1g onHostMaintenance: Terminate
a2-highgpu-1g.json
ファイルの例{ "apiVersion": "machine.openshift.io/v1beta1", "kind": "MachineSet", "metadata": { "annotations": { "machine.openshift.io/GPU": "0", "machine.openshift.io/memoryMb": "16384", "machine.openshift.io/vCPU": "4" }, "creationTimestamp": "2023-01-13T17:11:02Z", "generation": 1, "labels": { "machine.openshift.io/cluster-api-cluster": "myclustername-2pt9p" }, "name": "myclustername-2pt9p-worker-gpu-a", "namespace": "openshift-machine-api", "resourceVersion": "20185", "uid": "2daf4712-733e-4399-b4b4-d43cb1ed32bd" }, "spec": { "replicas": 1, "selector": { "matchLabels": { "machine.openshift.io/cluster-api-cluster": "myclustername-2pt9p", "machine.openshift.io/cluster-api-machineset": "myclustername-2pt9p-worker-gpu-a" } }, "template": { "metadata": { "labels": { "machine.openshift.io/cluster-api-cluster": "myclustername-2pt9p", "machine.openshift.io/cluster-api-machine-role": "worker", "machine.openshift.io/cluster-api-machine-type": "worker", "machine.openshift.io/cluster-api-machineset": "myclustername-2pt9p-worker-gpu-a" } }, "spec": { "lifecycleHooks": {}, "metadata": {}, "providerSpec": { "value": { "apiVersion": "machine.openshift.io/v1beta1", "canIPForward": false, "credentialsSecret": { "name": "gcp-cloud-credentials" }, "deletionProtection": false, "disks": [ { "autoDelete": true, "boot": true, "image": "projects/rhcos-cloud/global/images/rhcos-412-86-202212081411-0-gcp-x86-64", "labels": null, "sizeGb": 128, "type": "pd-ssd" } ], "kind": "GCPMachineProviderSpec", "machineType": "a2-highgpu-1g", "onHostMaintenance": "Terminate", "metadata": { "creationTimestamp": null }, "networkInterfaces": [ { "network": "myclustername-2pt9p-network", "subnetwork": "myclustername-2pt9p-worker-subnet" } ], "preemptible": true, "projectID": "myteam", "region": "us-central1", "serviceAccounts": [ { "email": "myclustername-2pt9p-w@myteam.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/cloud-platform" ] } ], "tags": [ "myclustername-2pt9p-worker" ], "userDataSecret": { "name": "worker-user-data" }, "zone": "us-central1-a" } } } } }, "status": { "availableReplicas": 1, "fullyLabeledReplicas": 1, "observedGeneration": 1, "readyReplicas": 1, "replicas": 1 } }
次のコマンドを実行して、既存のノード、マシン、およびマシンセットを表示します。各ノードは、特定の GCP リージョンと OpenShift Container Platform ロールを持つマシン定義のインスタンスであることに注意してください。
$ oc get nodes
出力例
NAME STATUS ROLES AGE VERSION myclustername-2pt9p-master-0.c.openshift-qe.internal Ready control-plane,master 8h v1.27.3 myclustername-2pt9p-master-1.c.openshift-qe.internal Ready control-plane,master 8h v1.27.3 myclustername-2pt9p-master-2.c.openshift-qe.internal Ready control-plane,master 8h v1.27.3 myclustername-2pt9p-worker-a-mxtnz.c.openshift-qe.internal Ready worker 8h v1.27.3 myclustername-2pt9p-worker-b-9pzzn.c.openshift-qe.internal Ready worker 8h v1.27.3 myclustername-2pt9p-worker-c-6pbg6.c.openshift-qe.internal Ready worker 8h v1.27.3 myclustername-2pt9p-worker-gpu-a-wxcr6.c.openshift-qe.internal Ready worker 4h35m v1.27.3
次のコマンドを実行して、
openshift-machine-api
namespace に存在するマシンとマシンセットを表示します。各コンピュートマシンセットは、GCP リージョン内の異なるアベイラビリティーゾーンに関連付けられています。インストーラーは、アベイラビリティゾーン全体でコンピュートマシンの負荷を自動的に分散します。$ oc get machinesets -n openshift-machine-api
出力例
NAME DESIRED CURRENT READY AVAILABLE AGE myclustername-2pt9p-worker-a 1 1 1 1 8h myclustername-2pt9p-worker-b 1 1 1 1 8h myclustername-2pt9p-worker-c 1 1 8h myclustername-2pt9p-worker-f 0 0 8h
次のコマンドを実行して、
openshift-machine-api
namespace に存在するマシンを表示します。セットごとに設定できるコンピュートマシンは 1 つだけですが、コンピュートマシンセットをスケーリングして、特定のリージョンとゾーンにノードを追加することはできます。$ oc get machines -n openshift-machine-api | grep worker
出力例
myclustername-2pt9p-worker-a-mxtnz Running n2-standard-4 us-central1 us-central1-a 8h myclustername-2pt9p-worker-b-9pzzn Running n2-standard-4 us-central1 us-central1-b 8h myclustername-2pt9p-worker-c-6pbg6 Running n2-standard-4 us-central1 us-central1-c 8h
次のコマンドを実行して、既存のコンピュート
MachineSet
定義のいずれかのコピーを作成し、結果を JSON ファイルに出力します。これは、GPU 対応のコンピュートマシンセット定義の基礎となります。$ oc get machineset myclustername-2pt9p-worker-a -n openshift-machine-api -o json > <output_file.json>
JSON ファイルを編集し、新しい
MachineSet
定義に次の変更を加えます。-
サブストリング
gpu
をmetadata.name
とmachine.openshift.io/cluster-api-machineset
の両方のインスタンスに挿入し、マシンセットname
を変更します。 新しい
MachineSet
定義のmachineType
を、NVIDIA A100 GPU を含むa2-highgpu-1g
に変更します。jq .spec.template.spec.providerSpec.value.machineType ocp_4.14_machineset-a2-highgpu-1g.json "a2-highgpu-1g"
<output_file.json>
ファイルはocp_4.14_machineset-a2-highgpu-1g.json
として保存されます。
-
サブストリング
ocp_4.14_machineset-a2-highgpu-1g.json
の次のフィールドを更新します。-
.metadata.name
をgpu
を含む名前に変更します。 -
.spec.selector.matchLabels["machine.openshift.io/cluster-api-machineset"]
を変更して新しい.metadata.name
に一致させます。 -
.spec.template.metadata.labels["machine.openshift.io/cluster-api-machineset"]
を変更して新しい.metadata.name
に一致させます。 -
.spec.template.spec.providerSpec.value.MachineType
をa2-highgpu-1g
に変更します。 machineType
の下に次の行を追加します: `"onHostMaintenance": "Terminate"。以下に例を示します。"machineType": "a2-highgpu-1g", "onHostMaintenance": "Terminate",
-
変更を確認するには、次のコマンドを実行して、元のコンピュート定義と新しい GPU 対応ノード定義の
diff
を実行します。$ oc get machineset/myclustername-2pt9p-worker-a -n openshift-machine-api -o json | diff ocp_4.14_machineset-a2-highgpu-1g.json -
出力例
15c15 < "name": "myclustername-2pt9p-worker-gpu-a", --- > "name": "myclustername-2pt9p-worker-a", 25c25 < "machine.openshift.io/cluster-api-machineset": "myclustername-2pt9p-worker-gpu-a" --- > "machine.openshift.io/cluster-api-machineset": "myclustername-2pt9p-worker-a" 34c34 < "machine.openshift.io/cluster-api-machineset": "myclustername-2pt9p-worker-gpu-a" --- > "machine.openshift.io/cluster-api-machineset": "myclustername-2pt9p-worker-a" 59,60c59 < "machineType": "a2-highgpu-1g", < "onHostMaintenance": "Terminate", --- > "machineType": "n2-standard-4",
次のコマンドを実行して、定義ファイルから GPU 対応のコンピュートマシンセットを作成します。
$ oc create -f ocp_4.14_machineset-a2-highgpu-1g.json
出力例
machineset.machine.openshift.io/myclustername-2pt9p-worker-gpu-a created
検証
次のコマンドを実行して、作成したマシンセットを表示します。
$ oc -n openshift-machine-api get machinesets | grep gpu
MachineSet レプリカ数は
1
に設定されているため、新しいMachine
オブジェクトが自動的に作成されます。出力例
myclustername-2pt9p-worker-gpu-a 1 1 1 1 5h24m
次のコマンドを実行して、マシンセットが作成した
Machine
オブジェクトを表示します。$ oc -n openshift-machine-api get machines | grep gpu
出力例
myclustername-2pt9p-worker-gpu-a-wxcr6 Running a2-highgpu-1g us-central1 us-central1-a 5h25m
ノードの namespace を指定する必要がないことに注意してください。ノード定義はクラスタースコープ指定されています。
2.5.10. Node Feature Discovery Operator のデプロイ
GPU 対応ノードを作成したら、スケジュールできるように GPU 対応ノードを検出する必要があります。これを行うには、Node Feature Discovery (NFD) Operator をインストールします。NFD Operator は、ノード内のハードウェアデバイス機能を識別します。OpenShift Container Platform で使用できるようにインフラストラクチャーノードのハードウェアリソースを識別してカタログ化するという一般的な問題を解決します。
手順
- OpenShift Container Platform コンソールの OperatorHub から Node Feature Discovery Operator をインストールします。
-
NFD Operator を OperatorHub にインストールした後、インストールされた Operator リストから Node Feature Discovery を選択し、Create instance を選択します。これにより、
openshift-nfd
namespace に、nfd-master
Pod とnfd-worker
Pod (各コンピュートノードに 1 つのnfd-worker
Pod) がインストールされます。 次のコマンドを実行して、Operator がインストールされ、実行されていることを確認します。
$ oc get pods -n openshift-nfd
出力例
NAME READY STATUS RESTARTS AGE nfd-controller-manager-8646fcbb65-x5qgk 2/2 Running 7 (8h ago) 1d
- コンソールでインストール済みの Operator へ移動し、Create Node Feature Discovery を選択します。
-
Create を選択して、NFD カスタムリソースをビルドします。これにより、OpenShift Container Platform ノードのハードウェアリソースをポーリングしてカタログ化する NFD Pod が
openshift-nfd
namespace に作成されます。
検証
ビルドが成功したら、次のコマンドを実行して、各ノードで NFD Pod が実行されていることを確認します。
$ oc get pods -n openshift-nfd
出力例
NAME READY STATUS RESTARTS AGE nfd-controller-manager-8646fcbb65-x5qgk 2/2 Running 7 (8h ago) 12d nfd-master-769656c4cb-w9vrv 1/1 Running 0 12d nfd-worker-qjxb2 1/1 Running 3 (3d14h ago) 12d nfd-worker-xtz9b 1/1 Running 5 (3d14h ago) 12d
NFD Operator は、ベンダー PCI ID を使用してノード内のハードウェアを識別します。NVIDIA は PCI ID
10de
を使用します。次のコマンドを実行して、NFD Operator によって検出された NVIDIA GPU を表示します。
$ oc describe node ip-10-0-132-138.us-east-2.compute.internal | egrep 'Roles|pci'
出力例
Roles: worker feature.node.kubernetes.io/pci-1013.present=true feature.node.kubernetes.io/pci-10de.present=true feature.node.kubernetes.io/pci-1d0f.present=true
GPU 対応ノードのノード機能リストに
10de
が表示されます。これは、NFD Operator が GPU 対応の MachineSet からノードを正しく識別したことを意味します。