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

Container Service for Kubernetes:ECSインスタンスとエラスティックコンテナインスタンスに基づくリソース割り当ての設定

最終更新日:Nov 14, 2024

Container Service for Kubernetes (ACK) クラスターにサービスをデプロイする際に、許容範囲とノードアフィニティを設定して、スケジューラがElastic Compute Service (ECS) インスタンスまたはelasticコンテナインスタンスのみを使用できるようにするか、ECSインスタンスが不足している場合にスケジューラがelasticコンテナインスタンスに自動的に申請できるようにすることができます。 さまざまなスケジューリングポリシーを設定して、さまざまなシナリオでリソースをスケーリングできます。

用語

  • Taint: デフォルトでは、virtual-kubelet.io/provider=alibabacloud:NoScheduleテイントがACKクラスター内のすべての仮想ノードに追加されます。

  • 許容範囲: 許容範囲はポッドに適用されます。 許容範囲により、スケジューラは、一致するテイントを有するノードにポッドをスケジュールできる。 ACKクラスターでは、次の許容範囲を設定して、virtual-kubelet.io/provider=alibabacloud:NoScheduleを許容する必要があります。 このようにして、ポッドをエラスティックコンテナインスタンスにスケジュールできます。

          tolerations:
          - key: virtual-kubelet.io/provider
            operator: Equal
            value: alibabacloud
            effect: NoSchedule
  • Node affinity: Node affinityは、ポッドを優先条件または厳しい要件としてノードのセットに引き付けるポッドのプロパティです。

前提条件

手順

次のセクションでは、次のポリシーに基づいてポッドをスケジュールするために、テイント、許容範囲、およびノードアフィニティを使用する方法を紹介します。

  • エラスティックコンテナインスタンスのみを使用: クラスター内のECSインスタンスは使用されません。

  • ECSインスタンスを使用することが望ましい: Elasticコンテナインスタンスは、クラスター内のECSインスタンスが不足している場合にのみ使用されます。

  • ECSインスタンスのみを使用: クラスター内のECSインスタンスのみが使用されます。

弾性コンテナインスタンスのみを使用する

クリックして詳細を表示

apiVersion: apps/v1
kind: Deployment
metadata:
  name: eci-only
spec:
  replicas: 3
  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: nginx
            

ECSインスタンスを使用することが望ましい

YAMLコンテンツの表示

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ecs-prefer
spec:
  replicas: 3
  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: nginx

ポッドスケジューリング中にlabel_1=key_1ラベルを持つノードで構成されるECSノードプールに優先順位を付け、ノードプールが十分なECSノードを提供できない場合にポッドを仮想ノードにスケジュールするようにスケジューラを設定する場合は、次のデプロイを使用します。

クリックして詳細を表示

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:
# Schedule pods only to nodes with the label_1:key_1 or type:virtual-kubelet label. 
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: label_1
                operator: In
                values:
                - key_1
            - matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
# Configure the scheduler to preferably schedule pods to nodes with the label_1:key_1 label. 
          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: nginx
説明
  • nodeSelectorTerms内の複数のノードアフィニティルール間の論理関係はORです。 ポッドがいずれかのルールに一致する場合、ポッドはノードにスケジュールされます。

  • nodeSelectorTermsのmatchExpressionsフィールド内の複数の式の論理関係はANDです。 ポッドがすべての式に一致する場合にのみ、ポッドがノードにスケジュールされます。

  • ノードアフィニティ設定のpreferredDuringSchedulingIgnoredDuringExecutionは、ECSインスタンスが不足している場合にのみポッドがエラスティックコンテナインスタンスにスケジュールされることを保証できません。 ECSインスタンスが十分にある場合でも、ポッドはエラスティックコンテナインスタンスにスケジュールされます。

ECSインスタンスのみ使用

高価なエラスティックコンテナインスタンスの使用を避けるために、デフォルトで次のテントが仮想ノードに追加されます。

      virtual-kubelet.io/provider=alibabacloud:NoSchedule

テイントを許容する許容範囲を設定しない場合、ポッドはECSインスタンスにのみスケジュールされます。

クリックして詳細を表示

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ecs-only
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx