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

Container Service for Kubernetes:ノードの自動スケーリングの有効化

最終更新日:Nov 21, 2024

ノードオートスケーリング機能を使用して、現在のクラスター内のリソースがポッドスケジューリングを実行できない場合に、Container Service for Kubernetes (ACK) を有効にしてノードを自動的にスケーリングできます。 ノードオートスケーリング機能は、小規模なスケーリングアクティビティや、毎回1つのスケーリングアクティビティしか必要としないワークロードに適しています。 たとえば、この機能は、自動スケーリングが有効なノードプールが20個未満のクラスター、または自動スケーリングが有効なノードプールが100個未満のクラスターに適しています。

あなたが始める前に

ノードの自動スケーリング機能をより適切に使用するには、[ノードのスケーリングの概要] トピックを読み、次の項目に注意することをお勧めします。

对ノードの自動スケーリングの仕組みとその機能

对ノード自動スケーリングのシナリオの使用

ノード自動スケーリング对使用に関する注意事項

前提条件

手順1: ノードの自動スケーリングを有効にする

ノードオートスケーリングを使用する前に、ACKコンソールのノードプールページでこの機能を有効にして設定する必要があります。 この機能を設定するときは、[Node Scaling Method][Auto Scaling] に設定します。

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[ノード] > [ノードプール] を選択します。

  3. ノードプール ページで、ノードスケーリング の横にある [有効化] をクリックします。

    1.jpg

  4. この機能を初めて使用する場合は、画面の指示に従ってAuto Scalingを有効にし、承認を完了します。 すでに承認を完了している場合は、この手順をスキップします。

    • ACKマネージドクラスターの場合、AliyunCSManagedAutoScalerRoleを使用してクラウドリソースにアクセスするようにACKを承認します。

    • ACK専用クラスターの場合、スケーリング管理にKubernetes WorkerRoleとAliyunCSManagedAutoScalerRolePolicyを使用するようにACKを承認します。 次の図は、Node Scalingを有効にしたときに承認できるコンソールページを示しています。

      image

  5. [ノードスケーリング設定] パネルで、[ノードスケーリング方法][自動スケーリング] に設定し、スケーリングパラメーターを設定して、[OK] をクリックします。

    パラメーター

    説明

    ノードPoolsScaleアウトポリシー

    • ランダムポリシー: 複数のスケーラブルなノードプールが存在する場合、ノードプールをランダムにスケールアウトします。

    • デフォルトポリシー: 複数のスケーラブルなノードプールが存在する場合、リソースの浪費が最も少ないノードプールをスケールアウトします。

    • 優先度ベースのポリシー: 複数のスケーラブルなノードプールが存在する場合、スケールアウトの優先度に基づいてノードプールをスケールアウトします。

      ノードプールのスケールアウト優先度は、ノードプールの作成後にのみ指定できます。

    スキャン間隔

    スケーリングのためにクラスターを評価する間隔を指定します。 デフォルト値: 60 秒。

    オートスケーラは、実際のスケジューリングステータスに基づいてスケールアウトアクティビティをトリガーします。 スケールイン条件を設定するだけで済みます。

    重要
    • Elastic Compute Service (ECS) ノード: オートスケーラーは、[スケールインしきい値][スケールインの下限]: 、および [クールダウン] の条件が満たされている場合にのみ、スケールインアクティビティを実行します。

    • GPU高速化ノード: オートスケーラーは、GPUスケールインしきい値[スケールインの下限]: 、および [クールダウン] の条件が満たされている場合にのみスケールインアクティビティを実行します。

    スケールインを許可

    スケールイン活動を許可するかどうかを指定します。 スケールイン構成は、このスイッチがオフになっても有効になりません。 作業は慎重に行ってください。

    スケールインしきい値

    ノードオートスケーリングが有効になっているノードプール内のノードのリソース容量に対するノードのリソース要求の比率を指定します。

    ノードのCPUおよびメモリ使用率が [スケールインしきい値] より低い場合にのみ、スケールインアクティビティが実行されます。

    GPUスケールインしきい値

    GPU高速化ノードのスケールインしきい値。

    ノードのCPU、メモリ、およびGPU使用率が [スケールインしきい値] より低い場合にのみ、スケールインアクティビティが実行されます。

    スケールインの遅延

    スケールインしきい値に達した時刻と、スケールインアクティビティ (ポッドの数を減らす) が開始される時刻の間隔。 単位は分です。 デフォルト値は 10 です。

    重要

    オートスケーラーは、スケールインしきい値が設定され、[スケールインの下限] 条件が満たされている場合にのみ、スケールインアクティビティを実行します。

    クールダウン

    オートスケーラがスケールアウトアクティビティを実行した後、オートスケーラは、スケールインアクティビティを実行できるようになる前に、クールダウン期間を待つ。

    オートスケーラは、クールダウン期間内にスケールインアクティビティを実行できませんが、ノードがスケールイン条件を満たしているかどうかを確認できます。 クールダウン期間が終了した後、ノードがスケールイン条件を満たし、[スケールインの遅延] パラメーターで指定された待機期間が終了すると、ノードは削除されます。 たとえば、Cooldownパラメーターは10分に設定され、Defer Scale-in Forパラメーターは5分に設定されます。 オートスケーラは、スケールアウト活動を実行した後、10分のクールダウン期間内にスケールイン活動を実行できません。 しかしながら、オートスケーラは、ノードがクールダウン期間内にスケールイン条件を満たすかどうかを依然としてチェックすることができる。 クールダウン期間が終了すると、スケールイン条件を満たすノードは5分後に削除されます。

    詳細なスケールイン設定の表示

    パラメーター

    説明

    ポッド終了タイムアウト

    スケールインアクティビティ中にノード上のポッドが終了するまで待機する最大時間。 単位は秒です。

    複製ポッドの最小数

    ノードのスケールダウン前に各ReplicaSetで許可されるポッドの最小数。

    DaemonSetポッドのドレイニングを有効にする

    有効にすると、スケールイン活動中にDaemonSetポッドが削除されます。

    Kube-System名前空間でポッドを使用してノードをスキップする

    有効にすると、kube-system名前空間でポッドが実行されているノードはスケールインアクティビティ中に無視されるため、これらのノードは影響を受けません。

    説明

    この機能は、ミラーポッドとDaemonSetポッドには適用されません。

