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は、ポッドを優先条件または厳しい要件としてノードのセットに引き付けるポッドのプロパティです。
前提条件
ack-virtual-nodeコンポーネントはACK Proクラスターにインストールされています。 詳細については、「ACKクラスターでのElastic Container Instanceの使用」をご参照ください。
仮想ノードベースのポッドスケジューリングポリシーがACK Proクラスターに対して有効になっています。 詳細については、「ACKクラスターの仮想ノードベースのポッドスケジューリングポリシーの有効化」をご参照ください。
手順
次のセクションでは、次のポリシーに基づいてポッドをスケジュールするために、テイント、許容範囲、およびノードアフィニティを使用する方法を紹介します。
エラスティックコンテナインスタンスのみを使用: クラスター内のECSインスタンスは使用されません。
ECSインスタンスを使用することが望ましい: Elasticコンテナインスタンスは、クラスター内のECSインスタンスが不足している場合にのみ使用されます。
ECSインスタンスのみを使用: クラスター内のECSインスタンスのみが使用されます。
弾性コンテナインスタンスのみを使用する
ECSインスタンスを使用することが望ましい
ポッドスケジューリング中にlabel_1=key_1ラベルを持つノードで構成されるECSノードプールに優先順位を付け、ノードプールが十分なECSノードを提供できない場合にポッドを仮想ノードにスケジュールするようにスケジューラを設定する場合は、次のデプロイを使用します。
nodeSelectorTerms内の複数のノードアフィニティルール間の論理関係はORです。 ポッドがいずれかのルールに一致する場合、ポッドはノードにスケジュールされます。
nodeSelectorTermsのmatchExpressionsフィールド内の複数の式の論理関係はANDです。 ポッドがすべての式に一致する場合にのみ、ポッドがノードにスケジュールされます。
ノードアフィニティ設定のpreferredDuringSchedulingIgnoredDuringExecutionは、ECSインスタンスが不足している場合にのみポッドがエラスティックコンテナインスタンスにスケジュールされることを保証できません。 ECSインスタンスが十分にある場合でも、ポッドはエラスティックコンテナインスタンスにスケジュールされます。
ECSインスタンスのみ使用
高価なエラスティックコンテナインスタンスの使用を避けるために、デフォルトで次のテントが仮想ノードに追加されます。
virtual-kubelet.io/provider=alibabacloud:NoSchedule
テイントを許容する許容範囲を設定しない場合、ポッドはECSインスタンスにのみスケジュールされます。