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

Container Service for Kubernetes:ノードスケーリングの概要

最終更新日:Nov 22, 2025

クラスターの容量計画がアプリケーション Pod のスケジューリング要件を満たせない場合、ノードスケーリング機能を使用してノードリソースを自動的にスケーリングし、スケジューリング容量を増やすことができます。ACK は、ノードの自動スケーリングノードのインスタントスケーリングという 2 つの弾性スケーリングソリューションを提供します。ノードのインスタントスケーリングは、ノードの自動スケーリングよりも高速なスケーリング、高い配信効率、そして低い導入障壁を提供します。

開始する前に

この概要は、ACK が提供するノードスケーリングソリューションを理解し、ノードスケーリング機能を有効にする前に、ビジネスニーズに最も適したものを選択するのに役立ちます。

このトピックを読む前に、Kubernetes の公式ドキュメントを読んで、手動スケーリング、自動スケーリング、水平スケーリング、垂直スケーリングなどのスケーリングの概念に慣れておくことをお勧めします。

仕組み

Kubernetes では、ノードスケーリングは使用量のしきい値に基づく従来のモデルとは異なる動作をします。この違いを理解することは、従来のデータセンターや他のオーケストレーションシステムから Kubernetes クラスターに移行する際に重要です。

従来の弾性スケーリングモデルは使用量に基づいています。たとえば、クラスター内のノードの CPU とメモリ使用量が特定のしきい値を超えると、システムは新しいノードを追加してスケールアウトします。しかし、このモデルには以下の問題があります。

しきい値はどのように選択され、評価されますか?

クラスター内では、一部のホットスポットノードの使用率が高く、他のノードの使用率が低い場合があります。

  • 弾性スケーリングがクラスター全体のリソース使用率の平均によって決定される場合、ホットスポットノードの高い使用率は平均化されてしまいます。これにより、ホットスポットノードのスケーリングが遅延します。

  • 弾性スケーリングが最も高いノード使用率によって決定される場合、不要なスケールアウトによるリソースの無駄遣いにつながり、クラスター全体のサービスに影響を与える可能性があります。

インスタンスがスケールアウトされた後、プレッシャーはどのように緩和されますか?

Kubernetes クラスターでは、アプリケーションは異なるノード上の Pod としてデプロイされます。Pod のリソース使用率が高い場合、ノードまたはクラスターのスケールアウトをトリガーすることがあります。しかし、アプリケーションの Pod 数と Pod の対応する Limit は変更されません。したがって、元のノードへの負荷プレッシャーは新しく追加されたノードには転送されません。

インスタンスのスケールインはどのように評価され、実行されますか?

ノードのスケールインがリソース使用率によって決定される場合、多くのリソースをリクエストするが少量しか使用しない Pod はエビクションされる可能性があります。クラスターにこのような Pod が多数含まれている場合、それらは大量のスケジューリングリソースを占有し、他の Pod がスケジューリング不能になる原因となります。

これらの問題に対処するため、ACK は 2 層の弾性モデルを使用します。ノードスケーリング (リソースレイヤー) とワークロードスケーリング (スケジューリングレイヤー) です。たとえば、ノードスケーリング機能は、リソース使用量に基づいて、スケジューリング単位であるアプリケーションレプリカの変更をトリガーします。以下のセクションで技術的な詳細を説明します。

ノードが表示されているかを確認するには?

ノードスケーリングは、スケジューリングに失敗した Pod を監視し、スケールアウトをトリガーするかどうかを決定します。リソース不足のために Pod のスケジューリングが失敗した場合、ノードスケーリングはスケジューリングシミュレーションを実行します。シミュレーションでは、どの自動スケーリングが有効なノードプールが、保留中の Pod に必要なノードリソースを提供できるかを計算します。適切なノードプールが見つかった場合、対応するノードがスケールアウトされます。

説明

スケジューリングシミュレーション中、自動スケーリングが有効なノードプールは抽象ノードとして扱われます。ノードプールに設定されたインスタンスタイプが、抽象ノードの CPU、メモリ、または GPU 容量を決定します。設定されたラベルと Taint も抽象ノードのラベルと Taint になります。シミュレーションスケジューラは、この抽象ノードをスケジューリング評価に含めます。スケジューリング条件が満たされると、シミュレーションスケジューラは必要なノード数を計算し、ノードプールのスケールアウトをトリガーします。

ノードのスケールインはどのように評価されますか?

