Kubernetes 1.32: SIG-CLI (kubectl) の変更内容

ここでは、Kubernetes 1.32 の CHANGELOG から SIG-CLI (kubectl) の取り組みについてまとめています。:memo: は筆者によるコメントです。

- https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.32.md

**新たに追加されたコマンドとフラグ**

- `kubectl apply --subresource` フラグ: `kubectl patch` コマンドの `--subresource` フラグ同様に `kubectl apply` コマンドでも使えるようになった。なお、server-side apply のみのサポート。
- `kubectl kustomize --helm-debug` フラグ: Helm chart inflator generator からのデバッグ出力を有効にする
- `kubectl apply/edit/get/patch/replace --subresource` フラグ: これまで `status` サブリソースしか指定できなかったが InPlacePodVerticalScaling の `resize` サブリソースのサポートのためにその制限を削除

**変更があったコマンドとフラグ**

- `kubectl explain -o` フラグ: `--output` フラグの省略形が追加

**廃止予定のコマンドとフラグ**

なし

**削除されたコマンドとフラグ**

なし

そのほか、細かい変更は、 https://github.com/superbrothers/kubernetes-docs/compare/kubernetes-1.31...kubernetes-1.32 で参照できます。

## 所感

InPlacePodVerticalScaling 関連の変更が kubectl にも入ってきています。1.32 での beta 昇格は見送られましたが 1.33 には入ってくると思われるのでどう使われていくのかが興味深いです。kubectl 自体は完全に落ち着いていて特に言うことはありません。

## What's New (Major Themes)

なし

## Urgent Upgrade Notes

なし

## Changes by Kind

### Deprecation

なし

### API Change

