クラスターに Pod をスケジュールするためのリソースが不足している場合、ノードの自動スケーリングを使用してノードを自動的に追加または削除できます。ノードの自動スケーリングは、自動スケーリング対象のノードプールが 20 個未満、各ノードプールのノード数が 100 個未満など、スケーリング要件が厳しくないシナリオに適しています。また、トラフィックが安定しており、リソース需要が予測可能で、単一のスケーリング操作で対応できるワークロードにも適しています。
始める前に
ノードの自動スケーリング機能を効果的に使用するために、まず「ノードスケーリング」をお読みいただき、以下の内容を理解することを推奨します。
ノードの自動スケーリングの仕組みと機能
ノードの自動スケーリングに適したユースケース
ノードの自動スケーリングを使用する前の重要な考慮事項
スケールイン時、サブスクリプションインスタンスはクラスターから削除されますが、終了されません。追加コストを避けるため、この機能を有効にする際は従量課金インスタンスを使用してください。
注意事項
-
始める前に、Auto Scaling サービスが有効化されていることを確認してください。
-
クォータと制限については、ノードスケーリングの「注意事項」をご参照ください。
-
ノードの自動スケーリングには、特定のスケジューリングポリシーに関する既知の制限があり、予期しないスケーリング動作が発生する可能性があります。ワークロードまたはコンポーネントがサポートされていないスケジューリングポリシーを使用している場合は、次のいずれかの解決策を推奨します。
-
解決策1:「ノードの即時スケーリング」に切り替える。
-
解決策2:影響を受けるワークロードまたはコンポーネントを、ノードスケーリングが有効になっていないノードプールにデプロイする。
例えば、ack-node-local-dns-admission-controller コンポーネントをデプロイする場合は、ノードスケーリングが有効になっていないノードプールにデプロイし、コンポーネントの構成に次のノードアフィニティ要件を追加してください。
nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "k8s.aliyun.com" operator: "NotIn" values: ["true"]
-
-
cluster-autoscaler コンポーネントは、更新またはデプロイ時にノードリソースを必要とします。リソースが不足すると、これらの操作が失敗し、スケーリングが中断される可能性があります。このような障害を防ぐため、ノードに十分なリソースがあることを確認してください。
この機能には、次の手順が含まれます。
-
ステップ 1: クラスターのノード自動スケーリングを有効にする: ノードプールの自動スケーリングポリシーを有効にするには、まずクラスターレベルでノード自動スケーリングを有効にする必要があります。
-
ステップ2:自動スケーリングノードプールを構成する:ノードの自動スケーリング機能は、有効になっているノードプールにのみ影響します。したがって、特定のノードプールのスケーリングモードを「自動」に設定する必要があります。
ステップ1:ノードの自動スケーリングを有効にする
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
-
ノードプール ページで、ノードスケーリング の横にある 有効化 をクリックします。
-
ノードの自動スケーリングを初めて使用する場合は、画面の指示に従って Auto Scaling サービスを有効化し、必要な権限を付与してください。すでに完了している場合は、この手順をスキップしてください。
-
ACK マネージドクラスター: AliyunCSManagedAutoScalerRole ロールを承認します。
-
ACK 専用クラスター: KubernetesWorkerRole ロールを承認し、AliyunCSManagedAutoScalerRolePolicy をアタッチします。
ノードのスケーリング設定 ダイアログボックスで、事前チェックに合格した後、RAM ロールのリンク (
KubernetesWorkerRole-xxxxなど) をクリックして、RAM コンソールで承認を完了します。
-
-
ノードのスケーリング設定 ページで、ノードスケーリングプラン を 自動スケーリング に設定し、パラメーターを構成してから、OK をクリックします。
スケーリングソリューションは、選択後に切り替えることができます。切り替えるには、選択を「ノードの即時スケーリング」に変更し、画面のプロンプトを注意深く読み、指示に従って操作を完了してください。
パラメータ
説明
[ノードプールのスケールアウトポリシー]
-
[ランダムポリシー]:スケールアウトに適格な複数のノードプールがある場合、ランダムに 1 つが選択されます。
-
[デフォルトポリシー]:スケールアウトに適格な複数のノードプールがある場合、リソースの無駄が最も少ないものが選択されます。
-
[優先度に基づくポリシー]:スケールアウトに適格な複数のノードプールがある場合、優先度が最も高いものが選択されます。
ノードプールの優先度は、ノードプールのスケールアウト優先度 パラメーターで定義されます。
[ノードプールのスケールアウト優先度]
ノードプールのスケールアウト優先度を設定します。このパラメーターは、ノードプールのスケールアウトポリシー が 優先度に基づくポリシー に設定されている場合にのみ有効になります。
値の範囲:1 から 100 までの整数。値が大きいほど、優先度が高くなります。
パラメーターの横にある追加をクリックし、オートスケールされたノードプールを選択して、その優先度を設定する必要があります。
自動スケーリングノードプールが利用できない場合は、このパラメータをこの時点では無視し、「ステップ2:自動スケーリングノードプールを構成する」の完了後に優先度を設定してください。
[スケーリング感度]
システムがスケーリングを実行するかどうかをチェックする間隔です。デフォルト値は 60 秒です。
自動スケーリング中、スケーリングコンポーネントはスケジューリング状態に基づいてスケールアウトイベントを自動的にトリガーします。
重要-
ECS ノード: スケーリングコンポーネントは、スケールインしきい値、スケールイン開始遅延時間、および クールダウン時間 の条件がすべて満たされた場合にのみ、ノードをスケールインできます。
-
GPU ノード: スケーリングコンポーネントは、GPU スケールインしきい値、スケールイン開始遅延時間、および クールダウン時間 の条件がすべて満たされた場合にのみ、GPU ノードをスケールインできます。
[スケールインを許可]
ノードのスケールインを許可するかどうかを指定します。これをオフにすると、スケールイン関連の構成は適用されません。この設定は慎重に使用してください。
[スケールインしきい値]
「ノードの自動スケーリング」が有効なノードプール内のノードにおける、リソース要求と総リソース容量の比率です。
ノードは、その CPU およびメモリリソース使用率の両方が スケールインしきい値 を下回る場合にのみ、スケールインの対象となります。
[GPU スケールインしきい値]
GPU インスタンスのスケールインしきい値。
GPU インスタンスは、その CPU、メモリ、および GPU の使用率がすべて、設定されたGPU スケールインしきい値を下回った場合にのみ、スケールインの対象となります。
[スケールイン開始遅延時間]
ノードがスケールインの対象となってから、スケールイン操作が実行されるまでの遅延時間です。単位:分。デフォルト値:10 分。
重要スケーリングコンポーネントは、スケールインしきい値 条件が満たされ、スケールイン開始遅延時間 期間が経過した後でのみ、ノードのスケールインを実行できます。
[クールダウン時間]
最新のスケールアウトイベントの後、スケーリングコンポーネントがスケールインを実行しない期間です。
クールダウン期間中、スケールインアクションは一時停止されますが、システムはノードの適格性を引き続き評価します。クールダウンが終了すると、スケールイン条件(しきい値と遅延時間)を満たしているノードはスケールインされます。例えば、10 分のクールダウンと 5 分のトリガー遅延がある場合、スケールアウト後 10 分間はノードが削除されません。ノードが 2 分目に適格になった場合、10 分目に削除されます。この場合、ノードは 8 分間適格な状態にあり、5 分のトリガー遅延を超えているためです。
-
ステップ2:自動スケーリングノードプールを構成する
既存のノードプールの スケーリングモード を 自動 に変更するか、自動スケーリングを有効にして新しいノードプールを作成することができます。
詳細な手順については、「ノードプールの作成と管理」をご参照ください。主要なパラメータは次のとおりです。
|
パラメータ |
説明 |
|
[スケーリングモード] |
|
|
[インスタンス数] |
ノードプールにおけるスケーリングの 最小インスタンス数 と 最大インスタンス数 には、既存のインスタンスは含まれません。 説明
|
|
インスタンス関連パラメータ |
スケールアウト時に、構成された ECS インスタンスファミリー からノードが割り当てられます。スケールアウトの成功率を向上させるため、複数のゾーンにわたって複数のインスタンスタイプを選択して、利用不可または在庫不足を回避してください。スケールアウト時に使用される具体的なインスタンスタイプは、構成された スケーリングポリシー によって決定されます。 ビジネスの安定性および正確なリソーススケジューリングを確保するため、GPU および非 GPU のインスタンスタイプを同一のノードプールに混在させないでください。 スケールアウトのためのインスタンスタイプを構成する方法は、以下の 2 通りです。
構成については、コンソールの弾力性強度の推奨事項を参照するか、作成後に「ノードプールの弾力性強度の表示」をご参照ください。 ACK でサポートされていないインスタンスタイプおよびノード構成の推奨事項については、「ECS インスタンスタイプの構成推奨事項」をご参照ください。 クラウドリソースおよび課金情報: |
|
[オペレーティングシステム] |
自動スケーリングノードの場合、Alibaba Cloud Linux、Windows、Windows Core のイメージがサポートされています。 Windows または Windows Core イメージを選択すると、システムは自動的に Taint |
|
[ノードラベル (Labels)] |
クラスター構成に追加されたノードラベルは、スケールアウト中に作成されるノードに自動的に適用されます。 重要
ノードの自動スケーリングは、ノードラベルと Taint をノードプールタグにマッピングした後にのみそれらを認識します。また、ノードプールタグの数には制限があります。したがって、自動スケーリングノードプールの場合、構成された ECS タグ、Taint、ノードラベルの合計数が 12 を超えないようにしてください。 |
|
[[スケーリングポリシー]] |
ノードプールがスケーリング中にインスタンスを選択する方法を構成します。
|
|
[従量課金インスタンスを使用してプリエンプティブル容量を補充する] |
課金方法としてスポットインスタンスを選択している必要があります。 有効化すると、価格または在庫の理由で十分なスポットインスタンスを作成できない場合、ACK が従量課金インスタンスの作成を自動的に試みて補完します。 クラウドリソースおよび課金情報: |
|
プリエンプティブルインスタンス補完の有効化 |
課金方法としてスポットインスタンスを選択している必要があります。 有効化すると、スポットインスタンスが回収されるというシステム通知を受け取った際(回収の 5 分前)、ACK は補償のために新しいインスタンスのスケールアウトを試みます。
スポットインスタンスの積極的なリリースは、ビジネスの中断を引き起こす可能性があります。補償の成功率を向上させるために、従量課金インスタンスを使用してプリエンプティブル容量を補充する も併せて有効化することを推奨します。 クラウドリソースおよび課金情報: |
|
スケーリングモード |
ノードプールで 自動スケーリング を有効化し、スケーリングモード を 自動 に設定する必要があります。
|
|
[汚染 (Taints)] |
Pod がノードにスケジュールされるのを防ぎます。 |
ステップ3:(オプション)結果を確認する
これらの手順を完了すると、ノードの自動スケーリング機能が使用可能になります。ノードプールには自動スケーリングがアクティブであると表示され、システムは自動的に cluster-autoscaler コンポーネントをインストールします。
ノードプールで自動スケーリングが有効になっている
ノードプール ページには、オートスケーリングが有効になっているノードプールの一覧が表示されます。
cluster-autoscaler コンポーネントがインストールされている
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
-
kube-system 名前空間を選択します。リストに cluster-autoscaler コンポーネントが表示されます。
よくある質問
カテゴリ | サブカテゴリ | リンク |
ノードの自動スケーリングのスケーリング動作 | ||
cluster-autoscaler は CustomResourceDefinitions (CRD) をサポートしていますか? | ||
カスタムスケーリング動作 | ||
cluster-autoscaler アドオン関連 | ||