Kubernetes 1.32: SIG Cluster Lifecycle の変更内容

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

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

- なし！

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

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

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

### :do_not_litter: 非推奨

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

### :construction_site: APIの変更

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

### :unicorn: 機能

- `kubeadm upgrade apply` がサブコマンドをサポートしました。`phase` サブコマンドを使うことで `kubeadm upgrade apply phase <phase-name>` のように特定のフェーズを実行することができます。また、`kubeadm upgrade apply --skip-phases <phase-names>` を使うことで特定のフェーズをスキップすることもできるようになりました。([#126032](https://github.com/kubernetes/kubernetes/pull/126032), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle]

:::note info
以下が実行可能なフェーズです。
```
Available Commands:
  addon           Upgrade the default kubeadm addons
  bootstrap-token Configures bootstrap token and cluster-info RBAC rules
  control-plane   Upgrade the control plane
  kubelet-config  Upgrade the kubelet configuration for this node
  post-upgrade    Run post upgrade tasks
  preflight       Run preflight checks before upgrade
  upload-config   Upload the kubeadm and kubelet configurations to ConfigMaps
```
フェーズに `etcd` が無いように見えますが、`control-plane` のフラグに`--etcd-upgrade` があり、デフォルトで `true` になっているようです。
:::

- `kubeadm upgrade node` で `addon` と `post-upgrade` フェーズがサポートされました。`kubeadm upgrade node phase addon` を実行することでアドオンのアップグレードを行うことができます。また、`kubeadm upgrade node --skip-phases addon`を実行することでaddonのアップグレードをスキップすることができます。現在のところ `post-upgrade` フェーズは何も行わず、リリース特有のアップグレード後のタスクに利用されています。([#127242](https://github.com/kubernetes/kubernetes/pull/127242), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle]

- `kubeadm: `certificateValidityPeriod` の値が `caCertificateValidityPeriod` の値よりも大きかった場合に警告が出るようになりました。([#126538](https://github.com/kubernetes/kubernetes/pull/126538), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle]

- `kubeadm`: `NodeLocalCRISocket` フィーチャーゲートを追加しました。このフィーチャーゲートが有効化されると、`kubeadm` は各ノードの`kubelet` 設定の `containerRuntimeEndpoint` フィールドをカスタマイズするために、`/var/lib/kubelet/instance-config.yaml` ファイルを生成します。また、Nodeオブジェクトにアノテーションとして同じCRIソケットを書き込むことはなくなります。([#128031](https://github.com/kubernetes/kubernetes/pull/128031), [@HirazawaUi](https://github.com/HirazawaUi)) [SIG Cluster Lifecycle]

:::note info
Nodeのアノテーションに保存していた CRI ソケットの情報を `/var/lib/kubelet/instance-config.yaml` に書き出すことにしたようです。
:::

- `kubeadm`: `kubeadm init phase addon` のサブフェーズにおいて、`--config` フラグと特別なフラグ `--print-manifest` を混在して使用することが可能になりました。([#126740](https://github.com/kubernetes/kubernetes/pull/126740), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle]

- `kubeadm`: フィーチャーゲート `WaitForAllControlPlaneComponents` が有効な場合、コントロールプレーンコンポーネントに対して `--bind-address` または `--advertise-address` と `--secure-port` を考慮するようになりました。`kube-apiserver` と `kube-scheduler` には `/livez` を使用しますが、`kube-controller-manager` は `/livez` をサポートするまで引き続き `/healthz` を使用します。([#128474](https://github.com/kubernetes/kubernetes/pull/128474), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle]

:::note info
`kubeadm init` の終了時に、すべてのコントロールプレーンコンポーネントを待つ際、今までは `127.0.0.1` を利用してステータスをチェックしていたようです。
:::

- `kubeadm`: `kubeadm init phase` のようなサブコマンドを必要とするコマンドに未知のサブコマンド名が渡された場合、エラーを返すようになりました。また、`kubeadm init phase` や他のサブコマンドを持つコマンドがサブコマンド名なしで呼び出された場合、利用可能なコマンドを表示し、併せてエラーを返すようになりました。([#127096](https://github.com/kubernetes/kubernetes/pull/127096), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle]

- `kubeadm`: フィーチャーゲート `EtcdLearnerMode` が `GA` に昇格しました。`kubeadm` によってデプロイされた `etcd` の `Learner` モードは、デフォルトで有効になります。([#126374](https://github.com/kubernetes/kubernetes/pull/126374), [@pacoxu](https://github.com/pacoxu)) [SIG Cluster Lifecycle]

:::note info
- See: [etcd の Learner とは?](https://qiita.com/kkohtaka/items/b7b0475428821b22814a)
:::

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

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

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

- `kubeadm`: `kubeadm` が管理する `CoreDNS` の `Corefile` において、`cache` プラグインのパラメータとして `disable success` と `disable denial` が追加されました。これは、`CoreDNS` のキャッシュ更新中に矛盾する応答を防ぐためです。([#128359](https://github.com/kubernetes/kubernetes/pull/128359), [@matteriben](https://github.com/matteriben)) [SIG Cluster Lifecycle]

:::note info
`.cluster.local` に対して、キャッシングを無効にする設定を追加したようです。CoreDNS の `cache` プラグインは `kubernetes` プラグインより優先されるため古い情報を返してしまう問題があったようです。
:::

- `kubeadm`: アップグレードの事前チェックのための `CreateJob` から作成された `Pod` が、タイムアウト後に適切に終了されるようになりました。([#127333](https://github.com/kubernetes/kubernetes/pull/127333), [@yuyabee](https://github.com/yuyabee)) [SIG Cluster Lifecycle]

- `kubeadm`: `etcd` メンバーを削除する際に、誤ったメンバーリストが表示される問題が修正されました。 ([#127650](https://github.com/kubernetes/kubernetes/pull/127650), [@SataQiu](https://github.com/SataQiu))

:::note info
表示されるメンバーのリストは、特に何かに利用されているわけでは無いので問題は現状無いとのこと。
:::

- `kubeadm`: `kubeadm join` で新しいコントロールプレーンノードを追加する際、指定されたメンバーURLがすでにメンバーリストに存在しない場合にのみ `etcd` メンバーの追加が行われるようになりました。同様に、`kubeadm reset` の際も、`etcd` メンバーのIDが存在する場合にのみそのメンバーを削除するようになりました。([#127491](https://github.com/kubernetes/kubernetes/pull/127491), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle]

### :thought_balloon: その他（クリーンアップまたはフレーク）

- `kubeadm`: v1.31以降、`kubeadm` は `crictl` に依存しなくなったため、`crictl` バイナリが存在しない場合に警告を表示しないようになりました。([#126596](https://github.com/kubernetes/kubernetes/pull/126596), [@saschagrunert](https://github.com/saschagrunert)) [SIG Cluster Lifecycle]

- `kubeadm`: `init`、`join`、`upgrade`、`reset` サブコマンド実行中のAPIクライアントのドライラン時の詳細度が増加しました。また、偽の`cluster-info ConfigMap` を利用することで、既存のクラスタがない場合でも `kubeadm join` のドライランを可能にしました。([#126776](https://github.com/kubernetes/kubernetes/pull/126776), [@neolit123](https://github.com/neolit123))

- `kubeadm`: `kubeadm` が管理する `PodSpec` に書き込まれる追加の環境変数が、環境変数名によってアルファベット順に並べられるようになりました。 ([#126743](https://github.com/kubernetes/kubernetes/pull/126743), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle]

- `kubeadm`: `init kubelet-finalize` の非推奨のサブフェーズである `experimental-cert-rotation` が削除され、代わりに `enable-client-cert-rotation` が使用されるようになりました。 ([#126913](https://github.com/kubernetes/kubernetes/pull/126913), [@pacoxu](https://github.com/pacoxu)) [SIG Cluster Lifecycle]

- `kubeadm`: `kubeadm` の事前チェックから `socat` と `ebtables` が削除されました。([#127151](https://github.com/kubernetes/kubernetes/pull/127151), [@saschagrunert](https://github.com/saschagrunert)) [SIG Cluster Lifecycle]

- `kubeadm`: `conntrack` バイナリの存在を確認する事前チェックが削除されました。これは、バージョン1.32以降では `conntrack` が `kube-proxy` の依存関係ではなくなったためです。 ([#126953](https://github.com/kubernetes/kubernetes/pull/126953), [@aroradaman](https://github.com/aroradaman))

:::note info
上記の `socat` と `ebtables` はサポートされている Kubernetes では不要になったため、チェックが完全に削除されましたが、`conntrack` に関してはバージョン 1.32 未満の `kube-proxy` が必要としているためバージョンチェック後に事前チェックが実行されています。
:::

- `kubeadm`: `kubeadm upgrade apply` コマンドの非推奨で機能しないフラグ `--feature-gates`、および `kubeadm upgrade diff` コマンドの `--api-server-manifest`、`--controller-manager-manifest`、`--scheduler-manifest` フラグが削除されました。([#127123](https://github.com/kubernetes/kubernetes/pull/127123), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle]

- `kubeadm`: 非推奨のフラグ `--experimental-output` が削除されました。代わりに同じ目的を果たす `--output` フラグを使用してください。影響を受けるコマンドは以下の通りです: `kubeadm config images list`、`kubeadm token list`、`kubeadm upgrade plan`、`kubeadm certs check-expiration`。([#126914](https://github.com/kubernetes/kubernetes/pull/126914), [@carlory](https://github.com/carlory)) [SIG Cluster Lifecycle]

- `kubeadm`: `kube-scheduler` の静的 `Pod` が、起動プローブとリブネスプローブに `/livez` エンドポイントを、レディネスプローブに `/readyz` エンドポイントを使用するように変更されました。以前は、すべてのプローブに `/healthz` が使用されていましたが、このコンポーネントにおいてはこの動作は非推奨とされています。([#126945](https://github.com/kubernetes/kubernetes/pull/126945), [@liangyuanpeng](https://github.com/liangyuanpeng)) [SIG Cluster Lifecycle] :pencil: