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


# はじめに

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

- Known Issues
- Urgent Upgrade Notes

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

## Known Issues

### 複数のコンテナを持つGuaranteed PodでCPUとメモリマネージャーが正しく機能していません

複数のコンテナーを持つGuaranteedポッドが、CPU、メモリ、およびデバイスマネージャーの設定された割り当てで正しく機能しないというリグレッションバグが見つかりました。[今後のリリースで修正される予定です](https://github.com/kubernetes/kubernetes/pull/103979)。

- :pencil: リリースノートに載っていませんが、v1.22.1で修正されているようです。

<!--
### CPU and Memory manager are not working correctly for Guaranteed Pods with multiple containers

A regression bug was found where guaranteed Pods with multiple containers do not work properly with set allocations for CPU, Memory, and Device manager. [The fix will be availability in coming releases](https://github.com/kubernetes/kubernetes/pull/103979).
-->

### `CSIMigrationvSphere` feature gate は新たなCRD APIへマイグレートされていない

CSIMigrationvSphereのFeature Gateが有効になっている場合、ユーザーはKubernetes v1.22にアップグレードしてはいけません。
vSphere CSIドライバは、v1beta1のCRD APIを使用するため、まだKubernetes V1.22をサポートしていません。
v1.22のサポートは今後のリリースで追加されます。
サポートされているKubernetesリリースについては、[vSphere CSI Driver version](https://vsphere-csi-driver.sigs.k8s.io/compatiblity_matrix.html#compatibility-matrix-for-vsphere-csi-driver)のドキュメントを確認してください。


<!--
### `CSIMigrationvSphere` feature gate has not migrated to new CRD APIs

If CSIMigrationvSphere feature gate is enabled, user should not upgrade to Kubernetes v1.22. vSphere CSI Driver does not support Kubernetes v1.22 yet because it uses v1beta1 CRD APIs. Support for v1.22 will be added at a later release. Check the following document for supported Kubernetes releases for a given [vSphere CSI Driver version](https://vsphere-csi-driver.sigs.k8s.io/compatiblity_matrix.html#compatibility-matrix-for-vsphere-csi-driver).
-->

## Urgent Upgrade Notes

<!--
### (No, really, you MUST read this before you upgrade)

-->

- Audit logファイルは0600で作成されるようになりました。既存のファイルのパーミッションは変更されません。もしnon-rootユーザによってaudit fileを読めるようにする必要があれば、事前に望まれたパーミッションでファイルを生成する必要があります。 ([#95387](https://github.com/kubernetes/kubernetes/pull/95387), [@JAORMX](https://github.com/JAORMX)) [SIG API Machinery and Auth]

<!--
- Audit log files are now created with a mode of 0600. Existing file permissions will not be changed. If you need the audit file to be readable by a non-root user, you can pre-create the file with the desired permissions. ([#95387](https://github.com/kubernetes/kubernetes/pull/95387), [@JAORMX](https://github.com/JAORMX)) [SIG API Machinery and Auth]
-->

- AWS EBSボリュームのCSI Migrationでは、AWS EBS CSI driver ver. 1.0がサポートするStorageClassのallowAutoIOPSPerGBIncreaseパラメータが必要です。([#101082](https://github.com/kubernetes/kubernetes/pull/101082), [@jsafrane](https://github.com/jsafrane))

<!--
 - CSI migration of AWS EBS volumes requires AWS EBS CSI driver ver. 1.0 that supports `allowAutoIOPSPerGBIncrease` parameter in StorageClass. ([#101082](https://github.com/kubernetes/kubernetes/pull/101082), [@jsafrane](https://github.com/jsafrane))
-->

- Conformanceイメージはdistrolessでビルドされるようになりました。Conformanceテストをマニュアルで`/run_e2e.sh`や`/gorunner`を呼び出す代わりにコンテナのエントリーポイントに依存しているユーザは、それらは非推奨となりv1.25で廃止されることに気をつけてください。`ginkgo`や`e2e.test`の呼び出しは現在もサポートされています。(https://github.com/kubernetes/kubernetes/pull/99178), [@wilsonehusin](https://github.com/wilsonehusin))

<!--
 - Conformance image is now built with Distroless. Users running Conformance testing should rely on container entrypoint instead of manual invocation to `/run_e2e.sh` or `/gorunner`, as they are now deprecated and will be removed in 1.25 release. Invoking `ginkgo` and `e2e.test` are still supported through overriding entrypoint (docker) or defining container `spec.command` (kubernetes). ([#99178](https://github.com/kubernetes/kubernetes/pull/99178), [@wilsonehusin](https://github.com/wilsonehusin))
-->

- デフォルトの`StreamingProxyRedirects`は無効化されました。もしマスターとノード間で2つ以上のバージョン違いがあり、ノードで`--redirect-container-stream`が有効化されている場合に問題となります。この場合、`StreamingProxyRedirects`はまだマニュアルで有効化することができます。([#101647](https://github.com/kubernetes/kubernetes/pull/101647), [@pacoxu](https://github.com/pacoxu))

<!--
 - Default `StreamingProxyRedirects` to disabled. If there is a >= 2 version skew between master and nodes, and the old nodes were enabling `--redirect-container-streaming`, this will break them. In this case, the `StreamingProxyRedirects` can still be manually enabled. ([#101647](https://github.com/kubernetes/kubernetes/pull/101647), [@pacoxu](https://github.com/pacoxu))
-->

- Intreeのvolume pluginであるscaleIOのサポートは完全にKubernetesから削除されました。([#101685](https://github.com/kubernetes/kubernetes/pull/101685), [@Jiawei0227](https://github.com/Jiawei0227))

<!--
 - Intree volume plugin scaleIO support has been completely removed from Kubernetes. ([#101685](https://github.com/kubernetes/kubernetes/pull/101685), [@Jiawei0227](https://github.com/Jiawei0227))
-->

- kubeadm: Docker向けのcgroupドライバーの自動判定を削除しました。新しいクラスタを構築する際にcgroupドライバーを明示的に設定していない場合、`kubelet`のドライバーの不一致で失敗することがあります (kubeadmのクラスタは`systemd`ドライバーを使うべきです)。また、同じようにDockerのcgroupドライバーが`systemd`に設定されていることを確認する`IsDockerSystemdCheck`の事前チェック(警告)も削除されました。理想的には、このような検出と調整はCRIの実装と`kubelet`との間で行われるべきです([#99808](https://github.com/kubernetes/kubernetes/issues/99808))。kubeadmでどのようにcgroupドライバーを手動で設定するかについては[該当のページ](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/)をご覧ください。([#99647](https://github.com/kubernetes/kubernetes/pull/99647), [@neolit123](https://github.com/@neolit123))


<!--
 - Kubeadm: remove the automatic detection and matching of cgroup drivers for Docker. For new clusters if you have not configured the cgroup driver explicitly you might get a failure in the `kubelet` on driver mismatch (kubeadm clusters should be using the `systemd` driver). Also remove the `IsDockerSystemdCheck` preflight check (warning) that checks if the Docker cgroup driver is set to `systemd`. Ideally such detection / coordination should be on the side of CRI implementers and the kubelet (tracked [here](https://github.com/kubernetes/kubernetes/issues/99808)). Please see the [page](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/) on how to configure cgroup drivers with kubeadm manually ([#99647](https://github.com/kubernetes/kubernetes/pull/99647), [@neolit123](https://github.com/neolit123))
-->

- kubeadm: `--cri-socket`フラグと`--config`フラグを同時に指定することができなくなりました。ノードのCRIソケットを設定したい場合はkubeadmの設定ファイルの`{Init|Join}Configuration.nodeRegistration.criSocket`を指定してください。 ([#101600](https://github.com/kubernetes/kubernetes/pull/101600), [@KofClubs](https://github.com/@KofClubs))


<!--
 - Kubeadm: the flag `--cri-socket` is no longer allowed in a mixture with the flag `--config`. Please use the kubeadm configuration for setting the CRI socket for a node using `{Init|Join}Configuration.nodeRegistration.criSocket`. ([#101600](https://github.com/kubernetes/kubernetes/pull/101600), [@KofClubs](https://github.com/KofClubs))
-->

- kubeadm: `--experimental-patches`フラグは非推奨になりました、将来のリリースで削除されます、新しい`--patches`フラグに移行してください。また、設定ファイルに新しいフィールド、`--experimental-patches`が追加され、同じ目的に利用することができます。initおよびjoin時には`{Init|Join}Configuration.patches.directory`を利用してパッチを設定する方法に移行することをお勧めします。今のところ、これらのフラグは `--config` と混在させることができますが、将来的には変更されるかもしれません。コマンドラインでは、最後の `--patches` フラグがそれまでのフラグや config の値よりも優先されます。 `kubeadm upgrade --patches` は今後も唯一の選択肢となります。 ([#103063](https://github.com/kubernetes/kubernetes/pull/103063), [@neolit123](https://github.com/@neolit123))

<!--
 - The flag `--experimental-patches` is now deprecated and will be removed in a future release. You can migrate to using the new flag `--patches`. Add a new field `{Init|Join}Configuration.patches.directory` that can be used for the same purpose. For `init` and `join` it is now recommended that you migrate to configure patches via `{Init|Join}Configuration.patches.directory`. For the time being, these flags can be mixed with `--config`, but that might change in the future. On a command line, the last *patches flag takes precedence over previous flags and the value in config. `kubeadm upgrade --patches` will continue to be the only available option, since `upgrade` does not support a configuration file yet. ([#103063](https://github.com/kubernetes/kubernetes/pull/103063), [@neolit123](https://github.com/neolit123))
-->

- Azure Diskによる新規プロビジョニングされたPVは、ベータのFailureDomainのラベルを持っていません。Azure Disk Volume Pluginは代わりにGAされたトポロジーラベルを持ちます([#101534](https://github.com/kubernetes/kubernetes/pull/101534), [@kassarl](https://github.com/kassarl))

<!--
 - Newly provisioned PVs by Azure disk will no longer have the beta `FailureDomain` label. Azure disk volume plugin will start to have GA topology label instead. ([#101534](https://github.com/kubernetes/kubernetes/pull/101534), [@kassarl](https://github.com/kassarl))
-->

- SchedulerのCycleStateはRead()関数とWrite()関数の中に、内部のリード/ライトロックを組み込むようになりました。一方で、`Lock()`と`Unlock()`関数は削除されました。スケジューラプラグインの開発者は、`CycleState#Lock()`と`CycleState#Unlock()`を削除する必要があります。Read()とWrite()は、ネイティブにスレッドセーフなので、単純に使用してください。([#101542](https://github.com/kubernetes/kubernetes/pull/101542), [@Huang-Wei](https://github.com/Huang-Wei))

<!--
 - Scheduler's CycleState now embeds internal read/write locking inside its `Read()` and `Write()` functions. Meanwhile, `Lock()` and `Unlock()` function are removed. Scheduler plugin developers are now required to remove `CycleState#Lock()` and `CycleState#Unlock()`. Just simply use `Read()` and `Write()` as they're natively thread-safe now. ([#101542](https://github.com/kubernetes/kubernetes/pull/101542), [@Huang-Wei](https://github.com/Huang-Wei))
-->

- `CSIMigrationVSphereComplete`のフラグは削除されました。今後`InTreePluginvSphereUnregister`が利用されます。([#101272](https://github.com/kubernetes/kubernetes/pull/101272), [@Jiawei0227](https://github.com/Jiawei0227))

<!--
 - The `CSIMigrationVSphereComplete` feature flag is removed. `InTreePluginvSphereUnregister` will be the way moving forward. ([#101272](https://github.com/kubernetes/kubernetes/pull/101272), [@Jiawei0227](https://github.com/Jiawei0227))
-->