ここでは、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-forwardover 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 であれば問題になりません。
-
-
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 呼び出し中にエラーが発生した場合、
kubectldrain が 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)