- kubectl コマンドで subresource フラグの制限が削除された ([#128296](https://github.com/kubernetes/kubernetes/pull/128296), [AnishShah](https://github.com/AnishShah)) [SIG CLI]
    - :memo: これまで subresource フラグには `status` しか指定できなかったが、InPlacePodVerticalScaling で resize サブリソースを扱いたいのでこの制限が削除された
- persistentVolumeClaimRetentionPolicy の不正確な説明が更新された ([#126545](https://github.com/kubernetes/kubernetes/pull/126545), [yangjunmyfm192085](https://github.com/yangjunmyfm192085)) [SIG API Machinery, Apps and CLI]
    - :memo: `persistentVolumeClaimRetentionPolicy` feature gate は beta に昇格していたが alpha であるという記述のままになってしまっていた。よくある。
- `kubectl get PriorityClass -owide` に preemptionPolicy フィールドが追加された ([#126529](https://github.com/kubernetes/kubernetes/pull/126529), [googs1025](https://github.com/googs1025)) [SIG CLI]
- image volume を持つ pod が kubectl describe された際にそのボリュームが出力されていなかった問題が修正された ([#126706](https://github.com/kubernetes/kubernetes/pull/126706), [carlory](https://github.com/carlory))
    - :memo: alpha 機能の image volume が pod で使用されている場合に `kubectl describe` で出力されていなかった
    - :memo: `kubectl describe` はどのフィールドをどう出力するかが作り込まれているので新しく追加されたフィールドの対応が漏れることがよくある
- `kubectl debug` で custom profiling 機能が有効に固定された ([#127187](https://github.com/kubernetes/kubernetes/pull/127187), [ardaguclu](https://github.com/ardaguclu)) [SIG CLI and Testing]
    - :memo: つまりデフォルトで有効になったということ。これまで有効にするために使用されていた `KUBECTL_DEBUG_CUSTOM_PROFILE` 環境変数は 1.34 で削除される予定
- `ScalingReplicaSet` event の出力が変更された。変更前: `Scaled <up|down> replica set <replica-set-name> to <new-value> from <old-value>`, 変更後: `Scaled <up|down> replica set <replica-set-name> from <old-value> to <new-value>` ([#125118](https://github.com/kubernetes/kubernetes/pull/125118), [jsoref](https://github.com/jsoref)) [SIG Apps and CLI]
    - :memo: 英語話者にとって変更前のように to ... from ...の順序に混乱するらしい。そうなんだ。
- `kubectl explain` の説明の改行位置が調整された ([#126533](https://github.com/kubernetes/kubernetes/pull/126533), [ah8ad3](https://github.com/ah8ad3))
    - :memo: コマンド自体が説明文に改行を挿入していたが、元文章内の改行位置でも改行されてしまっていて見にくくなっていたので、元文章の改行をすべて削除するようになっている
- Job controller が pods が削除される際に sidecar container のリスタート回数を考慮するようになった ([#124952](https://github.com/kubernetes/kubernetes/pull/124952), [AxeZhan](https://github.com/AxeZhan)) [SIG Apps and CLI]
    - :memo: maxContainerRestarts という関数で再起動関数が多い Pod 順に並び替えたりが行われているが、sidecar container (restartable init container) が考慮されていなかったみたい

### Documentation

- `kubectl wait` の `--for=create` オプションについて文書化された ([#127327](https://github.com/kubernetes/kubernetes/pull/127327), [ryanwinter](https://github.com/ryanwinter)) [SIG CLI]
    - :memo: `kubectl wait` のヘルプメッセージに追記されたということ

### Failing Test

なし

### Bug or Regression

- kubectl cp でローカルから pod にコピーした際に宛先パスの確認の出力ストリームが破棄されるようになった。またこの確認に3秒のタイムアウトが追加された。 ([#126652](https://github.com/kubernetes/kubernetes/pull/126652), [ardaguclu](https://github.com/ardaguclu)) [SIG CLI]
    - :memo: kubectl cp コマンドで指定された宛先となるパスがディレクトリであるかどうかを `test -d <path>` コマンドを実行して確認するフェイズがあるが、タイムアウトが設定されていなかったみたい。なお、CHANGELOG 上ではタイムアウト値は3秒となっているが、コード上では10秒になっている。

### Other (Cleanup or Flake)

- `kubectl explain` に短い `output` の引数が追加された。`kubectl explain <resource> --output plaintext-openapiv2` のようなコマンドで `--output` の省略形として `-o` が使えるようになった。 ([#127869](https://github.com/kubernetes/kubernetes/pull/127869), [ak20102763](https://github.com/ak20102763))
- kubectl delete で `--interactive` フラグを使用した例が追加された ([#127512](https://github.com/kubernetes/kubernetes/pull/127512), [bergerhoffer](https://github.com/bergerhoffer)) [SIG CLI]
- kubectl で `--validate` フラグの説明のスペースが修正された ([#128081](https://github.com/kubernetes/kubernetes/pull/128081), [soltysh](https://github.com/soltysh))
    - :memo: フラグの説明に変なスペースが入っちゃってたみたい。ヒアドキュメントとして書かれている中で改行されちゃっているのがまずくて一行になるように修正されている。
- `legacy` profile が廃止される計画であることをユーザへ通知するための警告メッセージが表示されるようになった ([#127230](https://github.com/kubernetes/kubernetes/pull/127230), [mochizuki875](https://github.com/mochizuki875)) [SIG CLI]
    - :memo: 将来削除されるとあり、どのバージョンという明記はなかった
- `kubectl top node` のパーセント表記が `%` から `(%)` に変更された ([#126995](https://github.com/kubernetes/kubernetes/pull/126995), [googs1025](https://github.com/googs1025)) [SIG CLI]
    - :memo: `CPU(cores)  MEMORY(bytes)` のように括弧がそっちでは使われているのでパーセントも合わせるよってことみたい
- https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2fv5.4.2 と https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2fv5.5.0. で紹介される内容で `kubectl kustomize` の機能がアップグレードされた ([#127965](https://github.com/kubernetes/kubernetes/pull/127965), [koba1t](https://github.com/koba1t))
    - :memo: つまり組み込みの kustomize バージョンが 5.4.2 から 5.5.0 に更新されたということ
- `kubectl apply --server-side` で `kubectl patch` と同等の `--subresource` がサポートされた ([#127634](https://github.com/kubernetes/kubernetes/pull/127634), [deads2k](https://github.com/deads2k)) [sig cli and testing]
    - :memo: `kubectl patch` では使えていた `--subresource` コマンドが server-side apply でも使えるようになった