ACK マネージドクラスターおよびACK 専用クラスターの仮想ノードスケジューリング方法を比較し、お客様のスケジューリングシナリオに適したソリューションを選択します。
一般的な仮想ノードのスケジューリングシナリオ
-
Pod を仮想ノードにのみスケジューリングする。
-
ECS ノードを優先し、ECS リソースが不足している場合に仮想ノードにフォールバックする。
ACK マネージドクラスター (Basic Edition) では、最初のシナリオにはラベル alibabacloud.com/eci=true を使用します。2 番目のシナリオの場合は、ACK マネージドクラスター (Pro Edition) へのアップグレードが必要です。
ACK マネージドクラスター (Pro Edition) は、より高い信頼性、SLA 保証、および大容量により、2 番目のシナリオにより適しています。シームレスに移行することで、ACK マネージドクラスター (Basic Edition) から ACK マネージドクラスター (Pro Edition) にアップグレードできます。
注意事項
-
ラベル
alibabacloud.com/eci=trueは最優先され、以下のスケジューリング方法をオーバーライドします:-
nodeSelector、アフィニティとアンチアフィニティ、Pod トポロジースプレッド制約などの Kubernetes ネイティブのスケジューリングセマンティクス
-
ResourcePolicy
-
ElasticResource (アノテーション:
alibabacloud.com/burst-resource)
-
-
ElasticWorkload および ElasticResource (アノテーション:
alibabacloud.com/burst-resource) は、開発がアクティブでない状態のため、推奨されません。 -
virtual-kubelet-autoscaler コンポーネントはメンテナンスが終了しています。ご利用の ACK マネージドクラスター (Basic Edition) を ACK マネージドクラスター (Pro Edition) にアップグレードし、このコンポーネントをアンインストールしてノードリソースを解放してください。Kubernetes ネイティブのスケジューリングセマンティクスを使用して、ECI Pod のゾーン間でのスプレッドデプロイメントとアフィニティベースのスケジューリングを実装します。
-
動的にプロビジョニングされたディスクボリュームを使用する仮想ノード上の Pod では、
WaitForFirstConsumerタイプの StorageClass は、以下のスケジューリング方法ではサポートされていません:-
ラベル:
alibabacloud.com/eci=trueの使用。 -
nodeName で仮想ノードを指定する。
-
ソリューションの比較と選択に関する提案
比較表では以下の用語が使用されています:
-
優先度ベースのスケジューリング:クラスターに異なるタイプのノードがある場合、スケジューリングの優先度を設定します。たとえば、ECS ノードを優先し、ECS リソースが不足している場合に仮想ノードにフォールバックします。
優先度ベースのスケジューリングを使用しない場合、ノードタイプ間で優先度を割り当てることはできません。たとえば、ラベル
alibabacloud.com/eci=trueは、ECS を優先するフォールバックなしで、Pod を仮想ノードにのみスケジューリングします。 -
厳密なスケジューリングポリシー:異なるノードプールタイプのスケジューリングルールがハード制約であるかどうかを決定します。
-
厳密でないポリシーはソフト制約です。たとえば、ノードアフィニティの preferredDuringSchedulingIgnoredDuringExecution フィールドは ECS ノードを優先しますが、ノードスコアリングポリシーにより Pod が仮想ノードに配置される可能性があります。
-
厳密なポリシーはハード制約です。たとえば、ResourcePolicy は、十分なリソースが利用可能な場合に Pod が ECS ノードにスケジューリングされることを保証します。
-
ACK マネージドクラスター (Pro Edition)
|
スケジューリング方法 |
代表的なシナリオ |
優先度ベースのスケジューリング |
ECI Pod の優先的なスケールイン |
推奨 |
関連操作 |
|
|
ラベル: |
Pod を仮想ノードにのみスケジューリングします。特定の仮想ノードをターゲットにすることはできません。 |
非対応 |
該当なし |
推奨 |
||
|
Kubernetes ネイティブのスケジューリングセマンティクス |
nodeSelector |
Toleration とともに使用し、Pod を仮想ノードにのみスケジューリングし、特定の仮想ノードをターゲットにします。 |
非対応 |
該当なし |
推奨 |
|
|
アフィニティとアンチアフィニティ |
Taint、Toleration、NodeAffinity を使用して、Pod を ECI のみ、ECS のみ、または ECS を優先してスケジューリングします (例:ECS リソースが不足している場合に仮想ノードにフォールバックする)。 この方法は、ECI を最初にスケールインし、次に ECS をスケールインすることもサポートしています (そして、それのみをサポートします)。 |
対応 (厳密でないスケジューリングポリシー) |
対応 |
推奨 |
||
|
Pod トポロジースプレッド制約 |
高可用性とパフォーマンスのために、Pod をゾーン間に分散させます。 |
非対応 |
対応 |
推奨 |
||
|
ResourcePolicy 重要
v1.20 では、スケジューラは仮想ノードのスケジューリング不可チェックを無視します。v1.22 以降では、Taint チェックのみが無視されます。 v1.20 の動作を維持するには、スケジューラパラメーターで仮想ノードのスケジューリング機能を無効にします。 |
|
対応 (厳密なスケジューリングポリシー) |
対応 |
推奨 |
||
|
UnitedDeployment |
レプリカ数に基づいて Pod を ECS または仮想ノードにスケジューリングします。たとえば、10 レプリカ以下の場合はサブスクリプションの ECS を、11 から 20 レプリカの場合はプリエンプティブルインスタンスを、20 レプリカを超える場合は ECI を使用します。 |
対応 |
対応 |
推奨 |
||
|
Kubernetes ネイティブのスケジューリングセマンティクス |
nodeSelector |
Toleration とともに使用し、Pod を仮想ノードにのみスケジューリングし、特定の仮想ノードをターゲットにします。 |
非対応 |
対応 |
非推奨 ACK マネージドクラスター (Pro Edition) と比較して、ACK マネージドクラスター (Basic Edition) および ACK 専用クラスターの kube-scheduler は、スケジューリング中に基盤となるインベントリを認識できないため、Pod 作成の成功の確実性が低下します。 |
|
|
アフィニティとアンチアフィニティ |
Taint、Toleration、NodeAffinity を使用して、Pod を ECI のみ、ECS のみ、または ECS を優先してスケジューリングします (例:ECS リソースが不足している場合に仮想ノードにフォールバックする)。 |
対応 (厳密でないスケジューリングポリシー) |
対応 |
|||
|
Pod トポロジースプレッド制約 |
高可用性とパフォーマンスのために、Pod をゾーン間に分散させます。 |
非対応 |
対応 |
|||
|
ElasticWorkload (開発が停止している状態です。UnitedDeployment の使用を推奨します。) |
Deployment のレプリカをグループ化し、ECS ノードまたは仮想ノードにスケジューリングします。 |
対応 |
対応 |
非推奨 |
Elastic Workload を使用して弾性ワークロードの Pod を ECI にスケジューリングする (提供終了) |
|
|
ElasticResource (アノテーション: (開発が停止している状態です) |
2 つの弾性スケジューリングポリシーのみがサポートされています:
|
対応 |
対応 |
非推奨 |
||
|
virtual-kubelet-autoscaler コンポーネント (メンテナンスは終了しています) |
最初に Pod を ECS ノードにスケジューリングし、ECS ノードのリソースが不足している場合に Pod を仮想ノードにスケジューリングすることのみをサポートします。 |
対応 |
対応 |
非推奨 |
なし |
|