ここでは、Kubernetes 1.23 の CHANGELOG から SIG-CLI (kubectl) の取り組みについてまとめています。 は筆者によるコメントです。
新たに追加された主なコマンドとフラグ
-
kubectl alpha events
: Events オブジェクトを扱う新しいアルファのコマンドで、このバージョンでは--for
フラグによりイベントの発生元オブジェクトでリストをフィルタする機能を持っています -
kubectl completion fish
: fish shell 向けの補完コードの生成 -
kubectl completion powershell
: PowerShell 向けの補完コードの生成
変更があった主なコマンドとフラグ
-
kubectl create secret/configmap --from-env
: これまで一度の実行で一度しかこのフラグを使用できませんでしたが、複数回使用できるようになりました -
kubecctl wait --for
:delete
,condition
に加えてjsonpath
がサポートされ、オブジェクトのどのフィールドでも wait の対象にできます
廃止予定のコマンドとフラグ
- klog に関連する
--alsologtostderr
のフラグ
削除されたコマンドとフラグ
-
kubectl drain --ignore-errors
: 複数ノードに対して実行した際に途中発生したエラーを無視して最後まで実行するというフラグでしたが、このフラグは削除され、この挙動がデフォルトになりました
そのほか、細かい変更は、 https://github.com/superbrothers/kubectl-docs/compare/v1.22.0...v1.23.0 で参照できます。
所感
大きな機能追加はありませんが、スクリプトで便利に使えそうな改善が入っています。新しいコマンドとして kubectl alpha events
が追加され、今後 Events に関する便利機能が追加されていくことが期待されます。欲しい機能のコメントを k/kubectl のイシューか #sig-cli Slack チャンネルで募集しているとのことだったので、アイデアがある方は投稿してみるとよさそうです。
SIG CLI の担当ではありませんが、Ephemeral Containers がついに GA になり kubectl debug
を Pod に対して使用できるようになりました。アルファで初めて追加されたのが 1.16、1.16 のリリースが2019年9月なので、2年強経っての GA でめっちゃめでたい これで distroless のようなより小さいベースイメージの使用が進みそうです。なお、Ephemeral Containers の API が Kubernetes v1.22 で変更されているため、v1.23 のクラスタで使用するには kubectl v1.22 以上を使用する必要があります。
What's New (新情報)
SIG-CLI に関連する情報はありません。
What's New (新情報)
SIG-CLI に関連する情報はありません。
Known Issues(既知の問題)
SIG-CLI に関連する情報はありません。
Urgent Upgrade Notes(必ず一読してからアップグレードしなければならない事項)
SIG-CLI に関連する情報はありません。
Changes by Kind(種類別の変更)
Deprecation (廃止)
-
kubectl --dry-run
の空のデフォルト値とブール値が削除されました。kubectl --dry-run
の使用には--dry-run=(server|client|none)
を必ず指定する必要があります。(#105327, julianvmodesto)-
値が空、またはブール値(
true
またはfalse
)の場合で、エラーになるようになりました - が、その後未だ多くのユーザがスクリプト等で値が空で実行していることがあることからこの変更はリバートされ、v1.23.1 では以前の挙動に戻っています
-
値が空、またはブール値(
API Change (API 変更)
- Job ステータスで Ready な状態の Pods 数をトラックするようになりました。この機能はアルファで有効にするには JobReadyPods フィーチャゲートが必要です。 (#104915, alculquicondor)
-
Job
status.ready
フィールドで Job に紐づく Ready な状態の Pods 数が管理されるようになったという変更ですが、kubectl にも変更が入っていてkubectl describe job
コマンドで下記のように Ready Pods の数が表示されるようにもなりましたPods Statuses: 1 Active (1 Ready) / 0 Succeeded / 0 Failed
-
Job
Feature(機能)
- kubectl に fish shell の補完が追加されました (#92989, WLun001)
- kubectl の補完コードの生成には spf13/cobra ライブラリの機能が使われており、このライブラリが fish shell の補完もサポートしたため、kubectl でも使えるようになりました。
- windows/arm64 プラットフォーム向けのクライアントサイドバイナリの生成がサポートされました (#104894, pacoxu)
- クライアントサイドバイナリというのはつまり kubectl のことです。Go 1.17 で windows/arm64 プラットフォームのサポートが追加されたことによる変更です。
-
kubectl completion powershell
の実行で PowerShell の補完ができるようになりました。 (#103758, zikhan) - 任意の JSONPath でウェイトする機能が
kubectl wait
に追加されました (#105776, lauchokyip)-
kubectl wait --for=jsonpath='{.status.phase}'=Running pod/busybox1
の形で任意のステータスフィールドを JSONPath 形式で指定できるようになりました。status
フィールド以外にspec
でもどのフィールドでも機能します。 - これまでは Delete または Condition フィールドしか対象にできなかったため、とても柔軟になりました。べんり。
-
-
kubectl run
とkubectl expose
により作成されるリソースをオーバライドするために RFC7396 JSON Merge Patch、RFC6902 JSON Patch または Strategic Merge Patch のいずれかで指定できるようになりました (#105140, brianpursley)-
これまで
kubectl run
とkubectl expose
では作成されるオブジェクトにパッチを当てる--overrides
フラグをサポートしていましたが、パッチに使えるのは JSON Merge Patch だけでした。 - この変更で JSON Merge Patch に加えて JSON Patch と Strategic Merge Patch が使えるようになりました。
-
どのパッチ形式を使用するかは
--override-type
フラグで指定します。JSON Merge Patch はmerge
(デフォルト)、JSON Patch はjson
、Strategic Merge Patch は、srategic
です。
-
これまで
- 複数の
--from-env-file
フラグの使用がサポートされました (#104232, lauchokyip)-
kubectl create secret generic
コマンドでKEY=VALUE
形式で記述されたファイルからキーと値を読み込む--from-env-file
フラグを一度の実行で複数回使用できるようになったという変更です。
-
- 複数の
--from-env-file
フラグの使用がサポートされました (#101646, lauchokyip)-
リリースノートの記述が上と一緒でわかりにくいのですが、こちらは
kubectl create configmap
コマンドが対象です。
-
リリースノートの記述が上と一緒でわかりにくいのですが、こちらは
- 新しいアルファのコマンドとして
kubectl events
が追加されました (#99557, bboreham)-
kubectl get events
は多くの改善余地があり、それを実現するために新たに独立したコマンドとしてkubectl events
を作成してやっていくということのようです(現在はアルファなのでkubectl alpha events
にある) -
v1.23 時点では
--for
フラグによりイベントの発生元オブジェクトでリストをフィルタする機能が追加されている -
KEP が https://github.com/kubernetes/enhancements/tree/master/keps/sig-cli/1440-kubectl-events があり、検討されている追加機能として下記がある
-
--watch-event=[]
: 指定のイベントのみでフィルタ -
--watch-until=EventType
: ウォッチしつつ、指定のイベントタイプが来ると終了 -
--watch-until-exists=pod/bar
: 指定のオブジェクトが存在したら終了
-
-
-
kubectl describe ingress
でラベルが表示されるようになりました (#103894, kabab) - kubectl が
--output/-o
フラグの補完を提供するようになりました (#105851, marckhouzam) - シェル補完がコマンドがサポートしていればリソース名をサジェストし続けるようになりました。例えば
kubectl get pod pod1 <TAB>
がさらに Pod 名をサジェストします。 (#105711, marckhouzam)- 地味にべんり
-
kubectl describe namespace
が Conditions を表示するようになりました (#106219, dlipovetsky)
Bug or Regression(バグまたはリグレッション)
-
kubectl top node
でリソース使用量にCapacity
を表示する show-capacity オプションが追加されました (#102917, bysnupy) [SIG CLI]-
kubectl top node
コマンドはノードの CPU, Memory の使用量を実数と割合で表示するコマンドです。割合の算出にはノードの Allocatable(割当可能なリソース)が使用されていますが、--show-capacity
フラグを使うと Allocatable に代わって Capacity が使われるようになります。 -
Allocatable は Capacity から system-reserved と Hard-Eviction-Thresholds を引いた値ですが、
kubectl top node
コマンドでノードのメモリ使用量はノードホスト上の実際の使用量に基づいているため、メモリ使用量の割合が100%を超えてしまうことがありました。
-
- ドキュメントに合わせるために
kubectl diff --invalid-arg
のステータスコードが 1 から 2 に変更されました (#105445, ardaguclu) - kubectl describe が event の age を計算するのに
Eventseries.count
とEventSeries.lastObservedTime
を使うように変更されました (#104482, harjas27) - kubectl がアンダースコアを含むフラグ名に対して重複した警告メッセージを発したり、存在しないフラグの使用を推奨することがあるバグが修正されました (#103852, brianpursley)
-
kubectl
で Secrets を作成する際にサポートされていない output タイプを指定するとパニックするバグが修正されました (#106317, lauchokyip) -
kubectl taint
で taint が衝突した際に JSON で衝突した taint が表現されていたのがKey=Effect
に変更されました (#104011, manugupt1) -
kubectl kustomize
が v4.4.1 にアップグレードされました https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv4.4.1 (#106389, natasha41575) [SIG CLI]
Other (そのほか)
-
-v
と-vmodule
を除くklog
のフラグが非推奨になりました。-vmodule
のサポートはテキストログ形式でのみ保証されます。 (#105042, pohly)-
klog の
--alsologtostderr
等のフラグが非推奨なり、将来のリリースで削除去れる予定です
-
klog の
- Kubectl: 廃止予定のコマンドラインフラグ(いくつかの klog のフラグなど)には
DEPRECATED: <explanation>
というコメントがつくようになりました (#106172, pohly) [SIG CLI] - drain の ignore error フラグが削除され、この機能がデフォルトになりました (#105571, yuzhiquan) [SIG CLI]
-
これまで複数ノードに対して
kubectl drain
コマンドを実行すると、デフォルトでは途中のノードで drain に失敗した場合、コマンドの実行が中断されていましたが、--ignore-errors
フラグを使うことで中断されず最後まで実行されるようになっていました。 -
この変更では、
--ignore-errors
フラグが削除され、このフラグの挙動がデフォルトになりました
-
これまで複数ノードに対して