ワーカー・プールの自動スケーリングのセットアップ
設定した最小値と最大値に基づいて、ワーカー・プール内のワーカー・ノードを自動的にスケーリングできるように、クラスター自動スケーリング機能の構成マップを更新します。
ワーカープールでオートスケーリングを有効にするようコンフィグマップを編集すると、クラスターオートスケーラーがワークロードのリクエストに応じてクラスターをスケーリングします。 つまり、ワーカープールの サイズを変更 したり、 バランスを変えたりする ことはできない。 スキャンとスケールアップ/スケールダウンは一定の間隔で継続して行われ、ワーカー・ノード数によっては、完了までに長い時間がかかることがあります (30 分など)。 後からクラスター自動スケーリング機能を削除するには、まず構成マップで各ワーカー・プールを無効にする必要があります。
バージョン 1.2.4 以降、 maxEmptyBulkDelete オプションはサポートされなくなった。 このオプションをコンフィグマップから削除するには、 kubectl edit configmap iks-ca-configmap -n kube-system コマンドを実行し、オプションを削除します。 その代わりとして、バージョン 1.2.4 で追加された maxScaleDownParallelism オプションを使用することができます。 詳細は configmapリファレンスを 参照。
開始前に
- クラスター自動スケーリング機能アドオン をインストールします。
- Red Hat OpenShift クラスターにアクセスします。
-
クラスター自動スケーリング機能の構成マップ YAML ファイルを編集します。
oc edit cm iks-ca-configmap -n kube-system -o yaml出力例
apiVersion: v1 data: workerPoolsConfig.json: | [ {"name": "<worker_pool>","minSize": 1,"maxSize": 2,"enabled":false} ] kind: ConfigMap -
パラメーターを使用して構成マップを編集し、クラスター自動スケーリング機能でクラスター・ワーカー・プールをどのようにスケーリングするかを定義します。 注: 標準クラスターの各ゾーンですべてのパブリック・アプリケーション・ロード・バランサー (ALB) を無効にしている場合を除き、ALB ポッドを分散させて高可用性を確保するために、1 ゾーンあたりの
minSizeを2に変更する必要があります。"name": "default":"default"を、スケーリングするワーカー・プールの名前または ID に置き換えます。 ワーカー・プールをリストするには、ibmcloud oc worker-pool ls --cluster CLUSTER_NAME_OR_IDを実行します。 複数のワーカー・プールを管理するには、次のように JSON 行をコンマ区切りの行としてコピーします。
[ {"name": "default","minSize": 1,"maxSize": 2,"enabled":false}, {"name": "Pool2","minSize": 2,"maxSize": 5,"enabled":true} ] ``` クラスター自動スケーリング機能は、`ibm-cloud.kubernetes.io/worker-pool-id` ラベルを持つワーカー・プールのみをスケーリングできます。 ワーカー・プールに必要なラベルがあるかどうかを確認するには、`ibmcloud oc worker-pool get --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID | grep Labels` を実行します。 使用中のワーカープールに必要なラベルがない場合は、新しいワーカープールを追加し、そのワーカープールをクラスターオートスケーラーで使用してください。 {: note} - `"minSize": 1`:ゾーンあたりのワーカーノードの最小数を指定する。 `minSize` を設定しても、自動的にスケールアップはトリガーされません。 `minSize` は、クラスタのオートスケーラーがゾーンごとのワーカーノード数を特定の数未満に縮小しないようにするためのしきい値です。 クラスターで、ゾーンあたりの数がまだこれに達していない場合は、より多くのリソースを必要とするワークロード・リソース要求が発生するまで、クラスター自動スケーリング機能によってスケールアップされることはありません。 例えば、3 つのゾーンあたり 1 つのワーカー・ノードが含まれた 1 つのワーカー・プールがある場合に (合計 3 つのワーカー・ノード)、`minSize` をゾーンあたり `4` に設定した場合は、クラスター自動スケーリング機能によって、ゾーンあたりの追加の 3 つのワーカー・ノード (合計 12 個のワーカー・ノード) が即時にプロビジョンされることはありません。 代わりに、リソース要求によってスケールアップがトリガーされます。 15 個のワーカー・ノードのリソースを要求するワークロードを作成した場合、クラスター自動スケーリング機能はこの要求を満たすようにワーカー・プールをスケールアップします。 ここで、「 `minSize` 」とは、たとえその数のワーカーノードを必要とするワークロードを削除したとしても、クラスターのオートスケーラーがゾーンごとに4台未満のワーカーノードまでスケールダウンしないことを意味します。 詳細については、 [Kubernetes のドキュメント](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#when-does-cluster-autoscaler-change-the-size-of-a-cluster){: external}を参照してください。 - `"maxSize": 2`: クラスター自動スケーリング機能でワーカー・プールをスケールアップできる最大のワーカー・ノード数 (1 ゾーンあたりの数) を指定します。 値は、`minSize` に設定した値以上でなければなりません。 - `"enabled": false`: 値を `true` に設定すると、クラスター自動スケーリング機能でそのワーカー・プールのスケーリングを管理できます。 値を `false` に設定すると、クラスター自動スケーリング機能でワーカー・プールをスケーリングできなくなります。 後から[クラスター自動スケーリング機能を削除](/docs/openshift?topic=openshift-cluster-scaling-install-addon&interface=ui#autoscaler-remove-console)するには、まず構成マップで各ワーカー・プールを無効にする必要があります。 -
構成ファイルを保存します。
-
クラスター自動スケーリング機能のポッドを表示します。
oc get pods -n kube-system -
クラスター自動スケーリング機能ポッドの**
Events**セクションでConfigUpdatedイベントを探し、構成マップが正常に更新されたことを確認します。 構成マップのイベント・メッセージは、minSize:maxSize:PoolName:<SUCCESS|FAILED>:error messageという形式になります。oc describe pod -n kube-system <cluster_autoscaler_pod>出力例
Name: ibm-iks-cluster-autoscaler-857c4d9d54-gwvc6 Namespace: kube-system ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ConfigUpdated 3m ibm-iks-cluster-autoscaler-857c4d9d54-gwvc6 {"1:3:default":"SUCCESS:"}
ワーカー・プールの自動スケーリングを有効にした後に、このワーカー・プールにゾーンを追加した場合は、クラスター自動スケーリング機能のポッドを再始動して、この変更が反映されるようにします (oc delete pod -n kube-system <cluster_autoscaler_pod>)。
クラスター自動スケーリング機能の構成値のカスタマイズ
ワーカー・ノード数を増減するまでの待機時間など、クラスター自動スケーリング機能の設定をカスタマイズします。
-
ワーカー・プールの
minSizeやmaxSize以外の構成マップ・パラメーターを変更した場合や、ワーカー・プールを有効または無効にした場合は、クラスター自動スケーリング機能ポッドが再始動されます。
-
クラスター自動スケーリング機能の構成マップのパラメーターを確認します。
-
クラスター自動スケーリング機能アドオンの構成マップをダウンロードして、パラメーターを確認します。
oc get cm iks-ca-configmap -n kube-system -o yaml > configmap.yaml -
configmap.yamlファイルを開いて、変更する設定を更新します。 -
クラスター自動スケーリング機能アドオンの構成マップを再適用します。
oc apply -f configmap.yaml -
ポッドが正常に再始動されていることを確認します。
oc get pods -n kube-system | grep autoscaler
クラスター自動スケーリング機能の構成マップのリファレンス
balancingIgnoreLabel- ゾーン・バランシング中に無視するノード・ラベル・キー。 固定ノード・ラベルは別として、自動スケーリング機能はゾーン・バランシング時に追加の 5 つのノード・ラベルを無視できます。 例えば、
balancingIgnoreLabel1:label1、balancingIgnoreLabel2: custom-label2などです。 coresTotal- クラスター内のコアの最小数と最大数。 クラスター自動スケーリング機能は、これらの数を超えてクラスターをスケーリングすることはありません。 デフォルト値は
0:320000です。 enforceNodeGroupMinSize- ワーカー・プールを構成済みの最小サイズにスケールアップするには、この値を
trueに設定します (必要な場合)。 デフォルト値はfalseです。 expander- 複数のワーカープールが存在する場合、クラスターのオートスケーラーはどのワーカープールをスケーリングするかをどのように決定するのか。 デフォルト値は
randomです。 random:most-podsとleast-wasteの間でランダムに選択します。most-pods: スケールアップ時に最も多くのポッドをスケジュールできるワーカー・プールを選択します。nodeSelectorを使用してポッドを特定のワーカー・ノードにデプロイしている場合は、このメソッドを使用します。least-waste: スケールアップ後に不使用の CPU が最も少ないワーカー・プールを選択します。 2 つのワーカー・プールがスケールアップ後に同じ量の CPU リソースを使用する場合は、未使用メモリーが最も少ないワーカー・プールが選択されます。expendablePodsPriorityCutoff- カットオフの下の優先度を持つポッドは使い捨て可能です。 これらは、スケール・ダウン時に考慮せずに削除することができ、スケール・アップの原因にはなりません。
PodPriorityがヌルに設定されたポッドは、使い捨て可能ではありません。 デフォルト値は-10です。 ignoreDaemonSetsUtilization- スケールダウンのリソース使用率を計算する際に、オートスケーラ DaemonSet ポッドを無視します。 デフォルト値は
falseです。 imagePullPolicy- Docker のイメージをいつ取得すべきか。 デフォルト値は
Alwaysです。 Always: ポッドが開始されるたびにイメージをプルします。IfNotPresent:ローカルにまだ画像が存在しない場合にのみ画像を取り出します。 \n -Never: ローカルに画像が存在すると仮定し、決して画像を取り出さない。kubeClientBurst- Kubernetes クライアントで許可されるバースト。 デフォルト値は
300です。 kubeClientQPS- Kubernetes クライアントのQPS値。 バーストが使い尽くされた後に受け入れられる照会の数。 デフォルト値は
5.0です。 livenessProbeFailureThreshold- ポッドの起動後、最初の稼働確認プローブが失敗した際に、
kubeletが当該プローブを再試行する回数。 この失敗のしきい値に達すると、コンテナーが再始動され、ポッドの Readiness Probe にUnreadyのマークが付きます (該当する場合)。 デフォルト値は3です。 livenessProbePeriodSecondskubeletが稼働確認プローブを実行する間隔(秒単位)。 デフォルト値は600です。livenessProbeTimeoutSeconds- ライブネスプローブのタイムアウトまでの経過時間(秒単位)。 デフォルト値は
10です。 logLevel- 自動スケーリング機能のログ・レベル。 ログレベルは
info,debug,warning,error。デフォルト値はinfoです。 maxBulkSoftTaintCountPreferNoScheduleを使用して、同時に「tainted」または「untainted」に設定できるワーカーノードの最大数。 この機能を無効にするには、0に設定します。 デフォルト値は0です。maxBulkSoftTaintTimePreferNoScheduleを使用して、ワーカーノードが同時に「tainted」または「untainted」の状態に設定されることができる最大時間。 デフォルト値は10mです。maxDrainParallelism- 並行してドレーンおよび削除できる、まだドレーンする必要があるノードの最大数。 デフォルト値は
1です。 maxEmptyBulkDelete- 1.2.4 より前のバージョンのみサポートオートスケーラーが同時に削除できる空のノードの最大数。 デフォルト値は
10です。 maxFailingTime- クラスターオートスケーラーのポッドが、アクションが完了しないまま実行され続けた場合、ポッドが自動的に再起動されるまでの最大時間(分単位)。 デフォルト値は
15mです。 maxGracefulTerminationSec- 自動スケーリング機能がノードをスケールダウンするときにポッドの終了を待機する最大秒数。 デフォルト値は
600です。 maxInactivity- クラスターオートスケーラーのポッドが、記録されたアクティビティがない状態で実行され続け、自動的に再起動されるまでの最大時間(分単位)。 デフォルト値は
10mです。 maxNodeGroupBinpackingDuration- 各ワーカープールのビンパッキングシミュレーションに費やされた最大時間(秒)。 デフォルト値は
10sです。 maxNodeProvisionTime- クラスタのオートスケーラーがスケールアップ要求をキャンセルする前に、ワーカーノードがプロビジョニングを開始するまでに要する最大時間(分単位)。 デフォルト値は
120mです。 maxNodeSkipevalTimeTrackerEnabled- バージョン 1.35 以降 :評価中にノードがスキップされた場合のCluster Autoscalerのスケールダウン動作を分析するための追加メトリクスを有効にします。 デフォルト値は
falseです。 - 有効にすると、クラスタオートスケーラは、スキップされたスケールダウンイベントを監視するために、CAポッド内のメトリック
cluster_autoscaler_skipped_scale_events_count。 maxNodesPerScaleUp- 1回のスケールアップで追加できるノードの最大数。 これは、自動スケーリング機能のアルゴリズム待ち時間を最適化するためのものであり、スケールアップのレート制限として使用することはできません。 デフォルト値は
1000です。 maxPodEvictionTime- 自動スケーリング機能が停止する前にポッドの除去を試行する最大時間。 デフォルト値は
2mです。 maxRetryGap- サービスAPIへの接続に失敗した場合、再試行を行うまでの最大時間(秒単位)。 このパラメーターと
retryAttemptsパラメーターを使用して、クラスター自動スケーリング機能の再試行ウィンドウを調整します。 デフォルト値は60です。 parallelDrain- ノードの並列ドレーンを許可するには、
trueに設定します。 デフォルト値はfalseです。 - 非推奨
parallelDrain設定(--parallel-drainにマップ)は、クラスタオートスケーラーのバージョン 1.26 ~ 1.31 でのみサポートされています。 1.32 以降のバージョンでは、代わりに--max-drain-parallelismと--max-scale-down-parallelismを使用してください。 maxScaleDownParallelism- 空のノードと排水が必要なノードの両方を、並行して削除できる最大数。 デフォルト値は
10です。 maxTotalUnreadyPercentage- クラスター内の作動不能ノードの最大パーセンテージ。 この値を超えると、自動スケーラーは操作を停止します。 デフォルト値は
45です。 memoryTotal- クラスターのメモリーの最小量と最大量 (ギガバイト)。 クラスター自動スケーリング機能は、これらの数を超えてクラスターをスケーリングすることはありません。 デフォルト値は
0:6400000です。 minReplicaCount- replicaSet、またはレプリケーション・コントローラがスケールダウン時に削除を許可しなければならないレプリカの最小数。 デフォルト値は
0です。 newPodScaleUpDelay- この値 (秒) より新しいポッドは、スケールアップ対象と見なされません。
cluster-autoscaler.kubernetes.io/pod-scale-up-delayアノテーションを使用して、個々のポッドの数を増やすことができます。 デフォルト値は0sです。 nodeDeleteDelayAfterTaint- ノードにテイントを適用した後、そのノードを削除するまでの待機時間 (秒)。 デフォルト値は
5sです。 nodeDeletionBatcherInterval- 自動スケーリング機能がノードをバッチで削除するために収集できる時間 (分単位)。 デフォルト値は
0mです。 nodeRemovalLatencyTrackingEnabled- バージョン 1.35 以降 :ノードのスケールダウン待ち時間に関するヒストグラム・メトリクスを有効にします。 これらのメトリクスは、Cluster Autoscalerがノードを削除したり、ノードが再び必要になったときに削除をキャンセルしたりするのにかかる時間を可視化します。 デフォルト値は
falseです。 - 有効にすると、クラスタ・オートスケーラは、スケールダウンの動作を監視するために、CAポッドから
cluster_autoscaler_node_removal_latency_seconds_bucketプロメテウス・ヒストグラム・メトリックを公開します。 okTotalUnreadyCountmaxTotalUnreadyPercentage値に関係なく、許可される作動不能ノードの数。 デフォルト値は3です。OSReservedCPUMili- MiliCPU。 デフォルト値は
30です。 OSReservedMemoryGi- GiB 内の予約済みメモリ量。 デフォルト値は
0.3です。 parallelDrain- ノードの並列ドレーンを許可するには、
trueに設定します。 デフォルト値はfalseです。 prometheusScrape- Prometheus メトリックを送信するには、
trueに設定します。 メトリックの送信を停止するには、falseに設定します。 resourcesLimitsCPUibm-iks-cluster-autoscalerポッドが消費できるワーカーノードのCPU使用量の最大値。 デフォルト値は600mです。resourcesLimitsMemoryibm-iks-cluster-autoscalerポッドが消費できるワーカーノードのメモリの最大量。 デフォルト値は600Miです。resourcesRequestsCPUibm-iks-cluster-autoscalerポッドが起動時に使用するワーカーノードのCPUの最小量。 デフォルト値は200mです。resourcesRequestsMemoryibm-iks-cluster-autoscalerポッドが起動時に持つワーカーノードのメモリの最小量。 デフォルト値は200Miです。retryAttempts- サービスAPIへの接続に失敗した後の再試行の最大回数。 このパラメータと「
maxRetryGap」パラメータを使用して、クラスタ・オートスケーラーの再試行ウィンドウを調整します。| デフォルト値は64です。 scaleDownCandidatesPoolMinCount- 以前の反復からの一部の候補が有効でなくなった場合に、スケールダウンのための追加の空でない候補と見なされるノードの最小数。 デフォルト値は
50です。 scaleDownCandidatesPoolRatio- 前の反復からの一部の候補が無効になった場合に、スケールダウンのための追加の空でない候補と見なされるノードの比率。 デフォルト値は
0.1です。 scaleDownDelayAfterAdd- スケールアップ後、スケールダウン評価が再開されるまでの時間。 デフォルト値は
10mです。
scaleDownDelayAfterDelete | ノードの削除後、スケールダウン評価が再開されるまでの時間。 デフォルト値は、 scan-interval と同じで、 1m です。
scaleDownDelayAfterFailure- 自動スケーリング機能が障害後に待機する必要がある時間 (分単位)。 デフォルト値は
3mです。 scaleDownEnabledfalseに設定すると、自動スケーリング機能はスケールダウンを実行しません。 デフォルト値はtrueです。scaleDownGPUUtilizationThreshold- ノード上で実行されているすべてのポッドのGPUリクエストの合計をノードの割り当て可能リソースで割ったもの。 リソース要求がこのしきい値より少ない場合、ノードはスケールダウンを検討することができる。 利用率の計算はGPUリソースのみを考慮します。 CPUとメモリの使用率は無視される。 デフォルト値は
0.5です。 scaleDownNonEmptyCandidatesCount- ドレインによるスケールダウンの候補として1回の反復で考慮される、空でないノードの最大数。| デフォルト値は
30。 scaleDownUnneededTime- ワーカーノードがスケールダウンされるまでに、不要な状態である必要がある時間(分単位)。 デフォルト値は
10mです。 scaleDownUnreadyEnabledtrueに設定すると、準備未完了ノードのスケールダウンがスケジュールされます。 デフォルト値はtrueです。scaleDownUnreadyTime- 自動スケーリング機能が、準備ができていないノードのスケールダウンを検討する前に待機する必要がある時間 (分単位)。 デフォルト値は
20mです。 scaleDownUtilizationThreshold- ワーカーノードの使用率のしきい値。 ワーカーノードの利用率がしきい値を下回った場合、そのワーカーノードはスケールダウンされたものとみなされます。 ワーカーノードの利用率は、そのワーカーノード上で実行されているすべてのポッドによって要求されたCPUおよびメモリリソースの合計を、そのワーカーノードのリソース容量で割った値として計算されます。| デフォルト値は
0.5です。 scanInterval- スケールアップまたはスケールダウンをトリガーするワークロードの使用状況がないか、クラスター自動スケーリング機能がスキャンする間隔を分単位で設定します。 デフォルト値は
1mです。 skipNodesWithLocalStoragetrueに設定すると、ローカル・ストレージにデータを保存しているポッドを持つワーカー・ノードはスケールダウンされません。 デフォルト値はtrueです。skipNodesWithSystemPodstrueに設定すると、kube-systemポッドを持つワーカー・ノードはスケールダウンされません。falseポッドがスケールダウンされると予期しない結果が生じる可能性があるため、この値をkube-systemに設定しないでください。 デフォルト値はtrueです。unremovableNodeRecheckTimeout- 前の試行で削除できなかったノードを自動スケーリング機能が再検査するまでのタイムアウト (分単位)。 デフォルト値は
5mです。 workerPoolsConfig.json- オートスケールしたいワーカープール。ゾーンごとのワーカーノードの最小数と最大数を、
{"name": "<pool_name>","minSize": 1,"maxSize": 2,"enabled":false}. POOL_NAME: 自動スケーリングを有効または無効にするワーカー・プールの名前または ID。 使用可能なワーカー・プールをリストするには、ibmcloud oc worker-pool ls --cluster CLUSTER_NAME_OR_IDを実行します。maxSize: <number_of_workers>: クラスタのオートスケーラーがゾーンごとに拡張できるワーカーノードの最大数。 この値は、minSize: <number_of_workers>サイズに対して設定した値以上でなければなりません。min=<number_of_workers>: クラスタのオートスケーラーがゾーンごとに縮小できるワーカーノードの最小数。 高可用性のためにALBポッドを分散させる必要がある場合は、値を少なくとも2に設定する必要があります。 標準クラスタの各ゾーンにあるすべてのパブリックALB を無効にした 場合は、この値を「0」に設定できます。minサイズを設定することで自動的にスケールアップがトリガーされるわけではないことに注意してください。minの値は、クラスタのオートスケーラーがゾーンごとのワーカーノード数をこの最小数未満にスケールダウンしないようにするための閾値です。 クラスターの 1 ゾーンあたりのワーカー・ノード数がまだこの最小数に達していない場合に、クラスター自動スケーリング機能でスケールアップが行われるわけではありません。スケールアップは、ワークロード・リソース要求に必要なリソースが増えた場合に初めて行われます。enabled=:trueの場合、クラスタオートスケーラはワーカープールをスケールすることができます。falseの場合、クラスタ・オートスケーラはワーカー・プールをスケールしません。 後でクラスターのオートスケーラーを削除したい場合は、まず ConfigMap で各ワーカープールを無効にする必要があります。 オートスケーリング用にワーカープールを有効にした後、そのワーカープールにゾーンを追加した場合は、この変更を反映させるためにクラスター・オートスケーラーのポッドを再起動してください:oc delete pod -n kube-system <cluster_autoscaler_pod>。- デフォルトでは、
defaultワーカー・プールは有効ではありません。max値は2、min値は1です。