ここでは、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
を実行すると警告が出るようになってました
-
v1.24 から
API Change(API の変更)
-
SelfSubjectReview
API がauthentication.k8s.io/v1
に昇格し、kubectl auth whoami
コマンドは GA しました (#117713, nabokihms) [SIG API Machinery, Architecture, Auth, CLI and Testing]-
SelfSubjectReview
API は自身のトークンや証明書からユーザ情報(ユーザ名やグループ)を返してくれる機能で、kubectl auth whoami
はその API を使うコマンドです -
Token Review
API という似た機能がありますが、こちらは自身ではなく 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
など他のコマンドでも同様です。
-
Deployment でとありますが、Deployment に限らず Service などを使った場合でも同様です。また、
- explain が jsonpath を正しく認識していなかったバグが修正されました (#115694, mpuckett159)
-
どうやら CR でフィールド名に
.
が含まれる場合に正しく処理されていなかったようです。通常フィールド名にドットを使うことはないと思うので、ほぼほぼ影響なさそうです
-
どうやら 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 が機能していなかったようです
-
bindings のように
-
kubectl expose
は同じポートに異なるプロトコルを持つ Service を作成することをサポートするようになりました (#114909, aimuz)