ここでは、Kubernetes 1.30 の CHANGELOG から SIG-CLI (kubectl) の取り組みについてまとめています。 は筆者によるコメントです。
新たに追加された主なコマンドとフラグ
-
kubectl config set-credentials コマンド
-
--exec-interactive-mode
フラグ: kubeconfig user エントリの exec credentials plugin の InteractiveMode を設定 -
--exec-provide-cluster-info
フラグ: kubeconfig user エントリの exec credentials plugin の ProvideClusterInfo を設定
-
変更があった主なコマンドとフラグ
-
kubectl create token --duration
フラグ: 値に0
を受け入れるようになり、指定された場合にデフォルト値を使用する -
kubectl debug --profile
フラグ:sysadmin
プロファイルが追加
廃止予定のコマンドとフラグ
なし
削除されたコマンドとフラグ
なし
そのほか
-
kubectl create deployment --image
フラグ: ヘルプメッセージだけの変更で--image
フラグを複数使用して複数コンテナの Deployment を作成できることを提示
そのほか、細かい変更は、 https://github.com/superbrothers/kubectl-docs/compare/v1.29.0...v1.30.0 で参照できます。
所感
今回も目立った新機能はありませんでしたが、kubectl exec/attach/port-forward
コマンドでの kubectl から API サーバ、kubelet の双方向ストリーミングプロトコルを SPDY/3.1 から WebSockets に移行する取り組みが進んでいます (KEP 4006) 。多くの L7 プロキシやロードバランサが SPDY をサポートしていないことが問題になっていました。v1.30 で kubectl exec/attach/cp
はベータに昇格しデフォルトで有効化、kubectl port-forward
はアルファで提供され、有効には kubectl で KUBECTL_PORT_FORWARD_WEBSOCKETS=true
の付与、API サーバで PortForwardWebsockets
feature gate を有効にして使用できるようになりました。
What's New (Major Themes)
なし
Urgent Upgrade Notes
なし
Changes by Kind
Deprecation
- kubectl: apply の廃止予定だった
prune-whitelist
フラグが削除されました。代わりにprune-allowlist
フラグを使用してください。 (#120246, pacoxu)
API Change
なし
Feature
-
kubectl get cronjob
の出力に Timezone カラムが追加されました (#122231, ardaguclu) -
kubectl describe
のVolumeAttributesClass
でより多くの情報が出力されるようになりました (#122640, carlory)-
VolumeAttributesClass
はkubectl describe
に対応していなかったので、この変更で Events が出力されるようになりました
-
-
kubectl describe
: pod template の出力に Suspend to job と Node-Selectors と Tolerations が追加されました (#122618, ivanvc)- それら以外に BackoffLimit と TTLSecondsAfterFinished も追加されています
-
kubectl get job
はジョブリストにステータスを表示するようになりました (#123226, ivanvc) - kubectl
port-forward
over websockets (SPDY トンネリング) がAlpha
機能フラグ環境変数KUBECTL_PORT_FORWARD_WEBSOCKETS=true
を使用して有効にできるようになりました。通信先の API サーバもまたはAlpha
機能フラグ PortForwardWebsockets を有効にしておく必要があります。 (#123413, seans3)-
KEP 4006 の
kubectl exec/attach/port-forward
での双方向ストリーミングプロトコルを SPDY/3.1 から WebSockets に移行する取り組みの一貫です。「kubectl と API サーバ間」と「API サーバと kubelet 間」、「kubelet とコンテナランタイム間」の3つがあり、この PR は「kubectl と API サーバ間」のkubectl port-forward
コマンドへの対応です。 - SPDY は2015年以降非推奨となっており、今現在多くのプロキシ、ゲートウェイ、ロードバランサが SPDY をサポートしていません。SPDY は Google が開発したプロトコルで HTTP/2 策定のベースになりました。
- v1.30 時点でクライアント (kubectl) から API サーバ間の通信に SPDY プロトコルを WebSocket でトンネリングするという手法が取られています。将来的に API サーバと kubelet 間の通信が WebSocket に移行するとクライントから API サーバ、kubelet までの通信で SPDY トンネリングなしに WebSocket に完全に置き換えられる計画です。
- ユーザにとっての主問題は API サーバ前段のプロキシやロードバランサが SPDY をサポートしているものを選択しなければならなかったことなので (AWS ALB は SPDY をサポートしていません)、SPDY トンネリングでも解決します。なお L4 であれば問題になりません。
-
KEP 4006 の
-
kubectl debug
に 新しいcustom
フラグが導入され、ユーザが定義済みのプロファイルをカスタマイズできるようになりました (#120346, ardaguclu)-
custom
フラグに container spec が JSON 形式で書かれたファイルを指定する形で使用します
-
- kubectl config set-credentials コマンドに
exec-interactive-mode
とexec-provide-cluster-info
フラグが追加されました (#122023, ardaguclu) - Kubectl debug は sysadmin プロファイルを含むようになりました (#119200, eiffel-fl)
- privileged ありで実行されます
- kubectl で RemoteCommand over WebSockets を無効にするには環境変数フィーチャゲート
KUBECTL_REMOTE_COMMAND_WEBSOCKETS=false
を明示的に指定する必要があります (#123281, seans3)-
kubectl exec/attach
で WebSocket がデフォルトで使用されるようになりました
-
Documentation
-
unmanagedWarning
との文法的な一貫性を保ちつつ、より分かりやすくするためにunmanagedFatal
のエラーメッセージを修正しました。この改善により、ユーザにとってより理解しやすいプロンプトが表示されるようになりました。 (#120159, Ithrael)-
kubectl drain
コマンドで bare pods の evict に失敗する場合のエラーメッセージを改善したという話でcannot delete Pods that declare no controller (use --force to override)
になりました
-
Bug or Regression
-
kubectl get hpa
の実行で使用率の情報にメトリック名が追加されました (#122804, sreeram-venkitesh) -
kubectl explain
でフィールドタイプに enum が定義されている場合にそれらを表示するように修正されました (#123023, ah8ad3)- べんり
- API 呼び出し中にエラーが発生した場合、
kubectl
drain が pod を削除したと判断するバグが修正されました (#122574, brianpursley)- 例えば drain 中に control-plane ノードが削除されると pod が存在するにも関わらず削除したと判断してしまっていました。エラー処理の条件が甘かったことが原因。
- kubectl バージョン
1.29.0
で--attach
フラグが無視されるリグレッションが修正されました (#122447, ardaguclu) -
kubectl logs <pod-name>
の使用で pod が見つからなかった際に、エラーメッセージに namespace が含まれるようになりました。以前は "Error from server (NotFound): pods "my-pod-name" not found" というメッセージでした。現在は "Error from server (NotFound): pods "my-pod-name" not found in namespace "default"" のようにメッセージに namespace が反映されます。 (#120111, newtondev)