ここでは、Kubernetes 1.36 の CHANGELOG から SIG-CLI (kubectl) の取り組みについてまとめています。
は筆者によるコメントです。
- https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.36.md
- Kubernetes v1.36: ハル (Haru) | Kubernetes
新たに追加されたコマンドとフラグ
-
kubectl kuberc set/viewコマンド: kubectl のユーザ設定ファイルである kuberc を表示・編集するコマンド。1.35 では alpha だったが、1.36 で beta に昇格した。 -
kubectl run/attach --detach-keysフラグ:kubectl run -itやkubectl attachの接続を、container を終了せずに切断するためのキーシーケンスを指定するフラグ(デフォルトctrl-p,ctrl-q)。 -
kubectl diff --show-secretsフラグ:kubectl diffで Secret の値をマスクせずに表示するフラグ。機密情報が出力されるため注意が必要。 -
kubectl explain -Rフラグ:kubectl explain --recursiveの短縮形。
変更があったコマンドとフラグ
-
kubectl debug --profileフラグ: デフォルトの debug profile がlegacyからgeneralに変更された。 -
kubectl wait --forフラグ: 複数の--forを指定できるようになった。複数の条件は AND 条件として扱われる。
廃止予定のコマンドとフラグ
なし
削除されたコマンドとフラグ
-
kubectl alpha kuberc set/viewコマンド:kubectl kuberc set/viewへの beta 昇格に伴い、alpha 配下のコマンドは削除された。
そのほか、変更の詳細は、 https://github.com/superbrothers/kubernetes-docs/compare/kubernetes-1.35...kubernetes-1.36 で参照できます。
所感
v1.36 においても kubectl に大きな新機能追加はなく、1.35 で入った取り組みが進みつつ、日常的に使うコマンドの使い勝手が改善されています。
kuberc は beta に昇格し、kubectl kuberc set/view として alpha ではない通常のコマンドとして扱えるようになりました。credential plugin の policy や allowlist も設定できるようになっており、kubectl のユーザ設定を kubeconfig から分離する取り組みが進みました。
kubectl wait --for の複数条件対応、kubectl diff --show-secrets、kubectl run/attach --detach-keys など、運用時に少し困っていた点を埋めるような変更が入っています。
kubectl describe では複数オブジェクトを対象にした場合の Events 表示がデフォルトで省略されるようになりました。なぜか私は kubectl describe は単一オブジェクトのみサポートだと思い込んでいて複数オブジェクトを対象に実行したことがなかったので影響がありませんが、普段から利用されていた方は注意が必要です。
全体として、ここ最近のリリースと同じく kubectl 変更は派手ではありませんが、kuberc、debug、wait、describe など、実際の利用頻度が高いコマンドで改善が進みました。
What's New (Major Themes)
kubectl のユーザ設定をクラスタ設定から分離
kubectl のユーザ設定をカスタマイズするための .kuberc 機能は、引き続き beta として提供され、デフォルトで有効になっています。~/.kube/kuberc ファイルにより、ユーザは alias、デフォルトフラグ、その他の個人設定を、クラスタの endpoint や認証情報を保持する kubeconfig ファイルとは別に保存できます。この分離により、個人設定が CI pipeline や共有 kubeconfig ファイルに影響することを防ぎつつ、異なる cluster や context 間でも一貫した kubectl 体験を維持できます。
Kubernetes v1.36 では、.kuberc に credential plugin の policy(allowlist または denylist)を定義する機能が追加され、より安全な認証運用を強制できるようになりました。必要に応じて、KUBECTL_KUBERC=false または KUBERC=off 環境変数を設定することで、この機能を無効化できます。
この作業は、SIG Auth の協力のもと、SIG CLI が主導する KEP #3104 の一環として行われました。
kuberc の詳細は Kubernetes 1.33: SIG-CLI (kubectl) の変更内容 #kubernetes - Qiita で解説しています。
Urgent Upgrade Notes
なし
Changes by Kind
Deprecation
- credential plugin allowlist の
AllowlistEntry.NameがAllowlistEntry.Commandにリネームされました。 (#137272, pmengelbert) [SIG API Machinery, Auth, CLI and Testing]-
credential plugin は、kubectl が認証情報を得るために外部コマンドを実行する仕組み。kuberc の allowlist は、この外部コマンド実行をユーザ側で制限するための機能。 -
kubercはkubeconfigとは別に kubectl のユーザ設定を持つための設定ファイルでクラスタの接続先や認証情報ではなく、kubectl の alias、デフォルト option、credential plugin の扱いなど、client 側の好みを切り出すことが目的。デフォルトのパスは~/.kube/kuberc。
-
API Change
なし
Feature
-
kubectl get node -o wideの出力にARCH列が追加されました。 (#132402, astraw99) [SIG CLI]-
こんな感じで出力されるそうです。
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION ARCH CONTAINER-RUNTIME controlplane Ready control-plane 9d v1.32.1 172.30.1.2 <none> Ubuntu 24.04.1 LTS 6.8.0-51-generic amd64 containerd://1.7.27 node01 Ready <none> 9d v1.32.1 172.30.2.2 <none> Ubuntu 24.04.1 LTS 6.8.0-51-generic arm64 containerd://1.7.27
-
-
kubectl explain -rフラグが--recursiveの短縮形として追加されました。 (#135283, laervn) [SIG CLI]-
CHANGELOG では -rフラグと書かれているが、実際には-Rフラグ(大文字)が追加されている
-
- diff コマンドに、diff 操作中に Secret の値を表示することを明示的に許可する
show-secretフラグが追加されました。 (#137019, olamilekan000) [SIG CLI]-
これまで Secret の値は diff では ***でマスクされていて安全だったが、値が本当に変わっているかを確認したい場合には不便だった -
CHANGELOG では --show-secretフラグと書かれているが、実際には--show-secretsフラグが追加されている
-
-
kubectl applyで管理されているリソースに対してkubectl rollout undoが使われた場合、annotation の不一致による予期しない挙動を防ぐための警告が追加されました。 (#137064, olamilekan000) [SIG CLI]-
apply 用の情報と rollout history の情報が期待どおり対応せず、意図した状態に戻らない可能性があった
-
-
kubectl waitコマンドで複数の condition がサポートされました。 (#136855, ardaguclu) [SIG CLI and Testing]-
--forフラグを複数回指定できるようになり、複数の条件を指定できるようになって便利 -
複数 condition は AND 条件として順番に待つが、--for=createは無条件で最初に処理されるkubectl wait --for=condition=Ready --for=create pod/busybox1
-
-
kubectl describe serviceの出力にappProtocolフィールドが追加されました。 (#135744, ali-a-a) [SIG CLI]-
appProtocolは、TCP などの L4 プロトコルではなく、httpなどのアプリケーションレベルのプロトコルを示すためのフィールド。
-
-
kubectl describeの CronJob 出力にtimezoneフィールドが追加されました。 (#136663, kfess) [SIG CLI] - デフォルトの debug profile が
legacyからgeneralに変更されました。legacyprofile はv1.39で削除される予定です。 (#135874, mochizuki875) [SIG CLI and Testing]-
--profileを省略した場合にgeneralが使われるようになった。ephemeral container や Pod copy では debug container にSYS_PTRACEが付与されるため、Pod Security Admission などで capability 追加が制限されている環境では--profile=baselineや--profile=restrictedの指定が必要。
-
-
kubectl kubercコマンドが beta に昇格しました。 (#136643, ardaguclu) [SIG CLI and Testing] - ResourceSlice API が存在する場合、
kubectl describe nodeが集約された ResourceSlice を表示し、slice name、driver、pool の詳細を示すように更新されました。 (#131744, ArangoGutierrez) [SIG CLI]-
DRA で扱われるリソースの状態が describe nodeから見えるようになった
-
- schema または field に
externalDocsセクションが含まれる場合、kubectl explainが EXTERNAL DOCS セクションを表示するように更新されました。このセクションは、トップレベルリソースでは DESCRIPTION ブロックの後に、個別 field では field description の後に表示されます。short mode の場合やexternalDocsがない場合は省略されます。 (#136988, pedjak) [SIG CLI]-
特に CRD で、フィールドの説明を schema だけで完結させるのが難しい場合に、外部ドキュメントへの導線を kubectl explainに出せるようになった
-
-
kubectl get ingressclassが default IngressClass に対して(default)マーカーを表示するように更新されました。 (#134422, jaehanbyun) [SIG CLI and Network]-
こうなるそうです。
NAME CONTROLLER PARAMETERS AGE nginx k8s.io/ingress-nginx <none> 10s nginx-custom k8s.io/ingress-nginx IngressParameters.k8s.example.com/nginx-config 10s nginx-default (default) k8s.io/ingress-nginx <none> 10s
-
-
kubectl kuberc setがcredentialPluginPolicyとcredentialPluginAllowlistを設定するための option に対応しました。 (#137300, pmengelbert) [SIG CLI] -
kubectl execまたはkubectl logsが指定された container 名で実行され、その名前の container が見つからない場合、kubectlが指定可能な有効なコンテナ名を一覧表示するようになりました。 (#136973, ardaguclu) [SIG CLI and Testing]-
こんな感じでコンテナ名をリストしてくれるようです。 container nonexistent is not valid for pod foo-two-containers out of: foo-2-c1, foo-2-c2
-
Documentation
なし
Bug or Regression
- container を終了せずに detach できるように、
kubectl attachとkubectl runに--detach-keysフラグが追加されました。 (#134997, yangjunmyfm192085) [SIG API Machinery and CLI]-
-it / --stdin --ttyフラグを指定していた場合にコンテナを終了せずにデタッチすることができなかったみたい -
デタッチするためのキーシーケンスを上書きする --detach-keysフラグ(デフォルトctrl-p,ctrl-q)が追加された
-
- 複数の StatefulSet Pod を削除する際に、
kubectl deleteが削除を適切に処理して正常に終了するよう修正されました。 (#135563, yangjunmyfm192085) [SIG CLI, Network and Node]-
kubectl deleteは実際に pod が削除されるまで待つが、StatefulSet pods は同じ名前で再作成されるために削除されたかの判定がうまくいっていなかったみたい -
オブジェクト UID を使って同一かどうかを確認するように修正された
-
- Pod-level resources を使用している Pod について、
kubectl describe nodeが resource requests と limits を正しく表示するよう修正されました。 (#137394, Nikateen) [SIG CLI]-
Pod-level resources を使用した場合に describe nodeでの pod のリソース表示が0になってしまっていたみたい
-
-
kubectl describeが Custom Resource の field name を表示する際に、大文字の acronym を単一の要素として正しく認識するよう修正されました。 (#135683, uozalp) [SIG CLI] - label の追加と削除が両方行われた場合に、
kubectl labelの出力メッセージがmodifiedを表示するよう修正されました。 (#134849, tchap) [SIG CLI] - Pod が ContainerCreating または PodInitializing 状態の場合に、
kubectl logs -fが即座に失敗するのではなく container の起動を待つよう修正されました。 (#136411, olamilekan000) [SIG CLI]-
べんり
-
- resource がすでに存在する場合、
kubectl apply --dry-run=clientが merge 済みの manifest 値ではなく server state のみを出力していた bug が修正されました。 (#135513, grandeit) [SIG CLI] - Windows で
kubectl plugin listが overshadow された plugin を検出できなかった bug が修正されました。 (#136689, kfess) [SIG CLI] - total Pod resources の計算が修正されました。 (#137683, ndixita) [SIG CLI and Node]
- Kubectl:
kubectl get ... --output-watch-events -o kyamlのkyaml出力が修正されました。 (#136110, liggitt) [SIG CLI]-
--output-watch-eventsは通常のオブジェクト出力と構造が異なっていて kyaml printer 側でエラーになってしまっていたみたい
-
- Kubectl: terminal size queue delegate が初期化されていない場合に
kubectl execで panic が発生する問題が修正されました。 (#135918, MarcosDaNight) [SIG CLI] - Kubectl: resource requests が nil で container status resources が設定されている Pod を処理する際に panic が発生する問題が修正されました。 (#136534, dmaizel) [SIG CLI]
- Kubectl: attach connection が確立される前に書き込まれた container output を
kubectl run -i/-itが取りこぼす問題が修正されました。 (#136010, olamilekan000) [SIG CLI] -
kubectl scaleコマンドの出力に expected replica count が反映されるようになりました。 (#136945, ardaguclu) [SIG CLI and Testing]
Other (Cleanup or Flake)
- パフォーマンス上の理由から、
kubectl describeは単一 object を describe する場合にのみ関連 event を表示するようになりました。複数 object を describe する場合や prefix による fuzzy matching を行う場合でも、--show-eventsを明示的に渡せば引き続き関連 event が表示されます。 (#137145, mark-liu) [SIG CLI]-
kubectl describeで多くのオブジェクトを対象にすると events 取得の API コールが大量に発行されるのでよろしくなかった
-
-
kubectl describe -fで削除済み Pod を file から describe した場合の event listing behavior が削除され、すべての resource type で一貫した NotFound error handling になるようになりました。 (#135281, scaliby) [SIG CLI] - misleading な
SuggestForentry がkubectl waitから削除され、ユーザがkubectl listやkubectl psと入力した場合にkubectl waitが suggestion として表示されなくなりました。 (#137266, kfess) [SIG CLI and Testing]-
なぜこんな設定が入っていたのかナゾ
-
- kustomize dependency が
v5.8.1に更新されました。 (#136892, koba1t) [SIG Architecture and CLI]