5.16.2. マルチアーキテクチャーのコンピュートマシンと Operator ワークロードのノードアフィニティールールについて


Operator ワークロードがマルチアーキテクチャーのコンピュートマシン上で実行できるようにするには、ノードアフィニティールールを設定する必要があります。ノードアフィニティーは、Pod の配置を定義するためにスケジューラーによって使用される一連のルールです。ノードアフィニティールールを設定すると、互換性のあるアーキテクチャーでマシンを計算するように Operator のワークロードがスケジュールされるようになります。

Operator が特定のアーキテクチャーでパフォーマンスが向上する場合は、優先ノードアフィニティールールを設定して、指定されたアーキテクチャーを持つマシンに Pod をスケジュールできます。

詳細は、「マルチアーキテクチャーのコンピュートマシンを使用したクラスターについて」および「ノードアフィニティールールを使用したノード上の Pod 配置の制御」を参照してください。

Operator でマルチアーキテクチャーのコンピュートマシンをサポートする場合は、Operator に必要なノードアフィニティールールを定義する必要があります。

前提条件

  • Operator SDK 1.31.0 で作成または保守されている Operator プロジェクト。
  • Operator がサポートするプラットフォームを定義するマニフェストリスト。

手順

  1. Operator プロジェクトで、Pod 仕様および Pod テンプレート仕様オブジェクトを定義する Kubernetes マニフェストを検索します。

    重要

    オブジェクト型名は YAML ファイルで宣言されていないため、Kubernetes マニフェストで必須の containers フィールドを探してください。Pod 仕様オブジェクトと Pod テンプレート仕様オブジェクトの両方を指定する場合は、containers フィールドが必要です。

    PodDeploymentDaemonSetStatefulSet などのオブジェクトを含む、Pod 仕様または Pod テンプレート仕様を定義するすべての Kubernetes マニフェストにノードアフィニティールールを設定する必要があります。

    Kubernetes マニフェストの例

    apiVersion: v1
    kind: Pod
    metadata:
      name: s1
    spec:
      containers:
        - name: <container_name>
          image: docker.io/<org>/<image_name>

  2. 次の例のように、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/arch 
    4
    
                operator: In
                values:
                - amd64
                - arm64
                - ppc64le
                - s390x
              - key: kubernetes.io/os 
    5
    
                operator: In
                values:
                    - linux

    1
    required (必須) ルールを定義します。
    2
    nodeAffinity タイプに関連付けられた複数の nodeSelectorTerms を指定する場合、nodeSelectorTerms のいずれかが満たされている場合に Pod をノードにスケジュールすることができます。
    3
    nodeSelectorTerms に関連付けられた複数の matchExpressions を指定する場合、すべての matchExpressions が満たされている場合にのみ Pod をノードにスケジュールすることができます。
    4
    マニフェストリストで定義されているアーキテクチャーを指定します。
    5
    マニフェストリストで定義されているオペレーティングシステムを指定します。
  3. 動的に作成されたワークロードを使用する 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 がスケジュールされているアーキテクチャーのマニフェストがマニフェストリストに含まれていない場合、またはノードアフィニティー条件が間違った値に設定されている場合に発生します。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る