Kubernetes 1.18 SIG-Node変更点調査

## はじめに

このページでは[Kubernetes 1.18のChangelog](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md)を基に、SIG Nodeに関連する変更内容をまとめています。

## What's New(新情報)

### Topology Manager がベータになりました

<!-- A beta feature of Kubernetes in release 1.18, the [Topology Manager feature](https://github.com/nolancon/website/blob/f4200307260ea3234540ef13ed80de325e1a7267/content /en/docs/tasks/administer-cluster/topology-manager.md) enables NUMA alignment of CPU and devices (such as SR-IOV VFs) that will allow your workload to run in an environment optimized for low-latency. -->
[Topology Manager](https://kubernetes.io/docs/tasks/administer-cluster/topology-manager/) を利用すると、CPU とデバイス（SR-IOV VFs など）のリソース割り当てを調整し、低レイテンシ用に最適化された環境でワークロードが実行できます。

<!-- Prior to the introduction of the Topology Manager, the CPU and Device Manager would make resource allocation decisions independent of each other.This could result in undesirable allocations on multi-socket systems, causing degraded performance on latency critical applications.  -->
Topology Manager が導入される前は、CPU とデバイスマネージャーのリソース割り当て方法はお互いに独立していたため、複数の CPU を搭載したマルチソケットのサーバーで望ましくないリソースの割り当てが発生し、アプリケーション性能を低下させる可能性がありました。

## Known Issues(既知の問題点)

- なし

## Urgent Upgrade Notes(必ず一読してからアップグレードしなければならない事項)

kubelet:

- `--enable-cadvisor-endpoints`がデフォルトで無効になりました。cAdvisorのv1 Json APIへアクセスする必要があるときは明示的にkubeletのコマンドラインで有効にする必要があります。このフラグは1.15で非推奨になり、1.19で削除されます。([#87440](https://github.com/kubernetes/kubernetes/pull/87440), [@dims](https://github.com/dims))

## Cahnges by Kind(種類別の変更)

### Deprecation
kubelet:

<!--
- The StreamingProxyRedirects feature and --redirect-container-streaming flag are deprecated, and will be removed in a future release. The default behavior (proxy streaming requests through the kubelet) will be the only supported option. If you are setting --redirect-container-streaming=true, then you must migrate off this configuration. The flag will no longer be able to be enabled starting in v1.20. If you are not setting the flag, no action is necessary. (#88290, @tallclair) [SIG API Machinery and Node] -->
- `StreamingProxyRedirects`と`--redirect-container-streaming`フラグが非推奨になり、将来のリリースで削除される予定です。デフォルトの挙動(Kubeletを通してストリーミングリクエストをプロキシする)のみが唯一サポートされるオプションとなります。もし`--redirect-container-streaming=true`に設定してあるなら、このコンフィグをオフにmigrateしなければなりません。そのフラグはv1.20から有効にできなくなります。フラグを設定していない場合、アクションは不要です。([#88290](https://github.com/kubernetes/kubernetes/pull/88290), [@tallclair](https://github.com/tallclair))
  - :memo: この機能の削除の詳細については[こちらのKEP](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/20191205-container-streaming-requests.md)で確認できます

- resouce metrics endpoint `/metrics/resource/v1alpha1`と、このエンドポイントで提供されるメトリクスは非推奨になりました。`/metrics/resource`エンドポイントにより提供される次のメトリクスを利用するようにしてください。([#86282](https://github.com/kubernetes/kubernetes/pull/86282), [@RainbowMango](https://github.com/RainbowMango))
  - `scrape_error` --> `scrape_error`
  - `node_cpu_usage_seconds_total` -> `node_cpu_usage_seconds`
  - `node_memory_working_set_bytes` --> `node_memory_working_set_bytes`
  - `container_cpu_usage_seconds_total` --> `container_cpu_usage_seconds`
  - `container_memory_working_set_bytes` --> `container_memory_working_set_bytes`
  - `scrape_error` --> `scrape_error`
	  - :memo: scrape_errorがなぜ2回も登場しているのかわかりませんが、Change Log通りに記載しておきます

Other deprecations:

- `k8s.io/node-api` コンポーネントはアップデートされなくなりました。代わりに`k8s.io/api`にあるRuntimeClass typeを利用し、生成されたクライアントはk8s.io/client-go内にあります。([#87503](https://github.com/kubernetes/kubernetes/pull/87503), [@liggitt](https://github.com/liggitt))

### API Change
#### Configuration file changes

kube-proxy:

- Kubelet pod resources APIはアクティブなPodのみに関する情報を提供するようになりました。([#79409](https://github.com/kubernetes/kubernetes/pull/79409), [@takmatsu](https://github.com/takmatsu))
  - :memo: kube-proxyの項目に入っていましたが、kubeletの変更でした。

Features graduated to beta:

- StartupProbe([#83437](https://github.com/kubernetes/kubernetes/pull/83437),[@matthyx](https://github.com/matthyx))
  - :memo: v1.16からalphaとして提供されてきたstartupProbeがbetaとなりました:tada:

## Feature(機能追加)

- kubeletとデフォルトのdocker runtimeは、ターゲットコンテナのLinuxプロセス名前空間でのエフェメラルコンテナの実行をサポートするようになりました。他のコンテナ runtimeは、そのruntimeで使用可能なる前に、この機能のサポートを実装する必要があります。([#84731](https://github.com/kubernetes/kubernetes/pull/84731), [@verb](https://github.com/verb))

- 
CPUManagerのステートファイルの基本的な形式が変更されました。アップグレードはシームレスである必要がありますが、以前の形式の読み取りに依存するサードパーティツールは更新する必要があります。([#84731](https://github.com/kubernetes/kubernetes/pull/84731), [@verb](https://github.com/verb))

- "--node-ip ::"をkubeletへ渡して、ノードのプライマリアドレスとして使用するIPv6アドレスを自動検出する必要があることを示すことができます([#85850](https://github.com/kubernetes/kubernetes/pull/85850), [@danwinship](https://github.com/danwinship))


### Metrics

- 証明書のローテーションを実行できない場合、`Kubeletはserver_expiration_renew_failure`および`client_expiration_renew_failure`メトリックカウンターをエクスポートするようになりました。 （[#84614](https://github.com/kubernetes/kubernetes/pull/84614)、[@rphillips](https://github.com/rphillips)）

## その他

- Windows contaiersでCPU limitsが尊重されるようになりました。ノードが過剰にプロビジョニングされている場合、重み付けは使用されず、limitsのみが考慮されます。([#86101](https://github.com/kubernetes/kubernetes/pull/86101), [@PatrickLang](https://github.com/PatrickLang))

- Podがephemeral storageの制限を超えることによるevictionは`kubelet_evictions`メトリクスでアラート通知できるようになりました。([#87906](https://github.com/kubernetes/kubernetes/pull/87906), [@smarterclayton](https://github.com/smarterclayton))

- PodがIPアドレスを取得するのを防ぐリグレッションを修正しました([#85993](https://github.com/kubernetes/kubernetes/pull/85993), [@chendotjs](https://github.com/chendotjs))

- ノードのイベントで"involvedObject"の欠落している"apiVersion"を修正しました。([#87537](https://github.com/kubernetes/kubernetes/pull/87537), [@uthark](https://github.com/uthark))

- ポッドボリュームの処理が失敗したときに、kubeletによるPVC / PVオブジェクトの繰り返しフェッチを防止する修正。これにより、これらのエラーシナリオでAPIサーバーが破損するのを防ぐことができますが、ポッドの処理量のエラーによっては、再試行までに最大2〜3分かかることがあります。([#88141](https://github.com/kubernetes/kubernetes/pull/88141), [@tedyu](https://github.com/tedyu))

- TopologyManagerのバグを修正しました。以前、TopologyMaangerは何らかの方法でシリアル化された場合にのみ配置を保証していました。コンテナ作成のすべてのシナリオで配置が保証されるようになりました。([#87759](https://github.com/kubernetes/kubernetes/pull/87759), [@klueska](https://github.com/klueska))

- kubeletがpodのreadyステータスの更新を失敗するというリグレッションを修正しました([#84951](https://github.com/kubernetes/kubernetes/pull/84951), [@tedyu](https://github.com/tedyu))

- kubeletが誤って同時にPodのReconcilation loopsを動かし、クラッシュする問題が修正されました。([#89055](https://github.com/kubernetes/kubernetes/pull/89055), [@tedyu](https://github.com/tedyu))

- 削除または再作成されたPodでのkubeletによって報告されたPodのステータスに関する問題を修正しました。([#86320](https://github.com/kubernetes/kubernetes/pull/86320), [@liggitt](https://github.com/liggitt))

- kubeletがクライアント証明書ローテーションの場合にクラッシュする問題を修正([#88079](https://github.com/kubernetes/kubernetes/pull/88079), [@liggitt](https://github.com/liggitt))

<!--
Kubelet metrics gathered through metrics-server or prometheus should no longer timeout for Windows nodes running more than 3 pods. 
-->
- metrics-serverまたはprometheusを介して収集されたKubeletメトリックは、4つ以上のポッドを実行しているWindowsノードでタイムアウトしなくなりました。([#87730](https://github.com/kubernetes/kubernetes/pull/87730), [@marosset](https://github.com/marosset))

<!--
Kubelet metrics have been changed to buckets. For example the exec/{podNamespace}/{podID}/{containerName} is now just exec. (#87913, @cheftako) [SIG Node]
-->
- Kubeletメトリックがバケットに変更されました。たとえば、exec/{podNamespace}/{podID}/{containerName}は単なるexecです。([#87913](https://github.com/kubernetes/kubernetes/pull/87913), [@marosset](https://github.com/marosset))


<!--
Kubelets perform fewer unnecessary pod status update operations on the API server. (#88591, @smarterclayton) [SIG Node and Scalability]
-->
- KubeletはAPIサーバに不必要なPodステータスの更新操作を実行しなくなりました([#88591](https://github.com/kubernetes/kubernetes/pull/88591), [#smarterclayton](https://github.com/smarterclayton))