すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ARM ノードプールの作成と ARM ノードへのワークロードのスケジューリング

最終更新日:Jun 23, 2026

ご利用のクラスターに ARM ノードと x86 ノードの両方が含まれている場合、Kubernetes のネイティブなスケジューリング機能を使用して、ARM 専用ワークロードを ARM ノードにスケジューリングしたり、マルチアーキテクチャのワークロードを優先的に ARM ノードにスケジューリングしたりできます。

前提条件

  • Alibaba Cloud Linux 3 上で Kubernetes 1.20 以降を実行する ACK マネージドクラスター。詳細については、「ACK マネージドクラスターの作成」および「クラスターのアップグレード」をご参照ください。

    説明
    • コアコンポーネント では、コアコンポーネントボリュームネットワーク のコンポーネントのみが ARM ノードプールでサポートされています。

    • マーケットプレイスのコンポーネントは ARM ノードプールではサポートされていません。

  • kube-scheduler コンポーネントがインストールされていること。詳細については、「コンポーネントの管理」をご参照ください。

注意事項

ご利用の ACK クラスターに ARM ノードと x86 ノードの両方が含まれている場合は、ARM ノードに kubernetes.io/arch=arm64:NoSchedule Taint を追加してください。これにより、ARM アーキテクチャをサポートしないアプリケーションやコンポーネントが誤って ARM ノードにスケジューリングされるのを防ぎます。ご利用のクラスターが Kubernetes v1.24 より前のバージョンを実行している場合、nodeSelector または nodeAffinity を使用してアプリケーションを ARM ノードにスケジューリングする際には、kubernetes.io/arch=arm64:NoSchedule Taint に対する Toleration も宣言する必要があります。これを行うには、kubernetes.io/arch=arm64:NoSchedule Taint に対応する tolerations キーを追加します。Kubernetes v1.24 以降を実行するクラスターの場合、スケジューラは ARM ノード上の kubernetes.io/arch=arm64:NoSchedule Taint を自動的に認識するため、toleration は不要です。

課金

ARM アーキテクチャを使用する ECS インスタンスタイプとその料金の詳細については、次のトピックをご参照ください:

ARM クラスターまたはノードプールの作成

新しい ACK クラスターを作成する際に ARM ノードを追加するか、既存のクラスターに新しい ARM ノードプールを追加することができます。

クラスター作成時

クラスター作成時にノードプールを設定する際、インスタンスタイプ セクションで アーキテクチャARM に設定します。次に、g8m 汎用インスタンスファミリーからインスタンスタイプを選択し、他のパラメーターを設定してクラスターを作成します。クラスターの作成方法の詳細については、「ACK マネージドクラスターの作成」をご参照ください。image.png

説明

各リージョンで利用可能な ECS インスタンスタイプ」に移動して、リージョンごとのインスタンスの可用性を確認してください。

既存クラスター内

ノードプールを作成する際、インスタンスタイプ セクションで アーキテクチャARM に設定します。次に、インスタンスタイプを選択し、他のパラメーターを設定してノードプールを作成します。ノードプールの作成方法の詳細については、「ノードプールの作成と管理」をご参照ください。

説明

各リージョンで利用可能な ECS インスタンスタイプ」に移動して、リージョンごとのインスタンスの可用性を確認してください。

ARM 専用ワークロードの ARM ノードへのスケジューリング

ご利用のクラスターに ARM ノードと x86 ノードの両方が含まれている場合、ARM アーキテクチャのみをサポートするアプリケーションが ARM ノードにスケジューリングされるようにする必要があります。これにより、互換性のないノードで Pod の起動が失敗するのを防ぎます。デフォルトでは、すべての ARM ノードに kubernetes.io/arch=arm64 ラベルが付与されています。nodeSelector または nodeAffinity を使用して、アプリケーションを ARM ノードにデプロイできます。

nodeSelector

Pod を ARM ノードにスケジュールするには、Pod の spec に次の nodeSelector を追加します。これにより、ワークロードは、ACK クラスター内のすべての ARM ノードに存在する kubernetes.io/arch: arm64 ラベルを持つノードにのみスケジュールされます。

nodeSelector:
  kubernetes.io/arch: arm64 # ARM ノードを指定します。

次のサンプル YAML を使用して、ステートレスアプリケーションを ARM ノードにデプロイできます。

YAML の例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: only-arm
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeSelector:
        kubernetes.io/arch: arm64 # ARM ノードを指定します。
      containers:
      - name: nginx
        image: nginx

nodeAffinity

ノードアフィニティを使用して、Pod を ARM ノードにスケジューリングできます。次のルールは、Pod を kubernetes.io/arch=arm64 ラベルを持つノードにのみスケジューリングします。

このアフィニティルールを使用すると、スケジューラは kubernetes.io/arch=arm64:NoSchedule Taint に対する Toleration を自動的に追加します。

affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/arch
          operator: In
          values:
          - arm64

次のサンプル YAML を使用して、ステートレスアプリケーションを ARM ノードにデプロイできます。

YAML の例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: only-arm
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - arm64
      containers:
      - name: nginx
        image: nginx

マルチアーキテクチャワークロードの ARM ノードへのスケジューリング

デフォルトでは、ACK はすべてのワークロードを x86 ノードにスケジューリングします。x86 ノードのリソースが不足している場合、Pod は利用可能な ARM ノードにスケジューリングされずに保留状態のままになります。アプリケーションが x86 と ARM の両方のアーキテクチャをサポートするマルチアーキテクチャイメージを使用している場合は、異なるアーキテクチャのノードを活用するようにスケジューリングプリファレンスを設定する必要があります。

たとえば、ノードアフィニティを設定して ARM または x86 ノードを優先し、優先ノードのリソースが不足している場合に他のアーキテクチャのノードにフォールバックするように設定できます。

      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - arm64

ARM ノードの優先

YAML の例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: arm-prefer
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
# ワークロードを優先的に ARM ノードにスケジューリングします。
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - arm64
      containers:
      - name: my-container
        image: nginx

x86 ノードの優先

YAML の例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: amd-prefer
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
# ワークロードを優先的に x86 ノードにスケジューリングします。
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - amd64
      containers:
      - name: my-container
        image: nginx

よくある質問

ARM ベースのプリエンプティブルインスタンスを使用できますか?

ARM ベースのプリエンプティブルインスタンスは利用可能です。使用方法の詳細については、「プリエンプティブルインスタンスの使用」をご参照ください。

ARM ノードの制限事項

現在、ARM アーキテクチャをサポートしているのは、次のカテゴリのアドオンのみです:

  • コアコンポーネント

  • ログとモニタリング

  • ストレージ

  • ネットワーク

マーケットプレイスのコンポーネントは ARM アーキテクチャをサポートしていません。

参考