ワーカー・プールの自動スケーリングのセットアップ

設定した最小値と最大値に基づいて、ワーカー・プール内のワーカー・ノードを自動的にスケーリングできるように、クラスター自動スケーリング機能の構成マップを更新します。

ワーカープールでオートスケーリングを有効にするようコンフィグマップを編集すると、クラスターオートスケーラーがワークロードのリクエストに応じてクラスターをスケーリングします。 つまり、ワーカープールの サイズを変更 したり、 バランスを変えたりする ことはできない。 スキャンとスケールアップ/スケールダウンは一定の間隔で継続して行われ、ワーカー・ノード数によっては、完了までに長い時間がかかることがあります (30 分など)。 後からクラスター自動スケーリング機能を削除するには、まず構成マップで各ワーカー・プールを無効にする必要があります。

バージョン 1.2.4 以降、 maxEmptyBulkDelete オプションはサポートされなくなった。 このオプションをコンフィグマップから削除するには、 kubectl edit configmap iks-ca-configmap -n kube-system コマンドを実行し、オプションを削除します。 その代わりとして、バージョン 1.2.4 で追加された maxScaleDownParallelism オプションを使用することができます。 詳細は configmapリファレンスを 参照。

開始前に

  1. クラスター自動スケーリング機能の構成マップ 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
    
  2. パラメーターを使用して構成マップを編集し、クラスター自動スケーリング機能でクラスター・ワーカー・プールをどのようにスケーリングするかを定義します。 注: 標準クラスターの各ゾーンですべてのパブリック・アプリケーション・ロード・バランサー (ALB) を無効にしている場合を除き、ALB ポッドを分散させて高可用性を確保するために、1 ゾーンあたりの minSize2 に変更する必要があります。

    • "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)するには、まず構成マップで各ワーカー・プールを無効にする必要があります。
    
    
  3. 構成ファイルを保存します。

  4. クラスター自動スケーリング機能のポッドを表示します。

    oc get pods -n kube-system
    
  5. クラスター自動スケーリング機能ポッドの**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>)。

クラスター自動スケーリング機能の構成値のカスタマイズ

ワーカー・ノード数を増減するまでの待機時間など、クラスター自動スケーリング機能の設定をカスタマイズします。

  1. クラスター自動スケーリング機能の構成マップのパラメーターを確認します。

  2. クラスター自動スケーリング機能アドオンの構成マップをダウンロードして、パラメーターを確認します。

    oc get cm iks-ca-configmap -n kube-system -o yaml > configmap.yaml
    
  3. configmap.yaml ファイルを開いて、変更する設定を更新します。

  4. クラスター自動スケーリング機能アドオンの構成マップを再適用します。

    oc apply -f configmap.yaml
    
  5. ポッドが正常に再始動されていることを確認します。

    oc get pods -n kube-system | grep autoscaler
    

クラスター自動スケーリング機能の構成マップのリファレンス

