Kubernetes 1.18: SIG Scheduling の変更内容

## はじめに

ここでは, Kubernetes 1.18 の CHANGELOG から SIG Scheduling に関係のあるものを抜粋しています.

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#v1180

## Changes by Kind

### Deprecation

#### kube-scheduler

- サマリメトリクス `scheduling_duration_seconds` が非推奨へ変更されます. ([#86586](https://github.com/kubernetes/kubernetes/pull/86586), [@xiaoanyunfei](https://github.com/xiaoanyunfei))
- メトリクス `scheduling_algorithm_predicate_evaluation_seconds` と `scheduling_algorithm_priority_evaluation_seconds` が非推奨となり `framework_extension_point_duration_seconds[extension_point="Filter"]` と `framework_extension_point_duration_seconds[extension_point="Score"]` へ置き換えられます. ([#86584](https://github.com/kubernetes/kubernetes/pull/86584), [@xiaoanyunfei](https://github.com/xiaoanyunfei))
- scheduler policy API の AlwaysCheckAllPredicates が非推奨へ変更されます. ([#86369](https://github.com/kubernetes/kubernetes/pull/86369), [@Huang-Wei](https://github.com/Huang-Wei))

### API Change

#### Configuration file changes

##### kube-scheduler

- kubescheduler.config.k8s.io/v1alpha2 が利用可能になり複数の scheduling profile がサポートされます. ([#87628](https://github.com/kubernetes/kubernetes/pull/87628), [@alculquicondor](https://github.com/alculquicondor))
    - HardPodAffinityWeight が ComponentConfig から PluginConfig へ移されます. ([#88002](https://github.com/kubernetes/kubernetes/pull/88002), [@alculquicondor](https://github.com/alculquicondor))
    - kube-scheduler が複数の scheduling profile を実行可能になります. Pod が与えれれた場合, scheduling profile は Pod の `.spec.schedulerName` を利用して選択されます. ([#88285](https://github.com/kubernetes/kubernetes/pull/88285), [@alculquicondor](https://github.com/alculquicondor))
        - :pencil: KEP: https://github.com/kubernetes/enhancements/blob/master/keps/sig-scheduling/20200114-multi-scheduling-profiles.md
    - scheduler extender が v1alpha2 の ComponentConfig を利用して設定できるようになります. ([#88768](https://github.com/kubernetes/kubernetes/pull/88768), [@damemi](https://github.com/damemi))
    - kubescheduler.config.k8s.io/v1alpha2 では scheduler framework の PostFilter プラグインが PreScore プラグインへ名称変更されます. ([#87751](https://github.com/kubernetes/kubernetes/pull/87751), [@skilxn-go](https://github.com/skilxn-go))
- kube-controller-manager と kube-scheduler は kube-apiserver と同じように, デフォルトでプロファイル情報を公開するようになります. これを無効にする場合には --enable-profiling=false フラグを利用します.. ([#88663](https://github.com/kubernetes/kubernetes/pull/88663), [@deads2k](https://github.com/deads2k))

##### kube-proxy

- kube-proxy に --detect-local-mode フラグがオプションとして追加されます. 有効な値は "ClusterCIDR" と "NodeCIDR" です. デフォルト値は "ClusterCIDR" でこれが指定された場合は以前と同じ振る舞いとなります. ([#87748](https://github.com/kubernetes/kubernetes/pull/87748), [@satyasm](https://github.com/satyasm))

#### Features graduated to GA

- TaintBasedEvictions が GA となります. ([#87487](https://github.com/kubernetes/kubernetes/pull/87487), [@skilxn-go](https://github.com/skilxn-go))

## Feature

- scheduler の ComponentConfig で PodTopologySpread プラグインの DefaultConstraints を指定できるようになります. ([#88671](https://github.com/kubernetes/kubernetes/pull/88671), [@alculquicondor](https://github.com/alculquicondor))
    - :pencil: KEP: https://github.com/kubernetes/enhancements/blob/master/keps/sig-scheduling/20190926-default-even-pod-spreading.md
- PodTopologySpread プラグインが terminating 状態にある Pod を除外してスケジューリングの決定を行うようになります. ([#87845](https://github.com/kubernetes/kubernetes/pull/87845), [@Huang-Wei](https://github.com/Huang-Wei))
- scheduler framework の Permit プラグインが Reserve プラグインの後, つまりスケジューリングサイクルの最後に実行されるようになります. Permit の待機はバインディングサイクルの最初のままです. ([#88199](https://github.com/kubernetes/kubernetes/pull/88199), [@mateuszlitwin](https://github.com/mateuszlitwin))
- デフォルトのバインディングが DefaultBinder としてプラグインになります. ([#87430](https://github.com/kubernetes/kubernetes/pull/87430), [@alculquicondor](https://github.com/alculquicondor))
- Pod に TopologySpreadConstraints が設定されている場合にはデフォルトの spreading scoring plugin がスキップされるようになります. ([#87566](https://github.com/kubernetes/kubernetes/pull/87566), [@skilxn-go](https://github.com/skilxn-go))
- PodTopologySpread が 1.18 ではベータとなりデフォルトで有効になります. (feature gate は EvenPodsSpread) ([#88105](https://github.com/kubernetes/kubernetes/pull/88105), [@Huang-Wei](https://github.com/Huang-Wei))
- レコードされていなかった二つのメトリクス pending_pods と schedule_attempts_total が修正されます. ([#87692](https://github.com/kubernetes/kubernetes/pull/87692), [@everpeace](https://github.com/everpeace))
- Plugin/PluginConfig と Policy は同時に利用することができなくなります. ([#88864](https://github.com/kubernetes/kubernetes/pull/88864), [@alculquicondor](https://github.com/alculquicondor))
- PreScore プラグインのインタフェースから FilteredNodesStatuses が削除されます. ([#88189](https://github.com/kubernetes/kubernetes/pull/88189), [@skilxn-go](https://github.com/skilxn-go))
- 同じプラグインに PluginConfig を複数回指定すると scheduler の起動に失敗するようになります. ([#88870](https://github.com/kubernetes/kubernetes/pull/88870), [@alculquicondor](https://github.com/alculquicondor))