3.10. マルチアーキテクチャーコンピュートマシンを含むクラスターの管理
複数のアーキテクチャーを使用するノードを含むクラスターを管理するには、クラスターを監視してワークロードを管理するときに、ノードアーキテクチャーを考慮する必要があります。そのため、クラスターリソースの要件と動作を設定するとき、またはマルチアーキテクチャークラスターでワークロードをスケジュールするときには、追加事項を考慮する必要があります。
3.10.1. マルチアーキテクチャーのコンピュートマシンを含むクラスターでワークロードをスケジュールする
異なるアーキテクチャーを使用するコンピュートノードを含むクラスターにワークロードをデプロイする場合は、基盤となるノードのアーキテクチャーに Pod アーキテクチャーを合わせる必要があります。ワークロードによっては、基盤となるノードのアーキテクチャーに応じて、特定のリソースに対する追加の設定が必要になる場合もあります。
Multiarch Tuning Operator を使用すると、マルチアーキテクチャーコンピュートマシンを含むクラスターで、アーキテクチャーを考慮したワークロードのスケジューリングを有効にできます。Multiarch Tuning Operator は、Pod が作成時にサポートできるアーキテクチャーに基づいて、Pod 仕様に追加のスケジューラー述語を実装します。
3.10.1.1. マルチアーキテクチャーノードのワークロードデプロイメントのサンプル
アーキテクチャーに基づいて適切なノードにワークロードをスケジュールする方法は、他のノード特性に基づいてスケジュールする方法と同じです。ワークロードのスケジュール方法を決定するときは、次の選択肢を考慮してください。
- nodeAffinityを使用して特定のアーキテクチャーのノードをスケジュールする
- イメージによってサポートされるアーキテクチャーを持つ一連のノード上でのみワークロードをスケジュールできるようにすることができ、Pod のテンプレート仕様で - spec.affinity.nodeAffinityフィールドを設定できます。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- サポートされるアーキテクチャーを指定します。有効な値には、amd64、arm64、または両方の値が含まれます。
 
- 特定のアーキテクチャーの各ノードに taint を付与する
- ノードに taint を付与することで、そのアーキテクチャーと互換性のないワークロードがそのノードによってスケジュールされるのを回避できます。クラスターで - MachineSetオブジェクトを使用している場合、- .spec.template.spec.taintsフィールドにパラメーターを追加すると、サポートされていないアーキテクチャーのノードでワークロードがスケジュールされるのを回避できます。- taint をノードに追加する前に、 - MachineSetオブジェクトをスケールダウンするか、既存の使用可能なマシンを削除する必要があります。詳細は、コンピュートマシンセットの変更 を参照してください。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 次のコマンドを実行して、特定のノードに taint を設定することもできます。 - oc adm taint nodes <node-name> multiarch.openshift.io/arch=arm64:NoSchedule - $ oc adm taint nodes <node-name> multiarch.openshift.io/arch=arm64:NoSchedule- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- namespace にデフォルトの toleration を作成する
- ノードまたはマシンセットに taint を付与すると、スケジュールできるワークロードが、その taint を許容するワークロードだけになります。次のコマンドを実行すると、namespace にアノテーションを付けて、すべてのワークロードに同じデフォルトの toleration を適用できます。 - oc annotate namespace my-namespace \ 'scheduler.alpha.kubernetes.io/defaultTolerations'='[{"operator": "Exists", "effect": "NoSchedule", "key": "multiarch.openshift.io/arch"}]'- $ oc annotate namespace my-namespace \ 'scheduler.alpha.kubernetes.io/defaultTolerations'='[{"operator": "Exists", "effect": "NoSchedule", "key": "multiarch.openshift.io/arch"}]'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- ワークロードでアーキテクチャーの taint を許容する
- ノードまたはマシンセットに taint を付与すると、スケジュールできるワークロードが、その taint を許容するワークロードだけになります。 - tolerationを使用してワークロードを設定すると、特定のアーキテクチャー taint を持つノードでワークロードをスケジュールできます。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - このサンプルのデプロイメントは、 - multiarch.openshift.io/arch=arm64が指定されているノードおよびマシンセットでスケジュールできます。
- ノードアフィニティーを taint と toleration とともに使用する
- Pod をスケジュールするためのノードセットがスケジューラーによって計算されるとき、そのノードセットは toleration によって拡張される一方で、ノードアフィニティーによって制限されます。特定のアーキテクチャーを持つノードに taint を設定する場合は、そこにスケジュールするワークロードに toleration を追加する必要もあります。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
3.10.2. Red Hat Enterprise Linux CoreOS (RHCOS) カーネルでの 64k ページの有効化
クラスター内の 64 ビット ARM コンピュートマシン上の Red Hat Enterprise Linux CoreOS (RHCOS) カーネルで 64k メモリーページを有効にすることができます。64k ページサイズのカーネル仕様は、大規模な GPU または高メモリーのワークロードに使用できます。これは、マシン設定プールを使用してカーネルを更新する Machine Config Operator (MCO) を使用して行われます。64k ページサイズを有効にするには、ARM64 専用のマシン設定プールをカーネルで有効にする必要があります。
64k ページの使用は、64 ビット ARM マシンにインストールされた 64 ビット ARM アーキテクチャーのコンピュートノードまたはクラスターに限定されます。64 ビット x86 マシンを使用してマシン設定プールに 64k ページのカーネルを設定すると、マシン設定プールと MCO がデグレード状態になります。
前提条件
- 
							OpenShift CLI (oc) がインストールされている。
