大規模クラスターまたはリソースの迅速な配信を要するワークロードでは、標準的なノードの自動スケーリングではスケール速度が十分でない場合があります。ノードの即時スケーリングは、Pod がスケジュール不可能な状態になった時点で ECS インスタンスの作成を直接トリガーすることで、従来のオートスケーラーによる評価サイクルをバイパスし、ノードのプロビジョニングを高速化します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
ACK マネージドクラスターまたは ACK 専用クラスターで、Kubernetes 1.24 以降が実行されている必要があります。詳細については、「クラスターの Kubernetes バージョンを手動でアップグレードする」をご参照ください。
ターゲットノードプール用に十分な利用可能な IP アドレスがある vSwitch。 DescribeVSwitchAttributes 操作で利用可能な IP を照会し、IP が不足している場合は セカンダリ CIDR ブロックを使用して CIDR ブロックを追加します。
スケールイン時にサブスクリプションインスタンスはクラスターから削除されますが、リリースされません。不要なコストを回避するには、従量課金インスタンスをご利用ください。
互換性
| 条件 | 対応 |
|---|---|
| [スケーリングモード] が [標準] | はい |
| スケーリングモード が Swift | いいえ |
ACK GOATScaler コンポーネントのバージョンが v0.5.3 より前の場合、オフラインノードを手動で削除します。詳細については、「ノードのインスタントスケーリングに関するよくある質問」をご参照ください。
ステップ 1:ノードの即時スケーリングの有効化
ノードプールがノードのスケーリングを実行できるよう、自動クラスタースケーリングを有効化および構成します。
ACK コンソール にログインします。左側ナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで対象クラスターを見つけ、その名前をクリックします。左側ナビゲーションウィンドウで、[ノード] > [ノードプール] の順に選択します。
[ノードプール] ページで、[ノードのスケーリング] の横にある [有効化] をクリックします。
初めて自動クラスタースケーリングを利用する場合は、画面上の指示に従って Auto Scaling を有効化し、必要な権限を付与します。
ACK マネージドクラスターの場合: AliyunCSManagedAutoScalerRole ロールに権限を付与します。
ACK 専用クラスターの場合: KubernetesWorkerRole ロールに権限を付与し、AliyunCSManagedAutoScalerRolePolicy システムポリシーをアタッチします。

[ノードスケーリングの構成] ページで、[ノードスケーリング方法] を [即時スケーリング] に設定し、スケーリングパラメーターを構成して、[OK] をクリックします。構成後、Pod がスケジュール不可能な状態になると、スケーリングコンポーネントが自動的にスケールアウトをトリガーします。
説明Node Instant Elasticity から Node Autoscaling に切り替えるには、画面上のメッセージを読み、指示に従ってください。このオプションはホワイトリストに登録されたユーザーのみが利用できます。アクセスをリクエストするには、チケットを送信してください。
基本スケーリングパラメーター
| パラメーター | 説明 |
|---|---|
| [スケールインしきい値] | 要求リソースとノード容量の比率です。CPU およびメモリの使用率の両方がこのしきい値を下回った場合にのみ、ノードのスケールインが実行されます。 |
| [GPU スケールインしきい値] | GPU インスタンスに適用される同様のしきい値です。CPU、メモリ、GPU の使用率のすべてがこのしきい値を下回った場合にのみ、GPU ノードのスケールインが実行されます。 |
| [スケールインの遅延時間] | スケールイン条件を満たしてからスケールインを実行するまでの待機時間です。単位:分。デフォルト値:10 分。 |
高度なスケーリングパラメーター
| パラメーター | 説明 |
|---|---|
| Pod 終了タイムアウト | スケールイン時にノード上の Pod の終了を待機する最大時間です。単位:秒。 |
| [最小レプリカ数] | ノードのスケールインを許可するための ReplicaSet あたりの最小 Pod 数です。実際のレプリカ数がこの値より少ない場合、ノードはスケールインされません。 |
| DaemonSet ポッドの強制終了 | 有効化すると、スケールイン時にノード上の DaemonSet Pod が退避されます。 |
| [kube-system 名前空間の Pod をホストするノードをスキップ] | 有効化すると、kube-system 名前空間内の Pod を実行しているノードはスケールイン対象から除外されます。ただし、DaemonSet Pod およびミラーポッドには適用されません。 |
ステップ 2:自動スケーリング対応ノードプールの構成
ノードの即時スケーリングは、自動スケーリングが有効化されたノードプールでのみノードをスケーリングします。少なくとも 1 つのノードプールを自動スケーリング対応として構成してください。
複数のインスタンスタイプの構成、インスタンス属性の指定、または複数ゾーンの追加により、利用可能なインスタンスタイプの範囲を拡大できます。これにより、在庫を十分に確保し、スケールアウト失敗を回避できます。
(任意)ステップ 3:結果の検証
ノードプールに対する自動スケーリングの有効化状態の確認
[ノードプール] ページで、ノードプール一覧に自動スケーリングが有効化されていることが表示されることを確認します。