ノードスケーリングは、自動スケーリングが有効なノードプール内のノードのみをスケールインします。静的なノードは管理できません。各ノードは個別にスケールインが評価されます。ノードのリソース使用率が設定されたしきい値を下回ると、スケールイン評価がトリガーされます。この時点で、ノードスケーリングはノード上のワークロードをエビクションするシミュレーションを行い、ノードが安全にドレインできるかどうかを判断します。kube-system 名前空間内の非 DaemonSet Pod や Pod Disruption Budget (PDB) によって保護されている Pod など、特定の Pod が存在すると、ノードのドレインが妨げられます。ノードがドレインできる場合、その Pod は他のノードにエビクションされ、その後ノードは削除されます。

複数の自動スケーリングが有効なノードプールから、どのようにノードプールが選択されますか?

異なる自動スケーリングが有効なノードプールから選択することは、異なる抽象ノードから選択することと同じです。Pod のスケジューリングポリシーと同様に、スコアリングメカニズムを使用してノードプールが選択されます。弾性スケーリングコンポーネントは、まず Pod のスケジューリング要件に一致するノードプールをフィルターし、次に affinity などのアフィニティポリシーに基づいてさらに選択を行います。

前述のポリシーに基づいて適切なノードプールが選択できない場合、ノードの自動スケーリングはデフォルトで least-waste ポリシーに基づいてノードプールを選択します。least-waste ポリシーの核心は、シミュレートされたスケールアウト後に未使用のリソースが最も少なくなるオプションを見つけることです。

説明

自動スケーリングが有効な GPU ノードプールと CPU ノードプールの両方がスケールアウト可能な場合、デフォルトでは CPU ノードプールが優先されます。

デフォルトでは、ノードのインスタントスケーリングは在庫の可用性とコストを包括的に評価します。複数の実行可能なスケールアウトオプションの中から、十分な在庫があり、コストが低いインスタンスタイプを優先的に選択します。

弾性スケーリングの成功率を向上させる方法

弾性スケーリングの成功率は、主に次の 2 つの要因に依存します。

  • スケジューリングポリシーは満たされていますか?

    自動スケーリングが有効なノードプールを設定した後、そのノードプールがサポートできる Pod スケジューリングポリシーの範囲を確認する必要があります。これを直接判断できない場合は、ノードプールのラベルをターゲットとする nodeSelector を使用して、スケーリング前のシミュレーションを実行できます。

  • 十分なリソース構成

    スケジューリングシミュレーションが成功すると、システムは自動スケーリングが有効なノードプールを選択してインスタンスをスケールアウトします。しかし、ノードプールに設定された ECS インスタンスタイプの在庫は、インスタンスが正常にスケールアウトできるかどうかに直接影響します。したがって、スケールアウトの成功率を向上させるために、複数のゾーンとさまざまなインスタンスタイプを設定することをお勧めします。

弾性スケーリングの速度を向上させる方法

  • 方法 1: swift モードを使用してスケールアウト速度を加速します。自動スケーリングが有効なノードプールが 1 回のスケールアウトと 1 回のスケールインサイクルを完了してウォームアップされると、ノードプールは swift スケーリングモードに入ることができます。詳細については、「ノードの自動スケーリングを有効にする」をご参照ください。

  • 方法 2: Alibaba Cloud Linux 3 に基づくカスタムイメージを使用して、IaaS レイヤーのリソース配信速度を最大 50% 向上させます。詳細については、「カスタムイメージで弾性スケーリングを最適化する」をご参照ください。

弾性スケーリングソリューション: ノードの自動スケーリングノードのインスタントスケーリング

ノードスケーリングは、リソースレイヤーでの弾性スケーリング機能です。クラスターの容量がアプリケーション Pod のスケジューリング要件を満たせない場合に、ノードリソースを自動的にスケーリングしてスケジューリング容量を増やします。ACK は 2 つのノードスケーリングソリューションを提供します。

はじめに

重要

ソリューション

弾性スケーリングコンポーネント

説明

ソリューション 1: ノードの自動スケーリング

cluster-autoscaler コンポーネント

ポーリングを使用してクラスターの状態を定期的に維持およびチェックし、スケールアウトまたはスケールインの要件を満たす条件を見つけ、クラスターノードを自動的にスケーリングします。

ソリューション 2: ノードのインスタントスケーリング

ノードのインスタントスケーリングコンポーネント

