はじめに
ここでは、Kubernetes 1.22 の CHANGELOG から SIG-CLI (kubectl) の取り組みについてまとめています。
新たに追加された主なコマンドとフラグ
-
kubectl annotate --all-namespaces/-A
フラグ: 全 namespace を対象に実行する -
kubectl label --all-namespaces/-A
フラグ: 全 namespace を対象に実行する -
kubectl describe/drain --chunk-size
フラグ: オブジェクトリストを取得する際のチャンクサイズ(デフォルト500
) -
kubectl top pod --field-selector
フラグ: フィールドセレクタのサポート
変更があった主なコマンドとフラグ
-
kubectl top --use-protocol-buffers
フラグ: デフォルトで Protocol Buffers が使用されるように変更 -
kubectl kustomize
: Kustomize のバージョンが v4.2.0 に更新
廃止予定のコマンドとフラグ
-
kubectl create/edit/expose/patch/run/... --record
フラグ
削除されたコマンドとフラグ
-
kubectl autoscale --generator
フラグ -
kubectl create deployment --generator
フラグ
そのほか、細かい変更は、 https://github.com/superbrothers/kubectl-docs/compare/v1.21.0...v1.22.0 で参照できます。
所感
v1.22 は kubectl に対する大きな機能追加はなく改善とバグ修正が主で、注目機能の Ephemeral Containers(kubectl debug
コマンドで実行中の Pod に対してデバッグ目的のサイドカーコンテナをあとから挿入する機能) も認可周りで API 変更が入ったとのことで残念ながらベータに昇格せずデフォルトで使用できるようにはなりませんでした。現時点では v1.23 がベータ昇格のターゲットバージョンに設定されているので、大いに期待しましょう。
kubectl kustomize
として組み込まれている kustomize は v1.22 でも順調に v4.2.0 まで更新されています。合わせていくつかの新しい kustomize のフラグが kubectl kustomize
にも追加されています。
What's New (新情報)
SIG-CLI に関連する情報はありません。
Known Issues(既知の問題)
SIG-CLI に関連する情報はありません。
Urgent Upgrade Notes(必ず一読してからアップグレードしなければならない事項)
SIG-CLI に関連する情報はありません。
Changes by Kind(種類別の変更)
Deprecation (廃止)
-
kubectl
の--record
フラグが廃止予定となり、このフラグは HTTP リクエストに kubectl コマンドの詳細情報を付与する仕組みに置き換えられます (#102873, soltysh)-
--record
フラグは、オブジェクトを作成/更新する際にオブジェクトの annotation にどのコマンドにより操作されたのかを記録するものです -
当初は
--record
フラグを使う例をときどき見かけましたが、実際に使っている話を聞いたことがありません -
v1.21 で kubectl コマンドを実行するとそのコマンドの情報が HTTP ヘッダに記録される仕組みがアルファで追加され、v1.22 でベータに昇格しデフォルトになったため、それに合わせて
--record
フラグが廃止予定になったようです
-
API Change (API 変更)
- Exec plugin の作者は、kubeconfig の新しい
interactiveMode
フィールドで標準入力のデフォルト処理をオーバライドできるようになりました (#99310, ankeesler)-
Exec plugin でインタラクティブモードとするかどうかの判断に標準出力がターミナルかどうかを使っていることが問題でした。2FA コードの入力などインタラクティブモードである必要がある場合に例えばスクリプトの一部として kubectl コマンドが使用され、標準出力がターミナル以外に向いていると(例えば
echo $(kubectl version)
)標準入力が使えなくなりコードが入力できませんでした。 -
この PR ではまず標準入力がターミナルに向いているかどうかでインタラクティブモードが使用可能かどうかを判断するように変更されました。加えて kubeconfig に
users.user.exec.interactiveMode
フィールドが追加され、Exec plugin の作者がインタラクティブモードを制御できるようになりました。値は次のとおりです。-
Never
: 標準入力が使用できるかどうかに関わらず処理を実行し、Exec plugin に標準入力を渡さない -
IfAvailable
: 標準入力が使用できるかどうかに関わらず処理を実行し、可能であれば Exec plugin に標準入力を渡す -
Always
: 標準入力が使用できない場合、処理をエラーで終了させる
-
-
Exec plugin でインタラクティブモードとするかどうかの判断に標準出力がターミナルかどうかを使っていることが問題でした。2FA コードの入力などインタラクティブモードである必要がある場合に例えばスクリプトの一部として kubectl コマンドが使用され、標準出力がターミナル以外に向いていると(例えば
Feature(機能)
-
kubectl describe
コマンドに BinaryData (バイナリデータ) の説明が追加されました (#100568, lauchokyip)-
BinaryData が設定されていてもこれまで
kubectl describe
コマンドに何も出力されていませんでしたが、キー名とバイト数が出力されるようになりました
-
BinaryData が設定されていてもこれまで
-
kubectl top pod
コマンドに--field-selector
オプションが追加されました (#102155, lauchokyip) [SIG CLI] - 廃止予定の機能について
ignore-errors
フラグの警告メッセージが出力されるようになりました (#102677, yuzhiquan)-
これは
kubectl drain
コマンドの--ignore-errors
フラグのことで、これまでkubectl drain
コマンドは複数のノードを対象とした場合にエラーになると途中で処理を終了してしまう挙動でしたが、v1.23 で途中でエラーになっても全ノードで処理が継続するように変更される予定です。--ignore-errors
フラグはそれを先取って将来の挙動を使うようにフラグですが、複数ノードを対象としてこのフラグを使用せずに途中にエラーになった場合に、挙動が v1.23 で変更されることと、このフラグを使用することで、将来の挙動が先取りできることを警告するメッセージが出力されるようになったよということです。
-
これは
- Kubectl:
kubectl get pods
コマンドの出力にLAST RESTART
カラムが追加されました (#100142, Ethyling)- Pod が最後にリスタートしたのがいつかがカラムに追加されるようになりました。べんりです。
-
今回新たにデフォルトで表示されるカラムが追加されたわけですが、何をカラムに追加するのか、また
-o wide
に入れるべきかどうかがどこで判断されているのかがよくわかりませんでした。
- kubectl command headers がベータとなりデフォルトになりました (#103238, seans3) [SIG CLI]
-
kubectl diff
コマンドの出力でデフォルトで Secret の値が隠蔽されるようになりました (#96084, loozhengyuan)-
kubectl diff
コマンドは Secret のデータに変更があった場合にも差分をそのまま出力してしまっていたため、クレデンシャルが丸見えになるという問題がありました -
この変更で Secret のデータは
***
という形で隠蔽されるようになりました。なお、データが追加/削除された場合と値が変更された場合にも隠蔽しつつ変更されたことがしっかりわかる見た目となってします (k/k#96084)
-
- シェル補完は Cobra の Go を使った方法に移行し、ファイルの補完が適用されない場合に無効にするなどよりかしこくなりました。また、
cp
コマンドの補完は、ユーザがなにかを入力していない限りすべてのファイルを表示しないようになりました。 (#96087, marckhouzam) [SIG CLI]- この変更で、kubectl の補完コードの読み込みが高速化されました 加えて、これまで動的補完の候補(例えば Pod 名のリストの補完)の取得はシェルスクリプトで実装されていましたが、この Cobra の新しい補完では Go で実装できるようになり、開発者にとっても最高の変更になりました。
- Cobra の Go を使った新しい補完機能については https://github.com/spf13/cobra/blob/master/shell_completions.md で参照できます
-
kubectl debug
コマンドはEphemeralContainers
機能が有効な 1.22 以前のクラスタでエフェメラルコンテナを作成できます。API の変更により、1.22 以前の kubectl は、1.22 以上のクラスタでエフェメラルコンテナを作成できないことに注意してください。 (#103292, verb) -
kubectl drain
コマンドに新しいフラグである--check-size=SIZE
がベータとして追加されデフォルトで有効です。このフラグによりアイテム数を変更したり、0
を渡すことでこの機能を無効化できます。 (#100148, KnVerey)-
kubectl get
コマンドに用意されていた--check-size
フラグがkubectl drain
コマンドにも追加されました -
このフラグを使用すると、一度にすべてのオブジェクトを取得するのではなく、チャンクで取得するようになります。デフォルトのサイズは
500
です。
-
-
kubectl describe
コマンドに--check-size=SIZE
フラグが追加されました。このフラグによりアイテム数を変更したり、0
を渡すことでこの機能を無効化できます。 (#101171, KnVerey) -
kubectl
: Metrics API での Protocol Buffers の使用がデフォルトになりました (#102039, serathius)- 1.21 で追加された機能で、metrics-server のレスポンスに JSON 形式の代わりに Protocol Buffers を使うようになります
- JSON 形式へのエンコードに metrics-server の CPU の30%とメモリの15%が使用されているそうで、それを削減することが目的です
Bug or Regression(バグまたはリグレッション)
-
kubectl describe
コマンドで EndpointSlice に zone がない場合に panic になる問題が修正されました (#101025, tnqn) -
kubectl set env/resources
コマンドが init containers に機能していない問題が修正されました (#101669, carlory) -
kubectl debug node
コマンドが taint されている(NoExecute)ノードで機能していない問題が修正され、すべてを許容するようになりました (#98431, wawa0210)-
作成される Pod に
tolerations: {operator: Exists}
をつけることで対応したようです
-
作成される Pod に
- 特定の古いバージョンの Windows や Window 8 でレガシーコンソールモードが有効になっている場合に
kubectl exec
コマンドがクラッシュする問題が修正されました (#102825, n4j) -
kubectl create ingress
コマンドで annotation フラグに空の値が設定されている場合に panic になる問題が修正されました (#101377, rikatz) - 無関係な Pod のインスタンス間でデフォルト設定がリークするコードが修正されました (#103284, kebe7jun) [SIG CLI]
-
リリースノートの文章からは何が何やら全くわかりませんがこれは
kubectl logs
コマンドに関するバグで、複数の Pod を対象とした場合にkubectl.kubernetes.io/default-container
annotation によるデフォルトで選択するコンテナの設定が関連のない異なる Pods 間で共有されてしまう問題があったようです。
-
リリースノートの文章からは何が何やら全くわかりませんがこれは
-
kubectl describe
コマンドで Job completion mode の表示が修正されました (#101160, alculquicondor) -
kubectl create configmap
コマンドが失敗した場合も常にゼロの終了コードを返すバグが修正されました (#101780, nak3) [SIG CLI] -
kubectl describe podsecuritypolicy
コマンドで新しい Kind を使い、出力が整理されました (#101436, KnVerey) - cpu, memory, storage, ephemeral-storage, hugepages, attachable-volumes の正しいソートをサポートしました (#100435, lauchokyip)
-
--sort-by
フラグでリソースを指定した場合に正しくソートされていなかったようです
-
-
kubectl create service
コマンドはnamespace
フラグを尊重するように修正されました (#101005, zxh326) -
kubectl get
コマンドは表示が壊れるのを避けるために複数行の文字列を切り詰めるように修正されました (#103514, soltysh) -
kubectl wait --for=delete
コマンドは not found のエラーを正しく無視するように修正されました (#96702, lingsamuel) -
kubectl kustomize
コマンドが kustomize/v4.2.0 に更新されました (#103419, natasha41575) [SIG CLI] -
kubectl kustomize
コマンドが kustomize/v4.1.3 に更新されました(#102193, gautierdelorme) -
kubectl kustomize
コマンドが kustomize/v4.1.2 に更新されました (#101120, monopole) - kubectl: Quota が一貫した単位形式で表示されるように修正されました (#102177, atiratree) [SIG CLI]
Other (そのほか)
-
kubectl autoscale
コマンドから廃止予定だった--generator
フラグが削除されました (#99900, MadhavJivrajani) -
kubectl create deployment
コマンドから廃止予定だった--generator
フラグが削除されました (#99915, BLasan) - コマンドの説明や例文を更新し、文法や句読点の整合性が改善されました (#103524, bergerhoffer) [SIG Auth and CLI]