Kubernetes 1.21: アップグレード時の注意事項

# はじめに

このエントリは、[Kubernetes 1.21 の CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.21.md#v1210) からアップグレード時に確認すべき内容をまとめています。
具体的には以下の項目を翻訳し、適宜補足やコメントを追加しています。

- Known Issues
- Urgent Upgrade Notes

このエントリでは翻訳部分と補足などの筆者の追加のコメントは :pencil: のあとに追加するようにしています。

## Known Issues

<!--
### `TopologyAwareHints` feature falls back to default behavior

The feature gate currently falls back to the default behavior in most cases. Enabling the feature gate will add hints to `EndpointSlices`, but functional differences are only observed in non-dual stack kube-proxy implementation. [The fix will be available in coming releases](https://github.com/kubernetes/kubernetes/pull/100804).
-->
### `TopologyAwareHints` 機能はデフォルトの振る舞いへフォールバックする

FeatureGateは多くの場合デフォルトの振る舞いへフォールバックします。FeatureGateを有効にすると`EndpointSlices`へヒントが追加されますが、機能的な違いが見られるのはデュアルスタックでないkube-proxyの実装でのみ見られます。[この修正は将来のリリースで利用可能になります](https://github.com/kubernetes/kubernetes/pull/100804)

## Urgent Upgrade Notes

<!--
- Kube-proxy's IPVS proxy mode no longer sets the net.ipv4.conf.all.route_localnet sysctl parameter. Nodes upgrading will have net.ipv4.conf.all.route_localnet set to 1 but new nodes will inherit the system default (usually 0). If you relied on any behavior requiring net.ipv4.conf.all.route_localnet, you must set ensure it is enabled as kube-proxy will no longer set it automatically. This change helps to further mitigate CVE-2020-8558. ([#92938](https://github.com/kubernetes/kubernetes/pull/92938), [@lbernail](https://github.com/lbernail)) [SIG Network and Release]
 - Kubeadm: during "init" an empty cgroupDriver value in the KubeletConfiguration is now always set to "systemd" unless the user is explicit about it. This requires existing machine setups to configure the container runtime to use the "systemd" driver. Documentation on this topic can be found here: https://kubernetes.io/docs/setup/production-environment/container-runtimes/. When upgrading existing clusters / nodes using "kubeadm upgrade" the old cgroupDriver value is preserved, but in 1.22 this change will also apply to "upgrade". For more information on migrating to the "systemd" driver or remaining on the "cgroupfs" driver see: https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/. ([#99471](https://github.com/kubernetes/kubernetes/pull/99471), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle]
 - Newly provisioned PVs by EBS plugin will no longer use the deprecated "failure-domain.beta.kubernetes.io/zone" and "failure-domain.beta.kubernetes.io/region" labels. It will use "topology.kubernetes.io/zone" and "topology.kubernetes.io/region" labels instead. ([#99130](https://github.com/kubernetes/kubernetes/pull/99130), [@ayberk](https://github.com/ayberk)) [SIG Cloud Provider, Storage and Testing]
 - Newly provisioned PVs by OpenStack Cinder plugin will no longer use the deprecated "failure-domain.beta.kubernetes.io/zone" and "failure-domain.beta.kubernetes.io/region" labels. It will use "topology.kubernetes.io/zone" and "topology.kubernetes.io/region" labels instead. ([#99719](https://github.com/kubernetes/kubernetes/pull/99719), [@jsafrane](https://github.com/jsafrane)) [SIG Cloud Provider and Storage]
 - Newly provisioned PVs by gce-pd will no longer have the beta FailureDomain label. gce-pd volume plugin will start to have GA topology label instead. ([#98700](https://github.com/kubernetes/kubernetes/pull/98700), [@Jiawei0227](https://github.com/Jiawei0227)) [SIG Cloud Provider, Storage and Testing]
 - OpenStack Cinder CSI migration is on by default, Clinder CSI driver must be installed on clusters on OpenStack for Cinder volumes to work. ([#98538](https://github.com/kubernetes/kubernetes/pull/98538), [@dims](https://github.com/dims)) [SIG Storage]
 - Remove alpha `CSIMigrationXXComplete` flag and add alpha `InTreePluginXXUnregister` flag. Deprecate `CSIMigrationvSphereComplete` flag and it will be removed in v1.22. ([#98243](https://github.com/kubernetes/kubernetes/pull/98243), [@Jiawei0227](https://github.com/Jiawei0227))
 - Remove storage metrics `storage_operation_errors_total`, since we already have `storage_operation_status_count`.And add new field `status` for `storage_operation_duration_seconds`, so that we can know about all status storage operation latency. ([#98332](https://github.com/kubernetes/kubernetes/pull/98332), [@JornShen](https://github.com/JornShen)) [SIG Instrumentation and Storage]
 - The metric `storage_operation_errors_total` is not removed, but is marked deprecated, and the metric `storage_operation_status_count` is marked deprecated. In both cases the `storage_operation_duration_seconds` metric can be used to recover equivalent counts (using `status=fail-unknown` in the case of `storage_operations_errors_total`). ([#99045](https://github.com/kubernetes/kubernetes/pull/99045), [@mattcary](https://github.com/mattcary))
 - `ServiceNodeExclusion`, `NodeDisruptionExclusion` and `LegacyNodeRoleBehavior` features have been promoted to GA. `ServiceNodeExclusion` and `NodeDisruptionExclusion` are now unconditionally enabled, while `LegacyNodeRoleBehavior` is unconditionally disabled. To prevent control plane nodes from being added to load balancers automatically, upgrade users need to add "node.kubernetes.io/exclude-from-external-load-balancers" label to control plane nodes. ([#97543](https://github.com/kubernetes/kubernetes/pull/97543), [@pacoxu](https://github.com/pacoxu))
-->

- kube-proxy の IPVS Proxy モードで、sysctl の `net.ipv4.conf.all.route_localnet` を設定しなくなりました。アップグレードしたノードは `net.ipv4.conf.all.route_localnet` が 1 に設定されていますが、新規ノードはシステムのデフォルト(通常 0)を継承します。kube-proxy は自動で設定しなくなるため、もし `net.ipv4.conf.all.route_localnet` の設定に依存している場合は、自身で設定する必要があります。この変更は CVE-2020-8558 をさらに軽減します。 。([#92938](https://github.com/kubernetes/kubernetes/pull/92938), [@lbernail](https://github.com/lbernail)) [SIG Network and Release]
- kubeadm: "init"時に、 KubeletConfigurationにはcgroupDriverの値が空に設定されていましたが、明示的に指定しない限り常に"systemd"が設定されるようになりました。このため既存のマシンのセットアップでは"systemd"ドライバを使用するようにコンテナランタイムを構成する必要があります。このトピックに関するドキュメントは[こちら](https://kubernetes.io/docs/setup/production-environment/container-runtimes/)を参照してください。`kubeadm upgrade`を利用して既存のクラスタ/ノードをアップグレードする時、古いcgroupDriverの値が保持されますが、1.22ではこの変更が`upgrade`にも適用されます。`systemd` driverへの移行や`cgroup` driverを利用し続けることに関する詳細は、https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/ を参照してください。(#99471, @neolit123) [SIG Cluster Lifecycle]
- 新たにEBS PluginによりプロビジョニングされたPVは非推奨の`failure-domain.beta.kubernetes.io/zone`と`failure-domain.beta.kubernetes.io/region`ラベルは利用されません。代わりに`topology.kubernetes.io/zone`と`topology.kubernetes.io/region`が利用されます。([#99130](https://github.com/kubernetes/kubernetes/pull/99130), [@ayberk](https://github.com/ayberk)) [SIG Cloud Provider, Storage and Testing]
- 新たにOpenStackによりプロビジョニングされたPVは非推奨の`failure-domain.beta.kubernetes.io/zone`と`failure-domain.beta.kubernetes.io/region`ラベルは利用されません。代わりに`topology.kubernetes.io/zone`と`topology.kubernetes.io/region`が利用されます。([#99719](https://github.com/kubernetes/kubernetes/pull/99719), [@jsafrane](https://github.com/jsafrane)) [SIG Cloud Provider and Storage]
- gce-pdによりプロビジョニングされたPVはベータのFailureDomainラベルをりようしません。代わりにGAのトポロジーラベルが利用されます。([#98700](https://github.com/kubernetes/kubernetes/pull/98700), [@Jiawei0227](https://github.com/Jiawei0227)) [SIG Cloud Provider, Storage and Testing]
- OpenStack Cinder CSIの移行はデフォルトで実行され、Cinder Volume driverが動作するにはCinder CSI driverがOpenStackのクラスタ上へインストールされている必要があります。([#98538](https://github.com/kubernetes/kubernetes/pull/98538), [@dims](https://github.com/dims)) [SIG Storage]
- alphaの`CSIMigrationXXComplete`フラグは削除され、alphaの`InTreePluginXXUnregister`フラグが追加されました。`CSIMigrationvSphereComplete`フラグはv1.22で削除予定です。([#98243](https://github.com/kubernetes/kubernetes/pull/98243), [@Jiawei0227](https://github.com/Jiawei0227))
- `storage_operation_status_count`メトリクスがすでに存在するため、`storage_operation_errors_total`メトリクスを削除しました。新たに`status`フィールドが`storage_operation_duration_seconds`へ追加され、全てのストレージオペレーションのステータスに対してレイテンシーを知ることができるようになりました。([#98332](https://github.com/kubernetes/kubernetes/pull/98332), [@JornShen](https://github.com/JornShen)) [SIG Instrumentation and Storage]
- `ServiceNodeExclusion`, `NodeDisruptionExclusion` そして `LegacyNodeRoleBehavior` 機能がGAへとなりました。`ServiceNodeExclusion` と `NodeDisruptionExclusion`は現在無条件に有効となり、一方で`LegacyNodeRoleBehavior`は無条件に無効となりました。コントロールプレーンノードが自動的にロードバランサーに追加されないようにするには、ユーザが`node.kubernetes.io/exclude-from-external-load-balancers`ラベルをコントロールプレーンのノードへ追加する必要があります。([#97543](https://github.com/kubernetes/kubernetes/pull/97543), [@pacoxu](https://github.com/pacoxu))