イベント駆動型のノードスケーリングコントローラーです。大規模クラスター (たとえば、自動スケーリングが有効なノードプールに 100 を超えるノードがある、またはそのようなノードプールが 20 以上ある) や連続したスケールアウトアクティビティなどのシナリオで、より優れた弾性リソース配信を保証します。スケーリング速度 (最初の Pod スケジューリング失敗から成功したスケジューリングまで) は 45 秒で安定しており、成功率は 99% に達し、リソースの断片化は約 30% 削減されます。また、カスタムスケーリングポリシーに対する拡張性も向上しています。

ソリューションの比較

クラスター内のノードプールで自動弾性スケーリングが有効になっており、その [スケーリングモード][非スイフトモード] に設定されている場合、ノードのインスタントスケーリングはノード自動スケーリングコンポーネントのセマンティクスと動作に互換性があります。これにより、すべてのタイプのアプリケーションでシームレスな移行が可能になります。このセクションでは、ノードのインスタントスケーリングノードの自動スケーリングと比較した最適化された機能について説明します。

強化された機能

ノードの自動スケーリング

ノードのインスタントスケーリング

スケーリング速度と効率

単一のスケーリングアクティビティの場合、スケーリング速度は標準モードで約 60 秒、swift モードで約 50 秒です。

イベント駆動メカニズムを通じてスケーリング操作をトリガーし、Alibaba Cloud ContainerOS の機能を使用して弾性スケーリングを加速します。スケーリング速度は約 45±10 秒です。

スケーリング時間が 1 分に達すると、スケーリング速度はボトルネックに遭遇します。弾性スケーリング速度は、異なる規模 (複数のノードプール) や異なるシナリオ (連続スケーリング) でも大幅なジッターを示します。たとえば、ノードプールの数が 100 を超えると、スケーリング速度は 100 秒から 150 秒の範囲に低下します。

ノードプールと Pod の数が増えても、パフォーマンスは大幅に低下しません。これにより、弾性配信速度に対する要件が高いシナリオにより適しています。

ポーリングモデルを使用し、クラスター状態のメンテナンスへの依存によって制限されます。最小の弾性スケーリング感度は 5 秒です。

イベント駆動型であり、応答モデルを使用します。弾性スケーリング感度は 1 秒から 3 秒です。

リソース配信の確実性

クラウドリソースの在庫は頻繁に変化します。複雑なインスタンスタイプの組み合わせや在庫不足などの問題により、ノードの自動スケーリングの弾性スケーリング成功率は約 97% です。

自動在庫選択ポリシーをサポートしています。設定したフィルター条件と順序に基づいて、何千もの Alibaba Cloud インスタンスタイプの組み合わせから在庫切れのインスタンスタイプを除外し、スケールアウトに最も適したタイプを選択するか、在庫が不十分な場合は適格なタイプで補います。これにより、O&M エンジニアがインスタンスタイプを選択する負担が大幅に軽減され、配信成功率が 99% に向上します。

ノードプールで設定されたものと同じインスタンスタイプのスケールアウトをサポートします。複数のタイプが設定されている場合、スケールアウトの要件を満たす最小のインスタンスタイプを選択します。

異なるインスタンスタイプのスケールアウトをサポートします。

リソース配信が失敗した場合、定期的に再試行します。これはリアクティブなアプローチです。

リソース配信が失敗した場合、在庫アラート機能をサポートし、インスタンスタイプの組み合わせに関連する潜在的なリスクを事前に通知します。

使用と O&M のしきい値

ノードの自動スケーリングと比較して、ノードのインスタントスケーリングは導入の障壁が低くなっています。これは主に以下の側面に反映されています。

  • ノードプールの構成メンテナンス: ノードのインスタントスケーリングは、インスタンスのプロパティに基づいて複数のインスタンスタイプとゾーンからインスタンスを自動的に選択し、保留中の Pod に対応できます。対照的に、ノードの自動スケーリングでは、適切な Pod スケジューリングを確保するために、各ノードプールの構成を手動で維持する必要があります。したがって、Pod の構成が変更されると、対応するノードプールの構成も更新する必要があることがよくあります。

  • ノードの O&M: 開発者にとって、スケーリングプロセスに関連する例外は Pod イベントを通じて同期されます。彼らは Pod のライフサイクルを管理するだけで済みます。

  • 機能拡張: Descheduler を使用して弾性リソースを準備するなど、拡張メカニズムをサポートします。ノードのインスタントスケーリングは、リソース供給ポリシー、ノードライフサイクル管理、およびカスタム動作間の非侵入型フィルターの相互作用をサポートし、カスタム開発の可能性を広げます。

スケジューリングポリシー