balancingIgnoreLabel
ゾーン・バランシング中に無視するノード・ラベル・キー。 固定ノード・ラベルは別として、自動スケーリング機能はゾーン・バランシング時に追加の 5 つのノード・ラベルを無視できます。 例えば、 balancingIgnoreLabel1:label1balancingIgnoreLabel2: custom-label2 などです。
coresTotal
クラスター内のコアの最小数と最大数。 クラスター自動スケーリング機能は、これらの数を超えてクラスターをスケーリングすることはありません。 デフォルト値は 0:320000です。
enforceNodeGroupMinSize
ワーカー・プールを構成済みの最小サイズにスケールアップするには、この値を true に設定します (必要な場合)。 デフォルト値はfalseです。
expander
複数のワーカープールが存在する場合、クラスターのオートスケーラーはどのワーカープールをスケーリングするかをどのように決定するのか。 デフォルト値は randomです。
random: most-podsleast-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です。
livenessProbePeriodSeconds
kubelet が稼働確認プローブを実行する間隔(秒単位)。 デフォルト値は600です。
livenessProbeTimeoutSeconds
ライブネスプローブのタイムアウトまでの経過時間(秒単位)。 デフォルト値は 10です。
logLevel
自動スケーリング機能のログ・レベル。 ログレベルは info, debug, warning, error。デフォルト値は info です。
maxBulkSoftTaintCount
PreferNoSchedule を使用して、同時に「tainted」または「untainted」に設定できるワーカーノードの最大数。 この機能を無効にするには、0 に設定します。 デフォルト値は0です。
maxBulkSoftTaintTime
PreferNoSchedule を使用して、ワーカーノードが同時に「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 プロメテウス・ヒストグラム・メトリックを公開します。
okTotalUnreadyCount
maxTotalUnreadyPercentage 値に関係なく、許可される作動不能ノードの数。 デフォルト値は3です。
OSReservedCPUMili
MiliCPU。 デフォルト値は 30です。
OSReservedMemoryGi
GiB 内の予約済みメモリ量。 デフォルト値は 0.3です。
parallelDrain
ノードの並列ドレーンを許可するには、 true に設定します。 デフォルト値はfalseです。
prometheusScrape
Prometheus メトリックを送信するには、 true に設定します。 メトリックの送信を停止するには、 false に設定します。
resourcesLimitsCPU
ibm-iks-cluster-autoscaler ポッドが消費できるワーカーノードのCPU使用量の最大値。 デフォルト値は600mです。
resourcesLimitsMemory
ibm-iks-cluster-autoscaler ポッドが消費できるワーカーノードのメモリの最大量。 デフォルト値は600Miです。
resourcesRequestsCPU
ibm-iks-cluster-autoscaler ポッドが起動時に使用するワーカーノードのCPUの最小量。 デフォルト値は200mです。
resourcesRequestsMemory
ibm-iks-cluster-autoscaler ポッドが起動時に持つワーカーノードのメモリの最小量。 デフォルト値は200Miです。
retryAttempts
サービスAPIへの接続に失敗した後の再試行の最大回数。 このパラメータと「 maxRetryGap 」パラメータを使用して、クラスタ・オートスケーラーの再試行ウィンドウを調整します。| デフォルト値は 64 です。
scaleDownCandidatesPoolMinCount
以前の反復からの一部の候補が有効でなくなった場合に、スケールダウンのための追加の空でない候補と見なされるノードの最小数。 デフォルト値は 50です。
scaleDownCandidatesPoolRatio
前の反復からの一部の候補が無効になった場合に、スケールダウンのための追加の空でない候補と見なされるノードの比率。 デフォルト値は 0.1です。
scaleDownDelayAfterAdd
スケールアップ後、スケールダウン評価が再開されるまでの時間。 デフォルト値は 10mです。

scaleDownDelayAfterDelete | ノードの削除後、スケールダウン評価が再開されるまでの時間。 デフォルト値は、 scan-interval と同じで、 1m です。

scaleDownDelayAfterFailure
自動スケーリング機能が障害後に待機する必要がある時間 (分単位)。 デフォルト値は 3mです。
scaleDownEnabled
false に設定すると、自動スケーリング機能はスケールダウンを実行しません。 デフォルト値はtrueです。
scaleDownGPUUtilizationThreshold
ノード上で実行されているすべてのポッドのGPUリクエストの合計をノードの割り当て可能リソースで割ったもの。 リソース要求がこのしきい値より少ない場合、ノードはスケールダウンを検討することができる。 利用率の計算はGPUリソースのみを考慮します。 CPUとメモリの使用率は無視される。 デフォルト値は 0.5です。
scaleDownNonEmptyCandidatesCount
ドレインによるスケールダウンの候補として1回の反復で考慮される、空でないノードの最大数。| デフォルト値は 30
scaleDownUnneededTime
ワーカーノードがスケールダウンされるまでに、不要な状態である必要がある時間(分単位)。 デフォルト値は 10mです。
scaleDownUnreadyEnabled
true に設定すると、準備未完了ノードのスケールダウンがスケジュールされます。 デフォルト値はtrueです。
scaleDownUnreadyTime
自動スケーリング機能が、準備ができていないノードのスケールダウンを検討する前に待機する必要がある時間 (分単位)。 デフォルト値は 20mです。
scaleDownUtilizationThreshold
ワーカーノードの使用率のしきい値。 ワーカーノードの利用率がしきい値を下回った場合、そのワーカーノードはスケールダウンされたものとみなされます。 ワーカーノードの利用率は、そのワーカーノード上で実行されているすべてのポッドによって要求されたCPUおよびメモリリソースの合計を、そのワーカーノードのリソース容量で割った値として計算されます。| デフォルト値は 0.5 です。
scanInterval
スケールアップまたはスケールダウンをトリガーするワークロードの使用状況がないか、クラスター自動スケーリング機能がスキャンする間隔を分単位で設定します。 デフォルト値は 1mです。
skipNodesWithLocalStorage
true に設定すると、ローカル・ストレージにデータを保存しているポッドを持つワーカー・ノードはスケールダウンされません。 デフォルト値はtrueです。
skipNodesWithSystemPods
true に設定すると、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 値は 2min 値は 1 です。