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

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

最終更新日:Sep 02, 2026

デフォルトでは、ACK はすべてのワークロードを x86 ワーカーノードにスケジューリングします。ARM ノードと非 ARM ノードの両方を含む混合クラスターでは、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 クラスターまたはノードプールの作成

クラスター作成時に ARM ノードを追加するか、既存のクラスターに ARM ノードプールを追加します。

クラスター作成時

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

説明

ECS の各リージョンで利用可能なインスタンスタイプにアクセスして、リージョン別のインスタンスの利用可能性を確認してください。

既存のクラスター内

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

説明

ECS の各リージョンで利用可能なインスタンスタイプにアクセスして、リージョン別のインスタンスの利用可能性を確認してください。

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

混合アーキテクチャクラスターでは、ARM 専用アプリケーションを ARM ノードにスケジューリングして、互換性のないノードでの Pod の障害を防ぎます。すべての ARM ノードには kubernetes.io/arch=arm64 という label が付いています。nodeSelector または nodeAffinity を使用してそれらを指定します。

nodeSelector

Pod の spec に以下の nodeSelector を追加します。これにより、kubernetes.io/arch: arm64 という label が付いたノードが対象になります。これは ACK クラスター内のすべての ARM ノードに適用されます。

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

ステートレスアプリケーションを ARM ノードにデプロイするための YAML の例:

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

nodeAffinity を使用して、Pod を ARM ノードのみにスケジューリングします。以下のルールは、kubernetes.io/arch=arm64 という label が付いたノードを対象とします。

このルールにより、スケジューラーは自動的に kubernetes.io/arch=arm64:NoSchedule Taint に対する Toleration を追加します。

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

ステートレスアプリケーションを ARM ノードにデプロイするための YAML の例:

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 ノードにスケジューリングし、ARM ノードが利用可能な場合でも x86 ノードのリソースを待機し続けます。マルチアーキテクチャイメージの場合は、両方のアーキテクチャを活用するためにスケジューリングの優先順位を設定します。

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

      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 をサポートしていません。

関連情報