Kubernetes 1.25: SIG-Node (kubelet) 変更内容

本記事は，[Kubernetes 変更内容共有会(v1.25)](https://kubernetes-updates.connpass.com/event/259507/) の SIG-Node(kubelet)に関する資料として準備されました．Kubernetes 1.25の [CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.25.md) から，SIG-Nodeに関するところを抜粋して紹介します．

:pencil: は筆者(@y1r96)による補足です．

## 所感
:pencil: PSP が削除された程度で，特に大きな変更はないようです．
feature gate `CheckpointRestore` はコンテナの状態を保存できる面白い機能のようですが，現状はフォレンジック用途に限定されているようで，Kubernetes 内でのrestoreができないようで，今後の開発に期待したいです．

## Urgent Upgrade Notes
SIG-Nodeに関するものはとくにありません．

## Changes by Kind

### Deprecation

- seccomp アノテーション `seccomp.security.alpha.kubernetes.io/pod`, `container.seccomp.security.alpha.kubernetes.io` は v1.19 から非推奨になりましたが，部分的に削除されました．Kubelet はこのアノテーションをサポートしませんし，static pod でもサポートしませんし，seccomp フィールドのあるpodの場合にもアノテーションが自動で埋められることはありません．アノテーションから seccomp フィールドを自動で埋める機能は v1.27 で削除予定なので，pod は `securityContext.seccompProfile` をかわりに使用する必要があります． ([#109819](https://github.com/kubernetes/kubernetes/pull/109819), [@saschagrunert](https://github.com/saschagrunert)) [sig/node,sig/auth,sig/apps,sig/testing]
- ベータの `PodSecurityPolicy` admission plugin は v1.21 から非推奨でしたが，削除されました． [手順](https://kubernetes.io/docs/tasks/configure-pod-container/migrate-from-psp/) に従って， `PodSecurity` admission plugin かサードパーティのpolicy webhook に移行してください． ([#109798](https://github.com/kubernetes/kubernetes/pull/109798), [@liggitt](https://github.com/liggitt)) [sig/storage,sig/node,sig/api-machinery,sig/auth,sig/apps,sig/instrumentation,sig/testing,sig/cloud-provider,sig/security]

### API Change

- Persistent Volume, StorageClass, RuntimeClass, CSIStorageCapacity における node beta label を使用すると，非推奨警告が表示されるようになりました． ([#108554](https://github.com/kubernetes/kubernetes/pull/108554), [@pacoxu](https://github.com/pacoxu)) [sig/storage,sig/node,sig/testing]
  - :pencil: node beta label とは，次のラベルです
    - `beta.kubernetes.io/arch`
    - `beta.kubernetes.io/os`
    - `failure-domain.beta.kubernetes.io/region`
    - `failure-domain.beta.kubernetes.io/zone`
    - `beta.kubernetes.io/instance-type`
- Feature gate `CheckpointRestore` が checkpoint container をサポートするために追加されました．有効な場合は，新しい kubelet API `(/checkpoint/{podNamespace}/{podName}/{containerName})` を使用して，containerのcheckpointを取ることができます. ([#104907](https://github.com/kubernetes/kubernetes/pull/104907), [@adrianreber](https://github.com/adrianreber)) [SIG Node and Testing] [sig/node,sig/testing]
  - :pencil: KEPは[こちら](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2008-forensic-container-checkpointing)です．コンテナが脅威に感染した場合など，コンテナの現在の状態を保存してサンドボックス内で解析するような用途を目指して開発されているようです．ディスクだけではなくメモリ状態も保全されるようです．
- UpdateContainerResources CRI API が Linux と Windows でサポートされました． ([#111645](https://github.com/kubernetes/kubernetes/pull/111645), [@vinaykul](https://github.com/vinaykul)) [sig/node]
  - :pencil: KEPは[こちら](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/1287-in-place-update-pod-resources)です． これにより In-Place Pod Vertical Scaling が実現できます．
- Local Storage Capacity Isolation 機能が v1.25 で GA しました．root filesystemをチェックできないようなrootless systemの場合は， kubelet config の `--local-storage-capacity-isolation=false` を使用してこの機能を無効にしてください．無効にすると，podは local ephemeral storage の request/limit, emptyDir の sizeLimit を設定できなくなります． ([#111513](https://github.com/kubernetes/kubernetes/pull/111513), [@jingxu97](https://github.com/jingxu97)) [sig/scalability,sig/scheduling,sig/node,sig/api-machinery]
  - :pencil: 解説記事は[こちら](https://kubernetes.io/blog/2022/09/19/local-storage-capacity-isolation-ga/)．ephemeral storage や empty dir の使用量を追跡して管理することができます．
- `PodSecurity` admission plugin 機能が v1.25 で GA しました．configuration version は `pod-security.admission.config.k8s.io/v1` になりました ([#110459](https://github.com/kubernetes/kubernetes/pull/110459), [@wangyysde](https://github.com/wangyysde)) [sig/storage,sig/node,sig/api-machinery,sig/cluster-lifecycle,sig/auth,sig/cli,sig/instrumentation,sig/testing,sig/architecture,sig/cloud-provider]
- [Ephemeral Containers](https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/) 機能が v1.25 で GA しました．対応する feature gate は非推奨になり，将来のリリースで削除されます．([#111402](https://github.com/kubernetes/kubernetes/pull/111402), [@verb](https://github.com/verb)) [sig/storage,sig/node,sig/api-machinery,sig/apps,sig/testing]

### Feature

- cpu manager の `static` ポリシーに `align-by-socket` オプションが追加されました．これを有効にすることで，NUMAノードによる境界のかわりに，CPUソケットの単位で CPU が align されるようになります． ([#111278](https://github.com/kubernetes/kubernetes/pull/111278), [@arpitsardhana](https://github.com/arpitsardhana)) [sig/node]
  - :pencil: KEPは[こちら](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/3327-align-by-socket)． 近年のCPUは，1ソケット内に複数のNUMAをもつことがあります．
- container probe duration metrics が追加されました．([#104484](https://github.com/kubernetes/kubernetes/pull/104484), [@jackfrancis](https://github.com/jackfrancis)) [sig/node,sig/instrumentation]
  - :pencil: メトリクス名は `probe_duration_seconds` です．
- `ProbeTerminationGracePeriod` feature gate がデフォルトで有効になりました．([#108541](https://github.com/kubernetes/kubernetes/pull/108541), [@kerthcet](https://github.com/kerthcet)) [sig/node]
- SeccompDefault 機能が `beta` に昇格しました． kubelet feature gate はデフォルトで有効で，configuration/CLI フラグはデフォルト `false` です． ([#110805](https://github.com/kubernetes/kubernetes/pull/110805), [@saschagrunert](https://github.com/saschagrunert)) [SIG Node and Testing] [sig/node,sig/testing]
- Pod SecurityContext と PodSecurityPolicy が sysctl のセパレータとして / をサポートするようになりました．([#106834](https://github.com/kubernetes/kubernetes/pull/106834), [@mengjiao-liu](https://github.com/mengjiao-liu)) [SIG Apps, Architecture, Auth, Node, Security and Testing] [sig/node,sig/auth,sig/apps,sig/testing,sig/architecture,sig/security]
- LocalStorageCapacityIsolationFSQuotaMonitoring 機能が `beta` に昇格しました． ([#107329](https://github.com/kubernetes/kubernetes/pull/107329), [@pacoxu](https://github.com/pacoxu)) [sig/node,sig/testing]
- cAdvisor が v0.45.0 に更新されました． ([#111647](https://github.com/kubernetes/kubernetes/pull/111647), [@bobbypage](https://github.com/bobbypage)) [sig/node]

### Documentation
なし

### Failing Test
なし

### Bug or Regression

- Ephemeral Volume が拡大できるようになりました ([#109987](https://github.com/kubernetes/kubernetes/pull/109987), [@gnufied](https://github.com/gnufied)) [SIG Node and Storage] [sig/storage,sig/node]
- 終了した container のメトリクスを報告しないようになりました ([#110950](https://github.com/kubernetes/kubernetes/pull/110950), [@yangjunmyfm192085](https://github.com/yangjunmyfm192085)) [SIG Node] [sig/node]
- CRI実装がcAdvisor stats providerを利用する場合，ログがephemeral storage limitを超えた場合にpodをevictしていなかったバグを修正しました ([#108115](https://github.com/kubernetes/kubernetes/pull/108115), [@haircommander](https://github.com/haircommander)) [SIG Node] [sig/node]
- CSI ephemeral volume の 再構築に関するバグを修正しました ([#108997](https://github.com/kubernetes/kubernetes/pull/108997), [@dobsonj](https://github.com/dobsonj)) [SIG Node, Storage and Testing] [sig/storage,sig/node,sig/testing]
- いくらかのケースにおいてpod が終了状態かつreadyであると apiserver に kubelet が通知してしまっていたバグを修正しました ([#110256](https://github.com/kubernetes/kubernetes/pull/110256), [@bobbypage](https://github.com/bobbypage)) [sig/node,sig/testing]
- Windows node において `HostProcess` な コンテナが正しく作成されていなかったバグを修正しました ([#110140](https://github.com/kubernetes/kubernetes/pull/110140), [@marosset](https://github.com/marosset)) [sig/node,sig/windows]
- dbus daemonの再起動後， "dbus: connection closed by user" エラーが発生していたバグを修正しました ([#110496](https://github.com/kubernetes/kubernetes/pull/110496), [@kolyshkin](https://github.com/kolyshkin)) [sig/node]
- s.RuntimeCgroups エラー条件と誤ったログ出力を修正しました ([#110648](https://github.com/kubernetes/kubernetes/pull/110648), [@yangjunmyfm192085](https://github.com/yangjunmyfm192085)) [sig/node]
- Kubelet: volume metric collection が長すぎる場合のログを追加しました ([#107490](https://github.com/kubernetes/kubernetes/pull/107490), [@pacoxu](https://github.com/pacoxu)) [sig/storage,sig/node]
- Kubelet: plugin registration mechanism において Windows node の Unix domain socket を確認する処理にリトライを追加しました ([#110075](https://github.com/kubernetes/kubernetes/pull/110075), [@luckerby](https://github.com/luckerby)) [sig/node,sig/windows]
- Kubelet: --node-labels オプションで付与されるラベルの検証を追加し，正しくないラベルについてはエラーになるようになりました ([#109263](https://github.com/kubernetes/kubernetes/pull/109263), [@FeLvi-zzz](https://github.com/FeLvi-zzz)) [sig/node]
- Kubelet: node allocatable ephemeral-storage データの取得の信頼性を向上させました ([#101882](https://github.com/kubernetes/kubernetes/pull/101882), [@jackfrancis](https://github.com/jackfrancis)) [sig/storage,sig/node]
- Kubelet は host の `resolv.conf` の `search .` を正しくハンドルするようになりました ([#109441](https://github.com/kubernetes/kubernetes/pull/109441), [@Miciah](https://github.com/Miciah)) [SIG Network and Node] [sig/network,sig/node]
- Podは終了中に `readiness` を報告するようになりました ([#110191](https://github.com/kubernetes/kubernetes/pull/110191), [@rphillips](https://github.com/rphillips)) [sig/network,sig/node,sig/testing]
- Kubelet の run 関数が異常終了した場合エラーログを出力します ([#110691](https://github.com/kubernetes/kubernetes/pull/110691), [@yangjunmyfm192085](https://github.com/yangjunmyfm192085)) [sig/node]
- node のアノテーション `alpha.kubernetes.io/provided-node-ip` は `--cloud-provider=external` のときだけではなく，任意の `cloud-provider` が指定されている時に設定されるようになります ([#109794](https://github.com/kubernetes/kubernetes/pull/109794), [@mdbooth](https://github.com/mdbooth)) [SIG Network and Node] [sig/network,sig/node]
- terminal pod (つまり `Unready` か `Succeeded`なpod) は， pod phase lifecycle によって巻き戻ることはなく，全てのコンテナが終了しているので，常にunreachableです．よって，`TolerateUnready` のオプションによらず常にpublishしないことにします ([#110255](https://github.com/kubernetes/kubernetes/pull/110255), [@robscott](https://github.com/robscott)) [sig/network,sig/node,sig/apps,sig/testing]
- kubelet の再起動後にマウント操作が失敗した場合でも、reconstructed volumeに対して正しくunmountされたvolume ([#110670](https://github.com/kubernetes/kubernetes/pull/110670), [@gnufied](https://github.com/gnufied)) [sig/storage,sig/node]
- cAdvisor を v0.44.1 に更新して，いくらかのケースにおいて kubelet によって生成された pod network stats が空である問題を修正しました ([#109658](https://github.com/kubernetes/kubernetes/pull/109658), [@bobbypage](https://github.com/bobbypage)) [sig/node]
- Windows において runAsNonRoot が設定されている場合に， `ContainerAdministrator` の ユーザ名チェックが case-insensitive になった ([#111009](https://github.com/kubernetes/kubernetes/pull/111009), [@marosset](https://github.com/marosset)) [sig/node,sig/windows,sig/testing]
- メトリクスがカウントされるときに，containerのStartTime メトリクスが異常なものを無視するようになった ([#110880](https://github.com/kubernetes/kubernetes/pull/110880), [@yangjunmyfm192085](https://github.com/yangjunmyfm192085)) [SIG Instrumentation and Node] [sig/node,sig/instrumentation]
- Windows の kubelet plugin Watcher が想定通り動くようになった ([#111439](https://github.com/kubernetes/kubernetes/pull/111439), [@claudiubelu](https://github.com/claudiubelu)) [sig/node,sig/windows,sig/testing]

### Other (Cleanup or Flake)

- Kubelet の非推奨フラグ `--experimental-kernel-memcg-notification` が削除されたので代わりに `--kernel-memcg-notification` を使用してください ([#109388](https://github.com/kubernetes/kubernetes/pull/109388), [@ialidzhikov](https://github.com/ialidzhikov)) [sig/node]
- Kubelet: エラー時にフラグの出力をしないようになった ([#110728](https://github.com/kubernetes/kubernetes/pull/110728), [@howardjohn](https://github.com/howardjohn)) [sig/node]
- Kubernetesのバイナリが `GOPATH` モードの代わりにビルトインの `module` モードでビルドされるようになった ([#109464](https://github.com/kubernetes/kubernetes/pull/109464), [@liggitt](https://github.com/liggitt)) [sig/node,sig/testing,sig/architecture]
- Kubelet はcAdvisorを使ってアクセラレータのメトリクスを出力しないようにする feature gate `DisableAcceleratorUsageMetrics` がGA し，disable できなくなりました ([#110940](https://github.com/kubernetes/kubernetes/pull/110940), [@pacoxu](https://github.com/pacoxu)) [sig/node]
- cri-tools が [v1.24.2](https://github.com/kubernetes-sigs/cri-tools/releases/tag/v1.24.2) に更新されました ([#109813](https://github.com/kubernetes/kubernetes/pull/109813), [@saschagrunert](https://github.com/saschagrunert)) [sig/node,sig/release,sig/cloud-provider]