- サポート対象のいずれかのプラットフォームで、異なるアーキテクチャーのコンピュートノードを含むクラスターを作成している。
手順
- 64k ページサイズのカーネルを実行するノードにラベルを付けます。 - oc label node <node_name> <label> - $ oc label node <node_name> <label>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - コマンドの例 - oc label node worker-arm64-01 node-role.kubernetes.io/worker-64k-pages= - $ oc label node worker-arm64-01 node-role.kubernetes.io/worker-64k-pages=- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- ARM64 アーキテクチャーを使用するワーカーロールと - worker-64k-pagesロールを含むマシン設定プールを作成します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- コンピュートノード上にマシン設定を作成し、 - 64k-pagesパラメーターを使用して- 64k-pagesを有効にします。- oc create -f <filename>.yaml - $ oc create -f <filename>.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - MachineConfig の例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注記- 64k-pagesタイプは、64 ビット ARM アーキテクチャーベースのコンピュートノードでのみサポートされます。- realtimeタイプは、64 ビット x86 アーキテクチャーベースのコンピュートノードでのみサポートされます。
検証
- 新しい - worker-64k-pagesマシン設定プールを表示するには、次のコマンドを実行します。- oc get mcp - $ oc get mcp- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-9d55ac9a91127c36314e1efe7d77fbf8 True False False 3 3 3 0 361d worker rendered-worker-e7b61751c4a5b7ff995d64b967c421ff True False False 7 7 7 0 361d worker-64k-pages rendered-worker-64k-pages-e7b61751c4a5b7ff995d64b967c421ff True False False 2 2 2 0 35m - NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-9d55ac9a91127c36314e1efe7d77fbf8 True False False 3 3 3 0 361d worker rendered-worker-e7b61751c4a5b7ff995d64b967c421ff True False False 7 7 7 0 361d worker-64k-pages rendered-worker-64k-pages-e7b61751c4a5b7ff995d64b967c421ff True False False 2 2 2 0 35m- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
3.10.3. マルチアーキテクチャーコンピュートマシンのイメージストリームにマニフェストリストをインポートする
					マルチアーキテクチャーコンピュートマシンを持つ OpenShift Container Platform 4.18 クラスターでは、クラスター内のイメージストリームはマニフェストリストを自動的にインポートしません。マニフェストリストをインポートするには、デフォルトの importMode オプションを PreserveOriginal オプションに手動で変更する必要があります。
				
前提条件
- 
							OpenShift Container Platform CLI (oc) をインストールしている。
手順
- 次のコマンド例は、 - ImageStreamcli-artifacts にパッチを適用して、- cli-artifacts:latestイメージストリームタグがマニフェストリストとしてインポートされるようにする方法を示しています。- oc patch is/cli-artifacts -n openshift -p '{"spec":{"tags":[{"name":"latest","importPolicy":{"importMode":"PreserveOriginal"}}]}}'- $ oc patch is/cli-artifacts -n openshift -p '{"spec":{"tags":[{"name":"latest","importPolicy":{"importMode":"PreserveOriginal"}}]}}'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
検証
- イメージストリームタグを調べて、マニフェストリストが正しくインポートされたことを確認できます。次のコマンドは、特定のタグの個々のアーキテクチャーマニフェストを一覧表示します。 - oc get istag cli-artifacts:latest -n openshift -oyaml - $ oc get istag cli-artifacts:latest -n openshift -oyaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - dockerImageManifestsオブジェクトが存在する場合、マニフェストリストのインポートは成功しています。- dockerImageManifestsオブジェクトの出力例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow