Kubernetes 1.23: SIG Cluster Lifecycle の変更内容

[Kubernetes 1.23 の CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.23.md) から SIG Cluster Lifecycle の取り組みについてにピックアップしました。

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

- なし。

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

- **kubeadm: `init|join|upgrade`コマンドにおける非推奨の`--experimental-patches`を削除しました。`--patches`フラグは`--config`フラグと共に利用することはできません。ノードにパッチを適用するkubeadmの設定には、`{Init|Join}Configuration.patches`を利用してください。** ([#104065](https://github.com/kubernetes/kubernetes/pull/104065), [@pacoxu](https://github.com/pacoxu))

## 種々の変更 (Changes by Kind)

### 廃止予定 (Deprecation)

- **kubeadm: 新しい `output/v1alpha2` APIを追加しました。これは `output/v1alpha1`APIと同じものですが、`kubeadm/v1beta2` における内部の依存関係を解決するためのものです。`output/v1alpha1`APIは非推奨となり将来のリリースで削除予定です。** ([#105295](https://github.com/kubernetes/kubernetes/pull/105295), [@neolit123](https://github.com/neolit123))
    - :pencil: `output/v1alphaX` API とは、kubeadmの出力結果をjsonやyaml、gotemplateで出力するためのAPIです、詳しくは [KEP](https://github.com/kubernetes/enhancements/pull/1054)を参照してください。
- **kubeadm: デフォルトで無効化されている、kubeadm特有の Alpha Featurea Gateである `UnversionedKubeletConfigMap` を追加しました。この機能を有効化してすると、kubeadmは`KubeletConfiguration`を保存するConfigMapについて、新しいフォーマットの名前を使い始めます。古いConfigMapの名前には"kube-system/kubelet-config-1.22"のようにKuberneteのバージョンが含まれていましたが、新しいフォーマットは"kube-system/kubelet-config`のようにバージョンが含まれていません。古いフォーマットの名前は非推奨になり、この名前のフォーマットがGAになった際に削除されます。ConfigMapを書く際にはkubeadmは`UnversionedKubeletConfigMap`の値を考慮し、読込の際は新しいフォーマットの利用を試み、必要な場合は古いフォーマットにフォールバックします。** ([#105741](https://github.com/kubernetes/kubernetes/pull/105741), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle and Testing]
- **kubeadm: `kubeadm reset`において`update-cluster-status`における非推奨のNO-OPフェーズを削除しました。** ([#105888](https://github.com/kubernetes/kubernetes/pull/105888), [@neolit123](https://github.com/neolit123))
    - :pencil: [kubeadm-config中からClusterStatusを削除する](https://github.com/kubernetes/enhancements/tree/master/keps/sig-cluster-lifecycle/kubeadm/2506-Remove-ClusterStatus-from-kubeadm-config)際のクリーンナップのようです。

### API の変更 (API Change)

- なし。

### 機能 (Feature)

- **kubeadm: `kubeadm join`において、ドライランがサポートされました。この新しい、`kubeadm join --dry-run`フラグは既存の `kubeadm init/upgrade` のフラグと同様に、どのような変更が適用されるかを事前に知ることができます。** ([#103027](https://github.com/kubernetes/kubernetes/pull/103027), [@Haleygo](https://github.com/Haleygo))
- **kubeadm: preflight時に、参加するワーカーノードで `/etc/kubernetes/manifests` フォルダが空かどうかを確認しなくなりました。** ([#104942](https://github.com/kubernetes/kubernetes/pull/104942), [@SataQiu](https://github.com/SataQiu))
    - :pencil: ユーザが独自のstatic podを `/etc/kubernetes/manifests`フォルダに事前に定義していた場合、エラーが発生していたようです。
- **etcdを3.5.1にアップグレードしました。** ([#105706](https://github.com/kubernetes/kubernetes/pull/105706), [@uthark](https://github.com/uthark)) [SIG Cloud Provider, Cluster Lifecycle and Testing]
    - :pencil: etcd 3.5.0 にはいくつかの致命的なバグがありました。

### ドキュメント (Documentation)

- なし。

### バグ修正 (Bug or Regression)

- **kubeadm: etcdのピアを既存のクラスタに追加する際、ピアがすでに追加されている、というエラーであった場合はそのエラーを許容し既存のメンバーを返すようにしました。これにより以前の呼び出しによりピアがすでに追加されていた場合でも最初のAddMenber呼び出しがタイムアウトしたときに指数関数的バックオフ(exponential backoff)を軽減させることができます。** ([#104134](https://github.com/kubernetes/kubernetes/pull/104134), [@ihgann](https://github.com/ihgann))
- **kubeadm: 空の `--config` を `kubeadm kubeconfig user`コマンドに渡すことができなくなりました。** ([#105649](https://github.com/kubernetes/kubernetes/pull/105649), [@navist2020](https://github.com/navist2020))
    - :pencil: PRには空のconfigの値が渡された場合には、"It still works properly." と書かれていましたが、正常に動作しているならバグではないのでは？と思いました…。
- **kubeadm: Windows ワーカーノードで、クラスタからダウンロードした KubeletConfiguration に Windows では動作しない Linux パスが含まれていることがあり、kubelet バイナリがトリップ?することがある不具合を修正しました。** ([#105992](https://github.com/kubernetes/kubernetes/pull/105992), [@hwdef](https://github.com/hwdef)) [SIG Cluster Lifecycle and Windows]
    - :pencil: Windows のワーカーノードで kubeadm が実行されていた場合、KubeletConfiguration中の絶対パスにドライブレターが追加されて利用されるようです。例えば `/var/lib/kubelet/config.yaml` は `C:/var/lib/kubelet/config.yaml` に変換されます。ちなみにドライブは、実行している kubeadm のバイナリが含まれているドライブが利用されるようです。
- **kubeadm: Linuxノードにおいてswapが有効化されていた場合、swapをチェックするpreflightチェックがエラーではなく警告を出力するようになりました。この変更はkubeletにおける NodeSwap のFeatureGateがベータになり、バージョン1.23からデフォルトで有効化されたことに関連する修正です。次のkubeadmのリリース(v1.24)ではこのpreflight checkは削除されるので、このpreflight checkを利用の停止をお勧めします。`--ignore-preflight-errors`もしくは kubeadm の設定ファイルで無効化できます。** ([#104854](https://github.com/kubernetes/kubernetes/pull/104854), [@pacoxu](https://github.com/pacoxu))

## その他 (Other (Cleanup or Flake))

- **`ClusterConfiguration` で渡される Unicode 文字を持つ外部 etcd エンドポイントは、IDNA エンコードされなくなりました (Punycode に変換されます)。これらはGoのRFC-3986の実装に従ってURLエンコードされ、URLパスから重複する「/」が削除され、直接`kube-apiserver` の `--etcd-servers`フラグに渡されるようになりました。Unicode文字を含むetcdエンドポイントがある場合は、IDNAに完全に準拠したツールで事前にエンコードしておくことをお勧めします。エンコードを行わなかった場合、エンドポイントへのリクエストを行う際にk8sやetcdで使用されているGo標準ライブラリがそれを行ってしまうでしょう。** ([#103801](https://github.com/kubernetes/kubernetes/pull/103801), [@gkarthiks](https://github.com/gkarthiks))
    - :pencil: URL文字列をノーマライズするモジュールである`github.com/PuerkitoBio/purell` がメンテナンスされていないため、簡易的なノーマライズに置き換えたようです。
- **kubeadm: `kube-controller-manager` のマニフェストから `--port` フラグを削除しました。このフラグは 1.22 以降何も行なっておらず、コンポーネントにいうてinsecure servingが削除されていたためです。** ([#104157](https://github.com/kubernetes/kubernetes/pull/104157), [@knight42](https://github.com/knight42))
- **kubeadm: `kube-scheduler` のマニフェストから `--port` フラグを削除しました。このフラグは 1.23 以降何も行なっておらず、コンポーネントにいうてinsecure servingが削除されていたためです** ([#105034](https://github.com/kubernetes/kubernetes/pull/105034), [@pacoxu](https://github.com/pacoxu))
- **古いアーティファクトのロケーションへの参照を更新し、新しい `gs://k8s-release-dev` バケットに存在しない ci-cross prefixをバージョンマッチから削除しました。** ([#103813](https://github.com/kubernetes/kubernetes/pull/103813), [@SataQiu](https://github.com/SataQiu))
    - :pencil: CI上で行うテストに関する修正でユーザーには影響ありません。