ノードの自動スケーリングのすべてのスケジューリング機能に加えて、ノードのインスタントスケーリングは次の機能もサポートしています。

  • トポロジー: ゾーン間の高可用性要件を満たすためによく使用されます。

  • Pod Disruption Budgets: 変更中の安定性を確保するために、複数レプリカのアプリケーションで同時に自発的にエビクションできる Pod の数を制限します。

ノードのインスタントスケーリングは、Pod に基づいて最適な Bin Packing および PreBind ポリシー (カスタム機能) を選択することをサポートしており、これによりスケジューリングの断片化率を最大 30% 削減できます。

ノードのインスタントスケーリングの制限

ノードのインスタントスケーリングの制限を理解することは、ノードのインスタントスケーリングソリューションを評価する上で重要な部分です。

  • swift モードはサポートされていません。

  • ノードプールは、1 回のバッチで 180 を超えるノードをスケールアウトすることはできません。

  • クラスターレベルでのスケールインの無効化は現在サポートされていません。

    説明

    ノードレベルでスケールインを無効にする方法については、「特定のノードがノードのインスタントスケーリングによってスケールインされるのを防ぐにはどうすればよいですか?」をご参照ください。

  • ノードのインスタントスケーリングは、スポットインスタンスの在庫確認をサポートしていません。[課金方法] がスポットインスタンスに設定され、[スポットインスタンスの容量を補うためにオンデマンドインスタンスを使用する] が有効になっているノードプールでは、スポットインスタンスの在庫が十分であってもオンデマンドインスタンスがスケールアウトされる可能性があります。

ソリューション選択に関する提案

前述のソリューションの比較ノードのインスタントスケーリングの制限に基づいて、ニーズに適したソリューションを選択できます。ビジネスのスケーリング速度、リソース配信の確実性、および O&M コストに対する要件が比較的低く、ノードのインスタントスケーリングの制限を受け入れられない場合は、ノードの自動スケーリングで十分な場合があります。逆に、次のビジネス要件がある場合は、ノードのインスタントスケーリングが推奨されるソリューションです。

  • クラスターが大規模である。たとえば、自動スケーリングが有効なノードプールに 100 を超えるノードがある場合、またはそのようなノードプールが 20 以上ある場合、ノードの自動スケーリングのスケールアウト効率は、クラスターサイズが大きくなるにつれて大幅に低下します。対照的に、ノードのインスタントスケーリングのパフォーマンスの変動は少なくなります。

  • リソース配信速度 (弾性スケーリング速度) に対する要件が高い。単一のスケーリングシナリオでは、標準モードでのノードの自動スケーリングの弾性スケーリング速度は約 60 秒ですが、ノードのインスタントスケーリングでは約 45 秒です。

  • ビジネスワークロードのバッチは予測不可能であり、同じ弾性ノードプールに対して連続してスケールアウトを実行する必要が頻繁にあります。連続スケーリングモードでは、ノードの自動スケーリングのパフォーマンスは低下し、大幅なジッターを示します。対照的に、ノードのインスタントスケーリングは依然として約 45 秒のスケーリング速度を達成できます。

クォータと制限

  • 仮想プライベートクラウド (VPC) のルートテーブルには、最大 200 のカスタムルートを追加できます。このクォータを増やすには、Quota Center に移動してリクエストを送信してください。他のリソースのクォータとその増やし方の詳細については、「基盤となるクラウド依存関係のクォータ」をご参照ください。

  • 自動スケーリングが有効なノードプール内のノードの最大数を適切に設定することをお勧めします。VPC CIDR ブロックや vSwitch などの依存リソースとクォータが、指定されたノード数に対して十分であることを確認してください。そうしないと、スケールアウトアクティビティが失敗する可能性があります。ノードの最大数の設定方法の詳細については、「インスタンス数の設定」をご参照ください。ACK のネットワーク計画の詳細については、「ACK マネージドクラスターのネットワーク計画」をご参照ください。

  • ノードスケーリング機能はサブスクリプションノードをサポートしていません。新しい自動スケーリングが有効なノードプールを作成するときは、課金方法としてサブスクリプションを選択しないでください。既存のノードプールで自動スケーリングを有効にするには、ノードプールにサブスクリプションノードが含まれていないことを確認してください。

  • ノードスケーリング機能は現在 Sidecar Containers をサポートしていません。Sidecar Containers を使用するワークロードは、自動スケーリングが有効になっていないノードプールにデプロイしてください。

依存リソースのメンテナンス

EIP をノードにバインドする場合、ECS コンソールでノードスケーリングによってスケールアウトされた ECS ノードを直接削除しないでください。そうしないと、EIP を自動的にリリースできません。

次のステップ