クラスターが大規模な場合、クラスターでより高速なリソーススケーリングが必要な場合、または複数のインスタンスタイプとゾーン間でリソースを自動的にスケーリングする場合、ノードオートスケーリングが要件を満たさない場合があります。 このシナリオでは、ノードインスタントスケーリングを使用することを推奨します。 クラスターで自動スケーリングが有効になっているノードプールに100を超えるノードが含まれている場合、またはクラスター内の20を超えるノードプールで自動スケーリングが有効になっている場合、クラスターは大規模と見なされます。 ノードのインスタントスケーリング機能は、開発者の技術的なギャップを減らし、スケーリング効率を向上させ、O&Mの人員を削減します。
あなたが始める前に
ノードのインスタントスケーリング機能をより適切に使用するには、開始する前に [ノードのスケーリングの概要] を読み、次の項目に注意することをお勧めします。
ノードのインスタントスケーリングの仕組み
ノードインスタントスケーリングのの利点
ノードインスタントスケーリングのシナリオの使用
ノードのインスタントスケーリングに関する使用上の注意事項
前提条件
Kubernetes 1.24を実行するContainer Service for Kubernetes (ACK) 管理クラスターまたはACK専用クラスターが作成されました。 詳細については、「ACK管理クラスターの作成」、「ACK専用クラスターの作成」、および「ACKクラスターの更新」をご参照ください。
ノードインスタントスケーリングを使用するためにホワイトリストに追加されます。 ホワイトリストにいない場合は、
チケットを起票し、チケットにビジネスシナリオを記述します。Elastic Scaling Service (ESS) が有効化されました。
ノードプールの自動スケーリングが有効になっていて、スケーリングモードがSwiftに設定されていない場合、ノードインスタントスケーリング機能は、ノードプール構成の元のセマンティクスと動作と互換性があります。 さらに、この機能はすべてのタイプのポッドでシームレスに有効にできます。 スケーリングモードがSwiftに設定されている場合、ノードインスタントスケーリング機能はノードプールと互換性がありません。
手順1: ノードインスタントスケーリングの有効化
ノードインスタントスケーリングを使用する前に、[ノードプール] ページで自動スケーリングを有効にする必要があります。 ノードインスタントスケーリングを設定するときは、ノードスケーリング方法として [Auto scaling] を選択します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
ノードプール ページで、ノードスケーリング の横にある [有効化] をクリックします。
自動スケーリングを初めて使用する場合は、プロンプトに従って承認を完了します。 すでに承認を完了している場合は、この手順をスキップします。
ACKマネージドクラスターの場合、AliyunCSManagedAutoScalerRoleを使用してクラウドリソースにアクセスするようにACKを承認します。
ACK専用クラスターの場合、スケーリング管理にKubernetes WorkerRoleとAliyunCSManagedAutoScalerRolePolicyを使用するようにACKを承認します。 次の図は、Node Scalingを有効にしたときに承認できるコンソールページを示しています。
[ノードスケーリング設定] パネルで、[ノードスケーリング方法] を [自動スケーリング] に設定し、スケーリングパラメーターを設定して、[OK] をクリックします。
スケールアウトアクティビティは、実際のスケジューリングステータスに基づいて自動的にトリガーされます。 スケールイン条件を設定するだけで済みます。
パラメーター
説明
スケールインしきい値
node instant scalingが有効になっているノードプール内のノードのリソース容量に対するノードのリソース要求の比率を指定します。
ノードのCPUおよびメモリ使用率が [スケールインしきい値] より低い場合にのみ、スケールインアクティビティが実行されます。
GPUスケールインしきい値
GPU高速化ノードのスケールインしきい値。
ノードのCPU、メモリ、およびGPU使用率が [スケールインしきい値] より低い場合にのみ、スケールインアクティビティが実行されます。
スケールインの遅延
スケールインしきい値に達した時刻と、スケールインアクティビティ (ポッドの数を減らす) が開始される時刻の間隔。 単位は分です。 デフォルト値は 10 です。
重要オートスケーラーは、スケールインしきい値が設定され、[スケールインの下限] 条件が満たされている場合にのみ、スケールインアクティビティを実行します。
クールダウン
オートスケーラがスケールアウトアクティビティを実行した後、オートスケーラは、スケールインアクティビティを実行できるようになる前に、クールダウン期間を待つ。
オートスケーラは、クールダウン期間内にスケールインアクティビティを実行できませんが、ノードがスケールイン条件を満たしているかどうかを確認できます。 クールダウン期間が終了した後、ノードがスケールイン条件を満たし、[スケールインの遅延] パラメーターで指定された待機期間が終了すると、ノードは削除されます。 たとえば、Cooldownパラメーターは10分に設定され、Defer Scale-in Forパラメーターは5分に設定されます。 オートスケーラは、スケールアウト活動を実行した後、10分のクールダウン期間内にスケールイン活動を実行できません。 しかしながら、オートスケーラは、ノードがクールダウン期間内にスケールイン条件を満たすかどうかを依然としてチェックすることができる。 クールダウン期間が終了すると、スケールイン条件を満たすノードは5分後に削除されます。
手順2: 自動スケーリングが有効になっているノードプールを作成する
ノードインスタントスケーリング機能は、自動スケーリングが有効になっているノードプール内のノードのみをスケーリングします。 したがって、ノードインスタントスケーリングを設定した後、自動スケーリングが有効になっている少なくとも1つのノードプールも設定する必要があります。
自動スケーリングが有効になっている新しいノードプールを作成します。 詳細については、「ノードプールの作成」をご参照ください。
既存のノードプールの自動スケーリングを有効にします。 詳細については、「ノードプールの変更」をご参照ください。
説明既存のノードプールを設定するときは、[予想ノード数] がnullに設定されていることを確認します。 これを確認するには、ノードプールの詳細ページに移動し、[概要] タブでこのパラメーターを見つけます。 または、DescribeClusterNodePoolDetail APIを呼び出して、
desired_size
がnil
かどうかを確認します。
ノードプールにさまざまなインスタンスタイプを設定することを推奨します。 これは、複数のインスタンスタイプを指定し、ジェネリックインスタンスタイプを使用し、複数の可用性ゾーンを設定することで実現できます。 これらの方法は、インスタンスタイプの十分なインベントリとノードスケーリングアクティビティの正常な実行を保証するのに役立ちます。
手順3: (オプション) ノードのインスタントスケーリングの確認
上記の設定が完了したら、ノードインスタントスケーリング機能を使用できます。 ノードプールには、自動スケーリングが有効になっており、node auto scalingがクラスターにインストールされていることが表示されます。
ノードプールの自動スケーリングが有効になっています
[ノードプール] ページには、ノードプールの自動スケーリングが有効になっていることが表示されます。
ノードAuto Scalingがインストールされています
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[アドオン] ページで、[ACK GOATScaler] コンポーネントに [Installed] が表示されます。
Introduction to node instant scalingに関連するキーイベント
ノードインスタントスケーリング機能には、次のキーイベントが含まれます。 これにより、これらのイベントが発生したときのノードインスタントスケーリングの内部ステータスを知ることができます。
イベント名 | イベントオブジェクト | 説明 |
ProvisionNode | ポッドの作成 | node instant scaling機能は、ノードのスケールアウトアクティビティをトリガーします。 |
ProvisionNodeFailed | ポッドの作成 | ノードインスタントスケーリング機能は、ノードのスケールアウトアクティビティをトリガーできません。 |
ResetPod | ポッドの作成 | node instant scaling機能は、スケールアウト条件を満たし、スケールアウトアクティビティをトリガーしたが、まだスケジュール不可状態のポッドをスケールアウトリストに再追加します。 |
InstanceInventoryStatusChanged | ACKNodePool | 設定されたゾーンのインスタンス仕様のサプライステータスが変更されます。 形式は 詳細については、「ノードインスタントスケーリングのヘルスステータスの表示」をご参照ください。 |
ノードインスタントスケーリングラベルの概要
ノードインスタントスケーリング機能では、次のラベルが保持されます。 例外が発生した場合、これらのラベルを手動で変更しないでください。
ノードラベル
ノードラベル | 説明 |
goatscaler.io/managed:true | ノードインスタントスケーリング機能によって管理されるノードを識別します。 node instant scaling機能は、このラベルを持つノードがスケールイン条件を満たすかどうかを定期的にチェックします。 |
k8s.aliyun.com: true | ノードインスタントスケーリング機能によって管理されるノードを識別します。 node instant scaling機能は、このラベルを持つノードがスケールイン条件を満たすかどうかを定期的にチェックします。 |
goatscaler.io/provision-task-id:{task-id} | クラスターに追加されたノードのソースを追跡できるように、node instant scaling機能によって実行されるスケールアウトタスクのIDを示します。 |
ノード汚染
ノード汚染 | 説明 |
goatscaler.io /ノード終了 | この汚染があるノードは、ノードの即時スケーリング機能によってスケーリングされます。 |
ポッド注釈
ポッド注釈 | 説明 |
goatscaler.io/provision-task-id | 現在のポッドのノードインスタントスケーリング機能によって作成されるスケールアウトタスクのIDを示します。 node instant scaling機能は、このアノテーションを持つポッドに別のノードを追加せず、現在のノードが起動するのを待ちます。 |
goatscaler.io/reschedule-deadline | ポッドがノードにスケジュールされるまでノードインスタントスケーリング機能が待機する時間を示します。 この時間を超えてポッドがまだスケジュールできない場合、ノードインスタントスケジューリング機能はポッドをスケールアウトリストに再追加します。 |
次に何をすべきか
ノードのインスタントスケーリングのヘルスステータスを表示
ノードインスタントスケーリング機能は、Elastic Compute Service (ECS) インスタンスのインベントリステータスに基づいて、タイプとゾーンを動的に選択できます。 ノードプール内のインスタンスの健全性を監視し、インスタンス最適化のための設定提案を取得し、ノードスケーリングアクティビティの実行を確認するには、ノードプールのConfigMapを確認します。 これにより、ノードプールインベントリのヘルスステータスを評価し、そのインベントリを評価し、インスタンスタイプを事前に分析および調整できます。
詳細については、「ノードインスタントスケーリングのヘルスステータスの表示」をご参照ください。
Update Node Auto Scaling
最新の機能と最適化を使用するには、Node Auto Scalingをできるだけ早く更新することを推奨します。 詳細については、「コンポーネントの管理」をご参照ください。