5.16.2. マルチアーキテクチャーのコンピュートマシンと Operator ワークロードのノードアフィニティールールについて
Operator ワークロードがマルチアーキテクチャーのコンピュートマシン上で実行できるようにするには、ノードアフィニティールールを設定する必要があります。ノードアフィニティーは、Pod の配置を定義するためにスケジューラーによって使用される一連のルールです。ノードアフィニティールールを設定すると、互換性のあるアーキテクチャーでマシンを計算するように Operator のワークロードがスケジュールされるようになります。
Operator が特定のアーキテクチャーでパフォーマンスが向上する場合は、優先ノードアフィニティールールを設定して、指定されたアーキテクチャーを持つマシンに Pod をスケジュールできます。
詳細は、「マルチアーキテクチャーのコンピュートマシンを使用したクラスターについて」および「ノードアフィニティールールを使用したノード上の Pod 配置の制御」を参照してください。
5.16.2.1. Operator プロジェクトのマルチアーキテクチャーコンピュートマシンをサポートするために必要なノードアフィニティールールを使用する リンクのコピーリンクがクリップボードにコピーされました!
Operator でマルチアーキテクチャーのコンピュートマシンをサポートする場合は、Operator に必要なノードアフィニティールールを定義する必要があります。
前提条件
- Operator SDK 1.31.0 で作成または保守されている Operator プロジェクト。
- Operator がサポートするプラットフォームを定義するマニフェストリスト。
手順
Operator プロジェクトで、Pod 仕様および Pod テンプレート仕様オブジェクトを定義する Kubernetes マニフェストを検索します。
重要オブジェクト型名は YAML ファイルで宣言されていないため、Kubernetes マニフェストで必須の
containersフィールドを探してください。Pod 仕様オブジェクトと Pod テンプレート仕様オブジェクトの両方を指定する場合は、containersフィールドが必要です。Pod、Deployment、DaemonSet、StatefulSetなどのオブジェクトを含む、Pod 仕様または Pod テンプレート仕様を定義するすべての Kubernetes マニフェストにノードアフィニティールールを設定する必要があります。Kubernetes マニフェストの例
apiVersion: v1 kind: Pod metadata: name: s1 spec: containers: - name: <container_name> image: docker.io/<org>/<image_name>次の例のように、Pod 仕様オブジェクトと Pod テンプレート仕様オブジェクトを定義する Kubernetes マニフェストに必要なノードアフィニティールールを設定します。
Kubernetes マニフェストの例
apiVersion: v1 kind: Pod metadata: name: s1 spec: containers: - name: <container_name> image: docker.io/<org>/<image_name> affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution:1 nodeSelectorTerms:2 - matchExpressions:3 - key: kubernetes.io/arch4 operator: In values: - amd64 - arm64 - ppc64le - s390x - key: kubernetes.io/os5 operator: In values: - linux- 1
- required (必須) ルールを定義します。
- 2
nodeAffinityタイプに関連付けられた複数のnodeSelectorTermsを指定する場合、nodeSelectorTermsのいずれかが満たされている場合に Pod をノードにスケジュールすることができます。- 3
nodeSelectorTermsに関連付けられた複数のmatchExpressionsを指定する場合、すべてのmatchExpressionsが満たされている場合にのみ Pod をノードにスケジュールすることができます。- 4
- マニフェストリストで定義されているアーキテクチャーを指定します。
- 5
- マニフェストリストで定義されているオペレーティングシステムを指定します。
動的に作成されたワークロードを使用する Go ベースの Operator プロジェクトでは、Operator のロジックに Pod 仕様および Pod テンプレート仕様オブジェクトが埋め込まれる場合があります。
プロジェクトで Operator のロジックに Pod 仕様または Pod テンプレート仕様オブジェクトが埋め込まれている場合は、次の例のように Operator のロジックを編集します。次の例は、Go API を使用して
PodSpecオブジェクトを更新する方法を示しています。Template: corev1.PodTemplateSpec{ ... Spec: corev1.PodSpec{ Affinity: &corev1.Affinity{ NodeAffinity: &corev1.NodeAffinity{ RequiredDuringSchedulingIgnoredDuringExecution: &corev1.NodeSelector{ NodeSelectorTerms: []corev1.NodeSelectorTerm{ { MatchExpressions: []corev1.NodeSelectorRequirement{ { Key: "kubernetes.io/arch", Operator: "In", Values: []string{"amd64","arm64","ppc64le","s390x"}, }, { Key: "kubernetes.io/os", Operator: "In", Values: []string{"linux"}, }, }, }, }, }, }, }, SecurityContext: &corev1.PodSecurityContext{ ... }, Containers: []corev1.Container{{ ... }}, },ここでは、以下のようになります。
RequiredDuringSchedulingIgnoredDuringExecution- required (必須) ルールを定義します。
NodeSelectorTerms-
nodeAffinityタイプに関連付けられた複数のnodeSelectorTermsを指定する場合、nodeSelectorTermsのいずれかが満たされている場合に Pod をノードにスケジュールすることができます。 MatchExpressions-
nodeSelectorTermsに関連付けられた複数のmatchExpressionsを指定する場合、すべてのmatchExpressionsが満たされている場合にのみ Pod をノードにスケジュールすることができます。 kubernetes.io/arch- マニフェストリストで定義されているアーキテクチャーを指定します。
kubernetes.io/os- マニフェストリストで定義されているオペレーティングシステムを指定します。
ノードアフィニティールールを設定せず、互換性のないアーキテクチャーを持つコンピュートマシンにコンテナーがスケジュールされている場合は、Pod が失敗し、次のいずれかのイベントがトリガーされます。
CrashLoopBackOff-
イメージマニフェストのエントリーポイントの実行が失敗し、
exec format errorメッセージがログに出力されると発生します。 ImagePullBackOff- Pod がスケジュールされているアーキテクチャーのマニフェストがマニフェストリストに含まれていない場合、またはノードアフィニティー条件が間違った値に設定されている場合に発生します。