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

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

最終更新日:Mar 07, 2026

Container Service for Kubernetes (ACK) クラスターでサービスをデプロイする際、Toleration とノードアフィニティを使用して、Elastic Compute Service (ECS) リソースのみを使用するか、Elastic Container Instance (ECI) リソースのみを使用するかを指定できます。また、ECS リソースが不足している場合に ECI リソースを自動的にリクエストすることもできます。これにより、さまざまなワークロードシナリオの弾力的なリソース要件を満たすスケジューリングポリシーを設定できます。

関連概念

  • Taint:ノードに設定されるルールで、特定の Pod がそのノードにスケジュールされるのを拒否します。

  • Toleration:Pod に適用されるプロパティで、スケジューリング中にノードの Taint を無視できるようにします。

  • ノードアフィニティ:特定のラベルを持つノードに Pod をスケジュールする Pod のプロパティです。これには 2 つのタイプがあります:

    • requiredDuringSchedulingIgnoredDuringExecution:ハード要件です。スケジューラが Pod をスケジュールするためには、このルールが満たされる必要があります。

    • preferredDuringSchedulingIgnoredDuringExecution:ソフト要件です。スケジューラはルールを満たすノードを見つけようとします。一致するノードが見つからない場合でも、スケジューラは Pod をスケジュールします。

詳細については、「Taints and Tolerations」および「ノードアフィニティ」をご参照ください。

前提条件

  • クラスターは ACK Managed Cluster Pro Edition であり、そのバージョンは v1.22 以降です。

  • v2.10.0 以降の ack-virtual-node コンポーネントがクラスターにデプロイされていること。ack-virtual-node コンポーネントのインストールとアップグレードの詳細については、「仮想ノード」をご参照ください。

  • クラスター内の kube-scheduler コンポーネントのバージョンが v5.9 以降であり、仮想ノードのスケジューリングポリシーが有効になっていること。

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

設定例

ACK クラスターにデプロイされた仮想ノードには、デフォルトの Taint virtual-kubelet.io/provider=alibabacloud:NoSchedule があります。この Taint は、ECI リソースが意図せず使用されるのを防ぎます。Pod を仮想ノードにスケジュールして ECI リソースを使用するには、この Taint に対する Toleration を設定する必要があります。

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

Toleration とノードアフィニティを組み合わせることで、優先ルールと必須ルールの両方を持つハイブリッドスケジューリングポリシーを実装できます。これにより、さまざまなサービスの異なるリソース要件を満たすことができます。

  • ECS の優先:ECS リソースの使用を優先します。クラスター内の ECS リソースが不足している場合は、ECI リソースを使用します。

  • ECI のみの使用:クラスター内の ECS リソースを使用せず、ECI リソースのみを使用します。

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

ECS の優先

Pod を仮想ノードにスケジュールするには、仮想ノードのデフォルトの 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 の下に複数の matchExpressions を指定した場合、いずれかの式が満たされれば (論理 OR)、Pod はノードにスケジュールされます。単一の matchExpressions 内に複数の式を指定した場合、すべての式が満たされた場合にのみ (論理 AND)、Pod はノードにスケジュールされます。

  • preferredDuringSchedulingIgnoredDuringExecution を使用して ECS スケジューリングを優先しても、ECS リソースが不足している場合にのみ Pod が ECI にスケジュールされるとは限りません。ECS リソースが利用可能な場合でも、Pod が ECI にスケジュールされることがあります。より厳格な要件については、requiredDuringSchedulingIgnoredDuringExecution を使用して、より具体的で必須のルールを設定してください。

特定のラベル、例えば label_1=key_1 を持つ ECS ノードへの Pod のデプロイを優先し、それらのノードのリソースが不足した場合に仮想ノードをエラスティックスケーリングに使用するには、次の YAML 設定を使用します。

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 のみの使用

Pod を仮想ノードにスケジュールするには、そのデフォルトの Taint に対する Toleration を追加し、ノードアフィニティを設定する必要があります。requiredDuringSchedulingIgnoredDuringExecution を使用して、Pod が 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 があります。この Taint に対する Toleration を設定しない場合、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