Kubernetes 1.17の変更点: SIG Node の変更内容

## はじめに

[Kubernetes 1.17 の CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.17.md) から SIG-Nodeの取り組みついてまとめます。

## 1.17 の主な変更点 (What's New)

- なし

## 既知の問題 (Known Issues)

- コンテナがprivilegedなとき、volumeDevicesマッピングが無視されます

## 重大なアップグレードに関する通達 (Urgent Upgrade Notes)

- なし

## 廃止予定および削除された機能 (Deprecations and Removals)

- インスタンスタイプのbetaラベル(`beta.kubernetes.io/instance-type`)が廃止予定になり、GAと等しいラベルである`node.kubernetes.io/instance-type`を利用してください([#82049](https://github.com/kubernetes/kubernetes/pull/82049), [@andrewsykim](https://github.com/andrewsykim))
- alpha機能の`MountContainers`を削除しました([#84365](https://github.com/kubernetes/kubernetes/pull/84365), [@codenrhoden](https://github.com/codenrhoden))
- https://v1-13.docs.kubernetes.io/docs/setup/release/notes の廃止予定の発表に従って、廃止予定のディレクトリ `{kubelet_root_dir}/plugins`のウォッチおよびCSI v0のサポートを削除しました。([#84533](https://github.com/kubernetes/kubernetes/pull/84533), [@davidz627](https://github.com/davidz627))


## 注目すべき機能(Notable Features)
- stable
  - NodeLease機能がGAへ昇格しました。この機能はLeaseオブジェクトがノードからの追加のヘルスのシグナルを変更します。それとともに、ステータス自体に変更がない場合、デフォルトでNodeStatusの更新頻度を5分に減らします。([#84351](https://github.com/kubernetes/kubernetes/pull/84351), [@wojtek-t](https://github.com/wojtek-t))
      - :memo: 関連するKEPは[こちら](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/0009-node-heartbeat.md)で、これ自体は大規模クラスタでノードのハートビートにNodeStatusを利用するにはオブジェクトが大きすぎ、また更新が頻繁なため、etcdへの負荷になっている問題への回避策のようです。ハートビート用にLeaseオブジェクトを新たに利用しているようです。
      - :memo: Leaseオブジェクトのためのコントローラは[こちら](https://github.com/kubernetes/kubernetes/blob/v1.17.0/pkg/kubelet/nodelease/controller.go)で、Leaseオブジェクトは[こちら](https://github.com/kubernetes/api/blob/master/coordination/v1/types.go)です。

- beta
  - `WindowsRunAsUserName`機能がベータになりました([#84882](https://github.com/kubernetes/kubernetes/pull/84882), [@marosset](https://github.com/marosset))

<!--
- Graduate TaintNodesByCondition to GA in 1.17. (feature gate will be removed in 1.18) ([#82703](https://github.com/kubernetes/kubernetes/pull/82703), [@draveness](https://github.com/draveness))
- Promote NodeLease feature to GA.
The feature make Lease object changes an additional healthiness signal from Node. Together with that, we reduce frequency of NodeStatus updates to 5m by default in case of no changes to status itself ([#84351](https://github.com/kubernetes/kubernetes/pull/84351), [@wojtek-t](https://github.com/wojtek-t))
-->

## その他の注目すべき機能(Other notable changes)

- ミラーポッドはそれらを作成したノードのownerReferenceを含むようになりました。([#84485](https://github.com/kubernetes/kubernetes/pull/84485), [@tallclair](https://github.com/tallclair))
  - :memo: 追加されるownerReferenceについては[こちら](https://github.com/kubernetes/enhancements/blob/master/keps/sig-auth/20190916-noderestriction-pods.md#ownerreferences)を参照ください
- TopologyManagerのsingle-numa-policyのバグを修正しました。以前、best-effortなPodはTopologyAffinityエラーにより終了状態になっていた。現在は期待した通りに動くようになっています。([#83777](https://github.com/kubernetes/kubernetes/pull/83777), [@lmdaly](https://github.com/lmdaly))
- 動的なkubeletのconfigに関するメトリクスが登録されないエラーを修正しました ([#83184](https://github.com/kubernetes/kubernetes/pull/83184), [@odinuge](https://github.com/odinuge))
- ContainerCannotRunが原因でコンテナが失敗した場合、TerminationMessagePolicy: FallbackToLogsOnError を使用しないでください。これにより、より有用なログがマスクされます。 ([#81280](https://github.com/kubernetes/kubernetes/pull/81280), [@yqwang-ms](https://github.com/yqwang-ms))
    - :memo: 上記のようなチェンジログが記載されていました、この問題が修正されたPRのように見えました
- 使用可能なNUMAノードを検出するときに、可能なノードの代わりにオンラインノードを使用するようになりました([#83196](https://github.com/kubernetes/kubernetes/pull/83196), [@zouyee](https://github.com/zouyee))
- wincatでport forwardをするときにIPv4を使うようになりました([#83036](https://github.com/kubernetes/kubernetes/pull/83036), [@liyanhui1228](https://github.com/liyanhui1228))
- 単一のstatic podファイルおよびhttp endpointsから取得するpodのファイルは10MBより大きなものは扱えません。HTTP probeペイレードは現在10KBへ切り捨てられます。([#82669](https://github.com/kubernetes/kubernetes/pull/82669), [@rphillips](https://github.com/rphillips))
- exec rediness/liveness probeのbodyの長さが制限されます。remote CRIとDocker shimは、最大16MBの出力を読み取り、そのうちのexecプローブ自体は10kbを検査します。([#82514](https://github.com/kubernetes/kubernetes/pull/82514), [@dims](https://github.com/dims))
  - :memo: これに関連する修正でexec probeが無限の出力をした場合にもkubeletがノードのリソースを食いつぶしてしまう可能性のある問題が修正されているようです
- Kubelet: kubeletがサーブする証明書の`server_rotation_seconds`という証明書のローテートの経過時間をレポートするヒストグラムのメトリクスが追加されました。 ([#84534](https://github.com/kubernetes/kubernetes/pull/84534), [@sambdavidson](https://github.com/sambdavidson))
- デフォルトのNodeStatusReportFrequencyを5分に減らします。この変更により、ノードステータスが変更されない場合は、定期的にノードステータスの更新が5分ごとに送信されます（そうでない場合は、10秒で送信されます）。([#84007](https://github.com/kubernetes/kubernetes/pull/84007), [@wojtek-t](https://github.com/wojtek-t))
- topology managerはNUMAをGuaranteedなQoSのPodだけでなく、NUMA局所性に関してすべてのQoSクラスのPodのリソースを調整するようになりました。 ([#83492](https://github.com/kubernetes/kubernetes/pull/83492), [@ConnorDoyle](https://github.com/ConnorDoyle))
- node leaseオブジェクトがOwnerReferenceなしで作成された可能性があるというバグを修正しました。([#84998](https://github.com/kubernetes/kubernetes/pull/84998), [@wojtek-t](https://github.com/wojtek-t))
- プラグイン登録およびdevice pluginのパッケージの外部向けAPIがk8s.io/kubelet/pkg/apis/で利用可能になりました([#83551](https://github.com/kubernetes/kubernetes/pull/83551), [@dims](https://github.com/dims))


<!--

- Mirror pods now include an ownerReference for the node that created them. ([#84485](https://github.com/kubernetes/kubernetes/pull/84485), [@tallclair](https://github.com/tallclair))
- Fixed a bug in the single-numa-policy of the TopologyManager. Previously, best-effort pods would result in a terminated state with a TopologyAffinity error. Now they will run as expected. ([#83777](https://github.com/kubernetes/kubernetes/pull/83777), [@lmdaly](https://github.com/lmdaly))
- Fixed a bug in the single-numa-node policy of the TopologyManager.  Previously, pods that only requested CPU resources and did not request any third-party devices would fail to launch with a TopologyAffinity error. Now they will launch successfully. ([#83697](https://github.com/kubernetes/kubernetes/pull/83697), [@klueska](https://github.com/klueska))
- Fix error where metrics related to dynamic kubelet config isn't registered ([#83184](https://github.com/kubernetes/kubernetes/pull/83184), [@odinuge](https://github.com/odinuge))
- If container fails because ContainerCannotRun, do not utilize the FallbackToLogsOnError TerminationMessagePolicy, as it masks more useful logs. ([#81280](https://github.com/kubernetes/kubernetes/pull/81280), [@yqwang-ms](https://github.com/yqwang-ms))
- Use online nodes instead of possible nodes when discovering available NUMA nodes ([#83196](https://github.com/kubernetes/kubernetes/pull/83196), [@zouyee](https://github.com/zouyee))
- Use IPv4 in wincat port forward. ([#83036](https://github.com/kubernetes/kubernetes/pull/83036), [@liyanhui1228](https://github.com/liyanhui1228))
- Single static pod files and pod files from http endpoints cannot be larger than 10 MB. HTTP probe payloads are now truncated to 10KB. ([#82669](https://github.com/kubernetes/kubernetes/pull/82669), [@rphillips](https://github.com/rphillips))
- Limit the body length of exec readiness/liveness probes. remote CRIs and Docker shim read a max of 16MB output of which the exec probe itself inspects 10kb. ([#82514](https://github.com/kubernetes/kubernetes/pull/82514), [@dims](https://github.com/dims))
- Kubelet: Added kubelet serving certificate metric `server_rotation_seconds` which is a histogram reporting the age of a just rotated serving certificate in seconds. ([#84534](https://github.com/kubernetes/kubernetes/pull/84534), [@sambdavidson](https://github.com/sambdavidson))
- Reduce default NodeStatusReportFrequency to 5 minutes. With this change, periodic node status updates will be send every 5m if node status doesn't change (otherwise they are still send with 10s).
  
  Bump NodeProblemDetector version to v0.8.0 to reduce forced NodeStatus updates frequency to 5 minutes. ([#84007](https://github.com/kubernetes/kubernetes/pull/84007), [@wojtek-t](https://github.com/wojtek-t))
- The topology manager aligns resources for pods of all QoS classes with respect to NUMA locality, not just Guaranteed QoS pods. ([#83492](https://github.com/kubernetes/kubernetes/pull/83492), [@ConnorDoyle](https://github.com/ConnorDoyle))
- Fix a bug that a node Lease object may have been created without OwnerReference. ([#84998](https://github.com/kubernetes/kubernetes/pull/84998), [@wojtek-t](https://github.com/wojtek-t))
- External facing APIs in plugin registration and device plugin packages are now available under k8s.io/kubelet/pkg/apis/ ([#83551](https://github.com/kubernetes/kubernetes/pull/83551), [@dims](https://github.com/dims))

-->