Kubernetes 1.33: SIG Cluster Lifecycle の変更内容

# Kubernetes 1.33

[Kubernetes 1.33 の CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.33.md) から SIG Cluster Lifecycle の取り組みについてまとめました。

## :tada: ピックアップ :tada:

- なし！

## :warning: アップグレード時の注意事項

- `kubeadm` に関連する注意事項は特になし

## :dizzy: 項目ごとの変更

### :do_not_litter: 非推奨

- `kubeadm` に関連する注意事項は特になし

### :construction_site: APIの変更

- `kubeadm` に関連する注意事項は特になし

### :unicorn: 機能

- `kubeadm`: `kubeadm upgrade plan` コマンドが `--etcd-upgrade` フラグをサポートするようになり、etcdのアップグレードの計画を表示するかどうかを制御できるようになりました。また、`UpgradeConfiguration` の `v1beta4` に `.Plan.EtcdUpgrade` フィールドが追加されました。([#130023](https://github.com/kubernetes/kubernetes/pull/130023), [@SataQiu](https://github.com/SataQiu))

- `kubeadm`: Linuxノードでは `cp` コマンド、Windowsノードでは `xcopy` コマンドの存在を確認するプリフライトチェックが追加されました。これらのバイナリは `kubeadm` が正常に動作するために必要です。 ([#130045](https://github.com/kubernetes/kubernetes/pull/130045), [@carlory](https://github.com/carlory))

- `kubeadm`: `kubelet` が失敗した場合やコントロールプレーンの待機に失敗した場合に、一貫性のあるエラーメッセージを提供するよう `kubeadm init` と `kubeadm join` が改善されました。 ([#130040](https://github.com/kubernetes/kubernetes/pull/130040), [@HirazawaUi](https://github.com/HirazawaUi))

:::note info
コントロールプレーンの待機に失敗した場合のエラーメッセージが `init` 時と `join` 時に異なるフォーマットで出力されていたものを修正したようです。
:::

- `kubeadm`: フィーチャーフラグ `ControlPlaneKubeletLocalMode` がベータ版に昇格しました。デフォルトでは、`kubeadm init` でクラスターを作成する場合や `kubeadm join` でコントロールプレーンノードを追加する場合、`kubeadm` は `kubelet` 用にローカルの `kube-apiserver` エンドポイントを使用するようになりました。この機能フラグは、`kubeadm init phase`、 `kubeconfig kubelet` フェーズにも影響します。また、`--control-plane-endpoint` フラグは生成される `kubeconfig` の `Server` フィールドに影響しなくなりますが、代わりに `--apiserver-advertise-address` フラグを同じ目的で使用できるようになりました。 ([#129956](https://github.com/kubernetes/kubernetes/pull/129956), [@chrischdi](https://github.com/chrischdi))

:::note info
そもそものこの機能のモチベーションは、Control PlaneノードにおけるKubeletのLB経由のAPIサーバーへのアクセスがアップグレード時に "kubelet must not be newer than kube-apiserver." というバージョンスキューポリシーに引っかかってしまうという問題を解決するためのもののようです。

- See: [KEP-4471: Make a control-plane's kubelet point to the local API Server on kubeadm join](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cluster-lifecycle/kubeadm/4471-cp-join-kubelet-local-apiserver/README.md)
:::

- `kubeadm`: `WaitForAllControlPlaneComponents` のフィーチャーフラグがベータ版に昇格しました。コントロールプレーンコンポーネントの健全性をチェックする際、各コンポーネントのスタティックPodのマニフェストで引数として定義されているアドレスとポートが使用されるようになりました。 ([#129620](https://github.com/kubernetes/kubernetes/pull/129620), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle] [sig/cluster-lifecycle]

- `kubeadm`: `NodeLocalCRISocket` 機能フラグが有効になっている場合、`kubeadm upgrade` 実行時に対象ノードから `kubeadm.alpha.kubernetes.io/cri-socket` アノテーションが削除されるようになりました。 ([#129279](https://github.com/kubernetes/kubernetes/pull/129279), [@HirazawaUi](https://github.com/HirazawaUi))

- `kubeadm`: `NodeLocalCRISocket` 機能フラグが有効になっている場合、`kubeadm upgrade` 実行時に `/var/lib/kubelet/kubeadm-flags.env` ファイルから `--container-runtime-endpoint` フラグが削除されるようになりました。 ([#129278](https://github.com/kubernetes/kubernetes/pull/129278), [@HirazawaUi](https://github.com/HirazawaUi))

:::note info
上記の [#129279](https://github.com/kubernetes/kubernetes/pull/129279) と合わせて、CRIのエンドポイントの情報が `/var/lib/kubelet/kubeadm-flags.env` や、`kubeadm.alpha.kubernetes.io/cri-socket` アノテーション から、kubeadm の設定ファイルと `/var/lib/kubelet/instance-config.yaml` になったようです。

- See: [KEP-4656: Add kubelet instance configuration to configure CRI socket for each node](https://github.com/kubernetes/enhancements/tree/master/keps/sig-cluster-lifecycle/kubeadm/4656-add-kubelet-instance-configuration)
:::

- `kubeadm`: Linuxノードでの `nsenter` に対するプリフライトチェックが削除されました。また、Linuxノードで `kubelet` がブロックデバイスを開いた状態に保つために必要となる `losetup` に対するプリフライトチェックが追加されました。([#129450](https://github.com/kubernetes/kubernetes/pull/129450), [@carlory](https://github.com/carlory))

- `kubeadm`: 1.32 で GA となった `EtcdLearnerMode` のフィーチャーゲートが削除されました。([#129589](https://github.com/kubernetes/kubernetes/pull/129589), [@neolit123](https://github.com/neolit123))

### :bookmark: ドキュメント

- `kubeadm`: 手動クリーンアップのための `kubeadm reset` のメッセージが改善され、https://k8s.io/docs/reference/setup-tools/kubeadm/kubeadm-reset/ へのリファレンスが追加されました。 ([#129644](https://github.com/kubernetes/kubernetes/pull/129644), [@neolit123](https://github.com/neolit123))

:::note info
クリーンアップ時に、`kubeadm reset` では消されないファイルや設定などのクリーンアップ方法がドキュメントに記載されたようです。

例:
- `/etc/cni/net.d` 配下にある CNI の設定ファイル。
- `kube-proxy` が設定した `iptable` のルール。
:::

### :bug: バグ、もしくはリグレッション

- `kubeadm`: `kubeadm init` のフェーズ実行時に、`--kubeconfig` に渡されたファイルが複数回読み込まれるのを回避するように改善されました。 ([#129006](https://github.com/kubernetes/kubernetes/pull/129006), [@kokes](https://github.com/kokes))

- `kubeadm`: CRIからのサンドボックスイメージにエラーがある場合に、イメージがプルされないバグを修正しました。 ([#129594](https://github.com/kubernetes/kubernetes/pull/129594), [@neolit123](https://github.com/neolit123))

- `kubeadm`: `kubeadm upgrade node` サブコマンドが `UpgradeConfiguration` 内の `node.skipPhases` を無視しているバグを修正しました。([#129452](https://github.com/kubernetes/kubernetes/pull/129452), [@SataQiu](https://github.com/SataQiu))

- `kubeadm`: 設定ファイル中に `UpgradeConfiguration` が存在しなかった場合にパニックが発生するバグを修正しました。([#130202](https://github.com/kubernetes/kubernetes/pull/130202), [@SataQiu](https://github.com/SataQiu))

- `kubeadm`: 設定ファイル `v1beta4` における `Timeouts.EtcdAPICall` フィールドが `etcd` クライアントの操作で利用されず、常にデフォルトのタイムアウト（2分）が使用されるバグを修正しました。 ([#129859](https://github.com/kubernetes/kubernetes/pull/129859), [@neolit123](https://github.com/neolit123))

- `kubeadm`: `ClusterConfiguration` でアドオンが無効化されている場合、アップグレード時にそのアドオンをスキップするようになりました。 ([#129418](https://github.com/kubernetes/kubernetes/pull/129418), [@neolit123](https://github.com/neolit123))

:::note info
`kube-proxy` を無効化して `kube-router` を使っていたユーザーがv1.31からv1.32にアップデートした際に、無効化してたはずの`kube-proxy` が復活してサービス停止になってしまったらしい。ヒドイ。

- [kubeadm upgrade ignores ClusterConfiguration.proxy.disabled field](https://github.com/kubernetes/kubeadm/issues/3137)
:::

- `kubeadm`: `--anonymous-auth=false` が設定され、`WaitForAllControlPlaneComponents` フィーチャーゲートが有効になっている場合でも `kube-apiserver` のヘルスチェックが可能になるようにしました。 ([#131036](https://github.com/kubernetes/kubernetes/pull/131036), [@neolit123](https://github.com/neolit123))

- `kubeadm`: `kubeadm upgrade` でカーネルバージョンとOSバージョンの事前チェックを実行するようになりました。 ([#129401](https://github.com/kubernetes/kubernetes/pull/129401), [@pacoxu](https://github.com/pacoxu))

- `kubeadm`: ログ内で `YAML/JSON` への直接的な言及ではなく、一般的な用語を使用するようになりました  ([#130345](https://github.com/kubernetes/kubernetes/pull/130345), [@HirazawaUi](https://github.com/HirazawaUi))

- `kubeadm`: Linux ノードにおける `ip`、`iptables`、`ethtool`、`tc` に対するプリフライトチェックが削除されました。`kubelet` と `kube-proxy` は、`iptables` の使用が必要な場合には引き続きエラーを報告します。`ip`、`ethtool`、`tc` ツールは `kubelet` で過去に使用されていましたが、現在では必要なくなりました。 ([#129131](https://github.com/kubernetes/kubernetes/pull/129131), [@pacoxu](https://github.com/pacoxu))

- `kubeadm`: Linux ノードにおける `touch` に対するプリフライトチェックが削除されました。 ([#129317](https://github.com/kubernetes/kubernetes/pull/129317), [@carlory](https://github.com/carlory))