Update ja/docs/concepts/scheduling-eviction/scheduler-perf-tuning.md

This commit is contained in:
s-ito-ts 2021-03-22 08:49:54 +00:00
parent ed08bbfbb6
commit 4119fcd608
1 changed files with 48 additions and 15 deletions

View File

@ -1,7 +1,7 @@
---
title: スケジューラーのパフォーマンスチューニング
content_type: concept
weight: 70
weight: 80
---
<!-- overview -->
@ -15,12 +15,44 @@ weight: 70
このページでは、大規模のKubernetesクラスターにおけるパフォーマンス最適化のためのチューニングについて説明します。
<!-- body -->
## スコア付けするノードの割合
大規模クラスターでは、レイテンシー(新規Podをすばやく配置)と精度(スケジューラーが不適切な配置を行うことはめったにありません)の間でスケジューリング結果を調整するスケジューラーの動作をチューニングできます。
Kubernetes 1.12以前では、Kube-schedulerがクラスター内の全てのードに対して割り当て可能かをチェックし、実際に割り当て可能なードのスコア付けをしていました。Kubernetes 1.12では新機能を追加し、ある数の割り当て可能なノードが見つかった時点で、割り当て可能なノードの探索を止めれるようになりました。これにより大規模なクラスターにおけるスケジューラーのパフォーマンスが向上しました。その数はクラスターのサイズの割合(%)として指定されます。この割合は`percentageOfNodesToScore`というオプションの設定項目によって指定可能です。この値の範囲は1から100までです。100より大きい値は100%として扱われます。0を指定したときは、この設定オプションを指定しないものとして扱われます。Kubernetes 1.14では、この値が指定されていないときは、スコア付けするードの割合をクラスターのサイズに基づいて決定するためのメカニズムがあります。このメカニズムでは100ードのクラスターに対しては50%の割合とするような線形な式を使用します。5000ードのクラスターに対しては10%となります。自動で算出される割合の最低値は5%となります。言い換えると、クラスターの規模がどれだけ大きくても、ユーザーがこの値を5未満に設定しない限りスケジューラーは少なくても5%のクラスター内のノードをスコア付けすることになります。
このチューニング設定は、kube-scheduler設定の`percentageOfNodesToScore`で設定できます。KubeSchedulerConfiguration設定は、クラスター内のードにスケジュールするための閾値を決定します。
### 閾値の設定
`percentageOfNodesToScore`オプションは、0から100までの数値を受け入れます。0は、kube-schedulerがコンパイル済みのデフォルトを使用することを示す特別な値です。
`percentageOfNodesToScore`に100より大きな値を設定した場合、kube-schedulerの挙動は100を設定した場合と同様となります。
この値を変更するためには、kube-schedulerの設定ファイル(これは`/etc/kubernetes/config/kube-scheduler.yaml`の可能性が高い)を編集し、スケジューラーを再起動します。
この変更をした後、
```bash
kubectl get pods -n kube-system | grep kube-scheduler
```
を実行して、kube-schedulerコンポーネントが正常であることを確認できます。
## ノードへのスコア付けの閾値 {#percentage-of-nodes-to-score}
スケジューリング性能を改善するため、kube-schedulerは割り当て可能なードが十分に見つかるとードの検索を停止できます。大規模クラスターでは、すべてのードを考慮する単純なアプローチと比較して時間を節約できます。
クラスター内のすべてのードに対する十分なード数を整数パーセンテージで指定します。kube-schedulerは、これをード数に変換します。スケジューリング中に、kube-schedulerが設定されたパーセンテージを超える十分な割り当て可能なードを見つけた場合、kube-schedulerはこれ以上割り当て可能なードを探すのを止め、[スコアリングフェーズ](/docs/concepts/scheduling-eviction/kube-scheduler/#kube-scheduler-implementation)に進みます。
[スケジューラーはどのようにノードを探索するか](#how-the-scheduler-iterates-over-nodes)で処理を詳しく説明しています。
### デフォルトの閾値
閾値を指定しない場合、Kubernetesは100ードのクラスタでは50%、5000ードのクラスタでは10%になる線形方程式を使用して数値を計算します。自動計算の下限は5%です。
つまり、明示的に`percentageOfNodesToScore`を5未満の値を設定しない限り、クラスターの規模に関係なく、kube-schedulerは常に少なくともクラスターの5%のノードに対してスコア付けをします。
スケジューラーにクラスター内のすべてのノードに対してスコア付けをさせる場合は、`percentageOfNodesToScore`の値に100を設定します。
## 例
`percentageOfNodesToScore`の値を50%に設定する例は下記のとおりです。
@ -35,22 +67,23 @@ algorithmSource:
percentageOfNodesToScore: 50
```
## percentageOfNodesToScoreのチューニング
`percentageOfNodesToScore`は1から100の間の範囲である必要があり、デフォルト値はクラスターのサイズに基づいて計算されます。また、クラスターのサイズの最小値は50ードとハードコードされています。
{{< note >}}
割り当て可能なードが50未満のクラスターにおいては、割り当て可能なードの探索を止めるほどードが多くないため、スケジューラーは全てのードをチェックします。
割り当て可能なードが50以下のクラスタでは、スケジューラの検索を早期に停止するのに十分な割り当て可能なードがないため、スケジューラはすべてのードをチェックします。
小規模クラスタでは、`percentageOfNodesToScore`に低い値を設定したとしても、同様の理由で変更による影響は全くないか、ほとんどありません。
クラスターのノード数が数百以下の場合は、この設定オプションをデフォルト値のままにします。変更してもスケジューラの性能を大幅に改善する可能性はほとんどありません。
{{< /note >}}
**この機能を無効にするためには**、`percentageOfNodesToScore`を100に設定してください。
この値を設定する際に考慮するべき重要な注意事項として、割り当て可能ードのチェック対象のードが少ないと、一部のードはPodの割り当てのためにスコアリングされなくなります。結果として、高いスコアをつけられる可能性のあるードがスコアリングフェーズに渡されることがありません。これにより、Podの配置が理想的なものでなくなります
kube-schedulerが頻繁に不適切なPodの配置を行わないよう、`percentageOfNodesToScore`をかなり低い値を設定することは避けるべきです。スケジューラのスループットがアプリケーションにとって致命的で、ードのスコアリングが重要でない場合を除いて、10%未満に設定することは避けてください。言いかえると、割り当て可能な限り、Podは任意のード上で稼働させるのが好ましいです。
### percentageOfNodesToScoreのチューニング
`percentageOfNodesToScore`は1から100の間の範囲である必要があり、デフォルト値はクラスターのサイズに基づいて計算されます。また、クラスターのサイズの最小値は50ードとハードコードされています。これは数百のードを持つようなクラスターにおいてこの値を50より低い値に変更しても、スケジューラーが検出する割り当て可能なードの数に大きな影響を与えないことを意味します。このオプションは意図的なものです。その理由としては、小規模のクラスターにおいてパフォーマンスを著しく改善する可能性が低いためです。1000ードを超える大規模なクラスターでこの値を低く設定すると、パフォーマンスが著しく改善される可能性があります。
この値を設定する際に考慮するべき重要な注意事項として、割り当て可能ードのチェック対象のードが少ないと、一部のードはPodの割り当てのためにスコアリングされなくなります。結果として、高いスコアをつけられる可能性のあるードがスコアリングフェーズに渡されることがありません。これにより、Podの配置が理想的なものでなくなります。したがって、この値をかなり低い割合に設定すべきではありません。一般的な経験則として、この値を10未満に設定しないことです。スケジューラーのスループットがアプリケーションにとって致命的で、ードのスコアリングが重要でないときのみ、この値を低く設定するべきです。言いかえると、割り当て可能な限り、Podは任意のード上で稼働させるのが好ましいです。
クラスターが数百のノードを持つ場合やそれに満たない場合でも、この設定オプションのデフォルト値を低くするのを推奨しません。デフォルト値を低くしてもスケジューラーのパフォーマンスを大幅に改善することはありません。
### スケジューラーはどのようにノードを探索するか
## スケジューラーはどのようにノードを探索するか {#how-the-scheduler-iterates-over-nodes}
このセクションでは、この機能の内部の詳細を理解したい人向けになります。