ここでは、Kubernetes 1.28 の CHANGELOG から SIG-CLI (kubectl) の取り組みについてまとめています。
は筆者によるコメントです。
新たに追加された主なコマンドとフラグ
-
kubectl diff --concurrencyフラグ: 差分を並列処理するオブジェクトの数。数が大きいほど高速だが、より多くのメモリ、I/O、CPU を使用する (デフォルトは 1)
変更があった主なコマンドとフラグ
なし
廃止予定のコマンドとフラグ
なし
削除されたコマンドとフラグ
-
kubectl version --shortフラグ: バージョン数のみを出力する。デフォルトの挙動が--shortフラグに揃えられたため削除された。
そのほか、細かい変更は、 https://github.com/superbrothers/kubectl-docs/compare/v1.27.0...v1.28.0 で参照できます。
所感
SIG-CLI は完全に落ち着いており小さい変更とバグ修正のみでした。
SelfSubjectReview API が v1 に昇格し、kubectl auth whoami が GA したのはめでたいです。これまでは自身のユーザ名やグループを知る方法がなかったので、RBAC の設定のときに面倒でした。
kubectl diff --concurrency フラグは地味に便利です。CI 時に時間がかかっている場合は並列数を高く設定してみると改善されるかもしれません。
What's New (Major Themes)(主要な変更)
SIG-CLI に関連する情報はありません。
Urgent Upgrade Notes(必ず一読してからアップグレードしなければならない事項)
SIG-CLI に関連する情報はありません。
Changes by Kind(種類別の変更)
Deprecation(廃止)
-
kubectl versionのデフォルトの出力をkubectl version --shortが出力するものと同じに変更され、--shortフラグを完全に削除されました (#116720, soltysh)-
v1.24 から kubectl versionを実行すると警告が出るようになってました
-
API Change(API の変更)
-
SelfSubjectReviewAPI がauthentication.k8s.io/v1に昇格し、kubectl auth whoamiコマンドは GA しました (#117713, nabokihms) [SIG API Machinery, Architecture, Auth, CLI and Testing]-
SelfSubjectReviewAPI は自身のトークンや証明書からユーザ情報(ユーザ名やグループ)を返してくれる機能で、kubectl auth whoamiはその API を使うコマンドです -
Token ReviewAPI という似た機能がありますが、こちらは自身ではなく ServiceAccount トークンを検証してくれるものです
-
Feature(機能)
-
kubectl diffで処理の並列数を設定するための--concurrencyフラグが追加されました (#118810, brancz)-
kubectl diffは内部的に diff が処理が直列で実行されていたため、非常に多くのオブジェクトを処理しないといけない場合に時間がかかる問題がありました -
--concurrencyフラグのデフォルト値は1のため、並列に処理したい場合は明示的に値を指定する必要があります
-
- kubectl に新しいコマンドライン引数
--interactiveが追加されました。新しいコマンドライン引数により、ユーザはリソースごとの削除要求を対話的に確認できます。 (#114530, ardaguclu) [SIG CLI and Testing]-
次のように削除前に削除対象となるオブジェクトリストを確認できます
$ KUBECTL_INTERACTIVE_DELETE=true k delete po --all --interactive You are about to delete the following 3 resource(s): pod/nginx-7b77898b76-kpkdc pod/nginx-7b77898b76-tfcc2 pod/nginx-7b77898b76-v5kgv Do you want to continue? (y/n): y pod "nginx-7b77898b76-kpkdc" deleted pod "nginx-7b77898b76-tfcc2" deleted pod "nginx-7b77898b76-v5kgv" deleted -
--interactiveフラグはアルファであり、使用にはKUBECTL_INTERACTIVE_DELETE=true環境変数を付与する必要があります -
個人的にインタラクティブな処理は不要で、kubectl plugin でカバーすべきという意見なのですが、ほしい人は多かったかもしれません
-
-
wait --for=jsonpath='{expression}'[=value]の "value" の部分がオプションになった。値を指定しない場合、つまりwait --for=jsonpath='{expression}'のようなコマンドの場合、式がオブジェクトやリテラルのような 任意の 単一の JSON 値を返すと、待機条件がマッチしたと解釈される。 (#118160, minherz)-
これまではフィールドがすでに存在している場合にしか使用できませんでしたが、この変更で新しくフィールドが追加される場合にも対応できるようになりました
-
- サブコマンドを持つコマンドのヘルプメッセージがよりわかりやすくなりました。これは
kubectl <command> --help ...の代わりに完全なコマンドを表示します。
kubectl create secret --help の説明が変更されました。3種類のシークレットタイプの簡単な紹介と、コマンドの使い方の明確な手引が追加されました。 (#117930, LronDC)
-
これまでサブコマンド(例えば kubectl create)のヘルプを出力した場合にも kubectl <command> --help となってしまっていたところが、kubectl create <command> --help と出力されるようになったというものです
Bug or Regression
-
kubectl {$COMMAND}--help内のコードブロックに3つのインデントが追加されました (#118029, ardaguclu) - 手動でトリガされた場合に Cronjob の
status.lastSuccessfulTimeが反映されない問題が修正されました (#118530, carlory)-
「手動にトリガ」とは、kubectl create job --from cronjob/nameを使用して Job を作成した場合のことを言ってます -
kubectl create jobコマンドで作成した Job に CronJob controller が期待する Owner Reference が設定されていなかったことが問題でした
-
- Deployment で
kubectl port-forwardを使用すると、実行中の pod が利用可能な場合でも、終了中の pod に接続されるバグが修正されました (#119256, brianpursley) [SIG CLI]-
Deployment でとありますが、Deployment に限らず Service などを使った場合でも同様です。また、kubectl port-forwardに限らずkubectl logsなど他のコマンドでも同様です。
-
- explain が jsonpath を正しく認識していなかったバグが修正されました (#115694, mpuckett159)
-
どうやら CR でフィールド名に .が含まれる場合に正しく処理されていなかったようです。通常フィールド名にドットを使うことはないと思うので、ほぼほぼ影響なさそうです
-
- 指定した api version に変換できないリソースがあった場合に
kubectl-convertが失敗する問題が修正されました。新しい動作として、変換に失敗したリソースを警告し、残りのリソースの変換を継続するようになりました (#117002, gxwilkerson33)-
kubectl-convertは古い API バージョンのマニフェストを指定した API バージョンに変換するコマンドで v1.20 で削除されましたが、kubectl plugin として使えるようにリポジトリに残っています (https://github.com/kubernetes/kubernetes/tree/master/pkg/kubectl/cmd/convert)
-
- 指定された種類のリソースがない場合に、kubectl rollout status からの応答やエラーがない問題が修正されました (#117884, gxwilkerson33) [SIG CLI]
- restricted debug profile が修正されました (#117543, mochizuki875)
-
kubectl debugの restricted debug profile で作成される pod が Pod Security Standard の restricted ポリシーを満たしていなかったようです。具体的にはallowPrivilegedEscalationとseccompProfileが指定されていませんでした
-
-
kubectl events --forが replicasets.apps などの完全修飾名もサポートするようになりました (#117034, ardaguclu) - すべてのリソースで
kubectl explainが正しく動作するようになりました (#118876, atiratree)-
bindings のように GETメソッドを持たないリソースで explain が機能していなかったようです
-
-
kubectl exposeは同じポートに異なるプロトコルを持つ Service を作成することをサポートするようになりました (#114909, aimuz)