手順2: 自動スケーリングが有効になっているノードプールを設定する

ノード自動スケーリング機能は、自動スケーリングが有効になっているノードプール内のノードのみをスケーリングします。 したがって、ノードの自動スケーリングを設定した後、自動スケーリングが有効になっているノードプールを少なくとも1つ設定する必要があります。 自動スケーリングが有効になっているノードプールを作成したり、既存のノードプールの自動スケーリングを有効にしたりできます。

次の表に、主要なパラメーターを示します。 次のセクションの「ノードプール」という用語は、自動スケーリングが有効になっているノードプールを指します。 詳細については、「ノードプールの作成」および「ノードプールの変更」をご参照ください。

パラメーター

説明

Auto Scaling

自動スケーリングを有効にするかどうかを指定します。 この機能は、リソース需要とスケーリングポリシーに基づいたコスト効率の高いコンピューティングリソースのスケーリングを提供します。 詳細については、「自動スケーリングの概要」をご参照ください。 この機能を有効にする前に、ノードプールのノードオートスケーリングを有効にする必要があります。 詳細については、「手順1: ノードの自動スケーリングの有効化」をご参照ください。

インスタンス関連のパラメーター

インスタンスタイプまたは属性に基づいて、ワーカーノードプールで使用されるECSインスタンスを選択します。 vCPU、メモリ、インスタンスファミリー、アーキテクチャなどの属性でECSインスタンスをフィルタリングできます。

ノードプールをスケールアウトすると、選択したインスタンスタイプのECSインスタンスが作成されます。 ノードプールのスケーリングポリシーは、スケールアウトアクティビティ中に新しいノードを作成するために使用されるインスタンスタイプを決定します。 複数のインスタンスタイプを選択して、ノードプールのスケールアウト操作の成功率を向上させます。

ノードプール内のノードのインスタンスタイプ。 インスタンスタイプを1つだけ選択した場合、ECSインスタンスストックの変動がスケーリング成功率に影響します。 スケーリングの成功率を上げるために、複数のインスタンスタイプを選択することを推奨します。

GPU高速化インスタンスのみを選択した場合は、オンデマンドで [GPU共有の有効化] を選択できます。 詳細については、「cGPUの概要」をご参照ください。

[インスタンス数]

クラスター内の既存のインスタンスを除く、ノードプール内のインスタンスの数。

デフォルトでは、インスタンスの最小数は 0 です。 1つ以上のインスタンスを指定した場合、システムはインスタンスをノードプールに追加します。 スケールアウトアクティビティがトリガーされると、ノードプール内のインスタンスが関連付けられたクラスターに追加されます。

オペレーティングシステム

自動スケーリングを有効にすると、Alibaba Cloud Linux、Windows、またはWindows Coreに基づいてイメージを選択できます。

WindowsまたはWindows Coreに基づいてイメージを選択すると、{ effect: 'NoSchedule', key: 'os', value: 'windows' } というテイントがノードプール内のノードに自動的に追加されます。

ノードラベル

ノードラベルは、スケールアウトアクティビティによってクラスターに追加されたノードに自動的に追加されます。

重要

自動スケーリングでは、ノードラベルとテイントがノードプールタグにマップされた後にのみ、ノードラベルとテイントを認識できます。 ノードプールは、限られた数のタグしか持つことができない。 したがって、自動スケーリングが有効になっているノードプールのECSタグ、テイント、およびノードラベルの総数を12未満に制限する必要があります。