ACK GOATScaler コンポーネントのインストール状態の確認
[クラスター] ページで対象クラスターを見つけ、その名前をクリックします。左側ナビゲーションウィンドウで、[アドオン] をクリックします。
[アドオン] ページで、[ACK GOATScaler] コンポーネントを探します。そのステータスは [インストール済み] である必要があります。
スケーリングイベント
ノードの即時スケーリングによって生成される以下のイベントを使用して、スケーリング状態をモニターできます。
| イベント | オブジェクト | 説明 |
|---|---|---|
| ProvisionNode | Pod | ノードのスケールアウトが正常にトリガーされました。 |
| ProvisionNodeFailed | Pod | ノードのスケールアウトに失敗しました。 |
| ResetPod | Pod | 以前にスケールアウトをトリガーしたスケジュール不可な Pod が、スケールアウト範囲に再追加されます。 |
| InstanceInventoryStatusChanged | ACKNodePool | ゾーン内のインスタンスタイプの供給ステータスが変更されました。フォーマット:{InstanceType}/{Zone} inventory status changed from {Old Inventory Status} to {New Inventory Status}。詳細については、「ノードインスタント弾性の健全性ステータスの表示」をご参照ください。 |
ノードおよび Pod の識別子
ノードの即時スケーリングは、ノードおよび Pod に対して以下の識別子を維持します。これらの識別子は手動で変更しないでください。
ノードラベル
| ラベル | 説明 |
|---|---|
goatscaler.io/managed:true | ノードの即時スケーリングによって管理されるノードを識別します。このコンポーネントは、これらのノードについて定期的にスケールイン条件の満たし具合をチェックします。 |
k8s.aliyun.com: true | 上記と同じです。 |
goatscaler.io/provision-task-id:{task-id} | ノード作成のトリガー元をトレースします。 |
ノードの Taint
| Taint | 説明 |
|---|---|
goatscaler.io/node-terminating | ノードの即時スケーリングによってスケールイン中のノードに適用されます。 |
Pod のアノテーション
| アノテーション | 説明 |
|---|---|
goatscaler.io/provision-task-id | この Pod に対してスケールアウトされたノードのタスク ID です。重複したスケールアウトトリガーを防止します。 |
goatscaler.io/reschedule-deadline | スケジュール不可能な状態が継続した場合に、Pod を再びスケールアウト対象範囲に追加するまでの待機期間です。 |
よくある質問
スケールアウト動作、スケールイン動作、カスタムスケーリング、および Node Instant Elasticity コンポーネントに関するよくある質問については、「Node Instant Elasticity に関するよくある質問」をご参照ください。
ノードの即時スケーリングの健全性ステータスの確認
ノードの即時スケーリングは、Elastic Compute Service (ECS) インスタンスの在庫に基づいて、インスタンスタイプおよびゾーンを動的に選択します。ノードプールの在庫健全性をモニターし、ノードプール構成の最適化に関する推奨事項を取得するには、ノードプール在庫健全性 ConfigMap を確認してください。
詳細については、「Node Instant Elasticity の正常性ステータスの表示」をご参照ください。
コンポーネントログの収集
ACK マネージドクラスターの場合、[コントロールプレーンコンポーネントログ] ページからコンポーネントログを収集します。
ACK コンソール にログインします。左側ナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで対象クラスターを見つけ、その名前をクリックします。左側ナビゲーションウィンドウで、[操作] > [ログセンター] の順に選択します。
[コントロールプレーンコンポーネントログ] タブをクリックし、右上隅の [コンポーネントの更新] をクリックして、ノードの即時スケーリングコンポーネントを選択します。更新後に、コンポーネントのドロップダウンリストからノードの即時スケーリングコンポーネントを選択して、そのログを表示します。


ノードの即時スケーリングコンポーネントのアップグレード
ACK GOATScaler コンポーネントを定期的にアップグレードして、最新の機能と修正を入手してください。詳細については、「コンポーネントの管理」をご参照ください。
プライベートプールリソースに対する在庫チェックのスキップ
リソース供給を保証するためにプライベートプールを使用する場合、SkipInventoryCheck を有効化することで、ノードの即時スケーリングが在庫チェックをスキップし、スケールアウト時に予約済みリソースを直接使用できるようになります。
[クラスター] ページで対象クラスターを見つけ、その名前をクリックします。左側ナビゲーションウィンドウで、[アドオン] をクリックします。
[コアコンポーネント] セクションで、[ACK GOATScaler] コンポーネントを見つけ、[設定] をクリックします。
説明SkipInventoryCheckは、コンポーネントバージョン v0.3.0-582e405-aliyun 以降が必要です。必要に応じて、事前にコンポーネントをアップグレードしてください。SkipInventoryCheckをtrueに設定します。