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

Container Service for Kubernetes:ECS と ECI 間のリソース割り当て

最終更新日:Jun 19, 2026

Toleration とノードアフィニティを使用して、Pod を Elastic Compute Service (ECS)、Elastic Container Instance (ECI)、またはその両方にスケジュールし、優先度に基づくフォールバックを実現します。

基本概念

  • Taint:ノード上のルールで、特定の Pod がそのノードにスケジュールされるのを防ぎます。

  • Toleration:Pod 側の設定で、ノードの Taint を無視できるようにします。

  • ノードアフィニティ:特定のラベルを持つノードに Pod を引き寄せるための Pod のプロパティです。次の 2 種類があります。

    • requiredDuringSchedulingIgnoredDuringExecution:必須要件です。Pod は、一致するノードにのみスケジュールされます。

    • preferredDuringSchedulingIgnoredDuringExecution:優先的な条件です。スケジューラはルールへの一致を試みますが、一致が見つからない場合は別の場所に Pod をスケジュールします。

Taints and TolerationsNode affinity をご参照ください。

前提条件

  • Kubernetes v1.22 以降を実行しているACK マネージド Pro クラスター

  • ack-virtual-node アドオンのバージョン 2.10.0 以降 (「仮想ノード」を参照)。

  • 仮想ノードのスケジューリングポリシーが有効になっている、バージョン 5.9 以降のkube-schedulerコンポーネント。

    アドオン管理 ページで、[Kube Scheduler] を見つけ、設定 をクリックし、仮想ノードスケジューリングの有効化 が選択されていることを確認します。

設定例

ACK クラスターの仮想ノードには、デフォルトで Taint virtual-kubelet.io/provider=alibabacloud:NoSchedule が設定されています。仮想ノード (ECI) に Pod をスケジュールするには、この Taint に対する Toleration を追加する必要があります。

例:
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule

Toleration とノードアフィニティを組み合わせて、さまざまなリソース要件に対応するスケジューリングポリシーを作成できます。

  • ECS の優先:デフォルトで ECS を使用し、ECS のキャパシティが不足している場合は ECI にフォールバックします。

  • ECI のみの使用:ECI リソースのみを使用します。

  • ECS のみの使用:既存の ECS リソースのみを使用します。

ECS の優先

デフォルトの Taint に対する Toleration を追加し、preferredDuringSchedulingIgnoredDuringExecution を使用して、type: virtual-kubelet ラベルを持たないノード (ECS ノード) を優先します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ecs-prefer
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: type
                operator: NotIn
                values:
                - virtual-kubelet
      containers:
      - name: my-container
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
説明

ノードアフィニティについて:

  • 複数の nodeSelectorTerms は OR で結合されます。いずれかの matchExpressions が一致すると、ポッドがスケジュールされます。1 つの matchExpressions 内の複数の式は AND で結合されます。すべての式が一致する必要があります。

  • preferredDuringSchedulingIgnoredDuringExecution は ECI のみへのフォールバックを保証するものではありません。ECS のキャパシティが十分な場合でも、Pod が ECI に配置される可能性があります。より厳密に制御するには、requiredDuringSchedulingIgnoredDuringExecution と組み合わせてください。

次の YAML は、特定のラベル (例:label_1=key_1) を持つ ECS ノードを優先し、キャパシティが必要な場合は仮想ノードにフォールバックします。

YAML の詳細を表示

apiVersion: apps/v1
kind: Deployment
metadata:
  name: some-ecs-prefer
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule
      affinity:
        nodeAffinity:
    # Pod は、label_1:key_1 または type:virtual-kubelet ラベルを持つノードにスケジュールされる必要があります。
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: label_1
                operator: In
                values:
                - key_1
            - matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
    # Pod は優先的に label_1:key_1 ラベルを持つノードにスケジュールされ、次に type:virtual-kubelet ラベルを持つノードにスケジュールされます。
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            preference:
              matchExpressions:
              - key: label_1
                operator: In
                values:
                - key_1
          - weight: 1
            preference:
              matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
      containers:
      - name: my-container
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

ECI のみの使用

デフォルトの仮想ノード Taint に対する Toleration を追加し、requiredDuringSchedulingIgnoredDuringExecution を使用して type: virtual-kubelet ラベルを持つノードを必須とします。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: eci-only
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
      containers:
      - name: my-container
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            

ECS のみの使用

デフォルトでは、仮想ノードには Taint があるため、Pod は ECS ノードにのみスケジュールされます。追加の設定は不要です。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ecs-only
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6