[スケーリングポリシー]

  • 優先度: システムは、ノードプールに対して選択したvSwitchの優先度に基づいてノードプールをスケーリングします。 選択したvSwitchは、優先度の高い順に表示されます。 Auto ScalingがvSwitchのゾーンで最も優先度の高いECSインスタンスの作成に失敗した場合、Auto ScalingはvSwitchのゾーンでより優先度の低いECSインスタンスの作成を試みます。

  • コスト最適化: システムは、vCPU単価に基づいて昇順でインスタンスを作成します。 スケーリング設定で複数のプリエンプティブインスタンスタイプが指定されている場合、プリエンプティブインスタンスは優先的に作成されます。 在庫不足などの理由でプリエンプティブルインスタンスを作成できない場合、システムは従量課金インスタンスの作成を試みます。

    [課金方法][プリエンプティブルインスタンス] に設定されている場合、[補足プリエンプティブルインスタンスの有効化] パラメーターに加えて、次のパラメーターを設定できます。

    • 従量課金インスタンスの割合: ノードプール内の従量課金インスタンスの割合を指定します。 有効値: 0~100。

    • 追加の従量課金インスタンスの有効化: この機能を有効にすると、Auto Scalingは、単価が高すぎる、またはプリエンプティブルインスタンスが在庫切れなどの理由でプリエンプティブルインスタンスの作成に失敗した場合、スケーリング要件を満たす従量課金ECSインスタンスの作成を試みます。

  • 配布バランシング: 均等配布ポリシーは、複数のvSwitchを選択した場合にのみ有効になります。 このポリシーにより、ECSインスタンスがスケーリンググループのゾーン (vSwitch) に均等に分散されます。 在庫不足などの理由でECSインスタンスがゾーン全体に不均一に分散している場合は、リバランス操作を実行できます。

    重要

    ノードプールの作成後にノードプールのスケーリングポリシーを変更することはできません。

    [課金方法][プリエンプティブルインスタンス] に設定されている場合、[補足プリエンプティブルインスタンスの有効化] をオンにするかどうかを指定できます。 この機能が有効になった後、プリエンプティブルインスタンスが再利用されたことを示すシステムメッセージが受信されると、自動スケーリングが有効になっているノードプールは、再利用されたプリエンプティブルインスタンスを置き換える新しいインスタンスの作成を試みます。

スケーリングモード

[標準] または [迅速] を選択できます。

  • 標準: 自動スケーリングは、リソースリクエストと使用量に基づいてECSインスタンスを作成およびリリースすることで実装されます。

  • Swift: 自動スケーリングは、ECSインスタンスの作成、停止、起動によって実装されます。 このモードは、スケーリングアクティビティを高速化します。

    重要
    • スイフトモードのノードを再利用する必要がある場合、ノードは一時停止され、NotReady状態になります。 スケールアウトアクティビティがトリガーされると、ノードは [準備完了] 状態になります。 高速モードで中断されたインスタンスの起動に失敗した場合、システムはインスタンスをリリースしません。 インスタンスを手動でリリースする必要があります。

    • 高速モードのノードが再利用されると、そのノードにはディスク料金のみが課金されます。 コンピューティング料金はかかりません。 このルールは、ローカルディスクを使用するインスタンスタイプ (ecs.d1ne.2xlargeなど) には適用されません。 これにより、システムは、インベントリが十分な場合にECSインスタンスを迅速に起動できます。

テインツ

ノードにテイントを追加すると、ACKはノードへのポッドをスケジュールしなくなります。

自動スケーリングが有効になっているノードプールを作成したら、手順1: ノード自動スケーリングの有効化を参照し、必要に応じて優先度ベースのポリシーを選択します。 優先度の有効な値は、1から100までの整数である。

ステップ3: (オプション) ノードの自動スケーリングの確認

上記の設定が完了したら、ノードオートスケーリング機能を使用できます。 ノードプールには、自動スケーリングが有効で、cluster-autoscalerがクラスターにインストールされていることが表示されます。

ノードプールの自動スケーリングが有効になっている

[ノードプール] ページには、自動スケーリングが有効なノードプールが表示されます。

cluster-autoscalerがインストールされています

  1. 詳細ページの左側のナビゲーションウィンドウで、[ワークロード] > [デプロイ] を選択します。

  2. kube-system名前空間を選択します。 cluster-autoscalerコンポーネントが表示されます。

よくある質問

カテゴリ

サブカテゴリ

問題

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

スケールアウト動作

スケールイン動作

拡張サポート

cluster-autoscalerはCRDをサポートしていますか?

カスタムスケーリングの動作

ポッドを使用したスケーリングの制御

ノードを使用したスケーリングの制御

cluster-autoscaler関連