はじめに
ここでは、Kubernetes 1.15 の CHANGELOG から SIG-CLI (kubectl) の取り組みについてまとめています。
新たに追加されたコマンド
-
kubectl rollout restart: リソースを再実行する
廃止予定のコマンド
なし
削除されたコマンド
-
kubectl scale job: Job オブジェクトのスケール
そのほか、オプションの追加、削除は、 https://github.com/superbrothers/kubectl-docs/compare/v1.14.0...v1.15.0 で参照できます。
What's New (新情報)
SIG-CLI に関する大きな変更はありません。
アップグレード前に必ず確認すべき内容
- 1.10 から廃止予定だった
kubectl scale jobが完全に削除されました (#78445, @soltysh)-
1.10 から kubectl scaleが scale サブリソースを利用するようになったことに伴い (Generic scaler)、scale サブリソースを持つ Deployments などのオブジェクトに加えて CRD などにも対応しました -
一方で Jobs オブジェクトは scale サブリソースを持たず他のオブジェクトと一貫性がなく、kubectl scale がスケールできるオブジェクトは HPA がスケール可能なオブジェクトであるべきという方針で 1.10 から廃止予定となり、今回で完全に削除されました
-
- 1.12 から廃止予定だった
kubectl execの--pod/-pフラグは完全に削除されました (#76713, @prksu)-
これは正確ではなく、--pod/-pフラグは v0.18.0 (2015/5) で廃止予定となっていましたが、ヘルプメッセージ上でフラグに廃止マークが追加されたのが 1.12 でした (#8604)
-
kubectl コマンドの改善
-
kubectl topコマンドは、memoryまたはcpuによってリストを並び替える--sort-byオプションを持つようになりました (#75920, @artmello) -
kubectl rollout restartは、DaemonSets と StatefulSets に対して機能するようになりました (#77423, @apelisse) -
kubectl get --watch=trueは、custom print columns で Custom Resource Definitions を出力するようになりました (#76161, @liggitt) - Kubernetes は、
kubectl get pv/pvc -o wideでvolumeModeの出力をサポートしました (#76646, @cwdsuzhou)-
Volume Mode は、1.13 からベータである Raw Block Volume のサポートで追加されたものです -
1.9 以前、全ての Volume plugin は Persistent Volume (PV) でファイルシステムを作成していましたが、 PV spec.volumeModeフィールドをBlockに設定することで Raw Block Device が利用できるようになりました。デフォルトはFilesystemです。 -
1.15 時点で Raw Block Volume をサポートしている Volume plugins は次のとおりです
- AWSElasticBlockStore
- AzureDisk
- FC (Fibre Channel)
- GCEPersistentDisk
- iSCSI
- Local volume
- RBD (Ceph Block Device)
- VsphereVolume (alpha)
-
- Deployments のローリングリスタートを実施する
kubectl rollout restartコマンドが新たに追加されました (#76062, @apelisse)-
Deployments に対してローリングアップデートを(表面上)マニフェストの変更なしに実施するというコマンドです -
実際には Deployments の Pod Template のアノテーションを操作するという古典的な方法が内部的に使われています -
このコマンドは DaemonSets, StatefulSets に対しても機能する変更が 1.15 に入りました
-
-
kubectl execは、リソース名を使い(例:deployment/mydeployment)、一致した Pod を選択できるようになったのに加えて、最低1つの Pod が実行されるまで待つための--pod-running-timeoutフラグが追加されました (#73664, @prksu)-
例えば kubectl exec deploy/mydeployment dateを実行すると、deploy/mydeploymentに紐づく最初の Pod 内の最初のコンテナ(デフォルト)内でdateコマンドを実行するということです -
kubectl port-forwardも以前同様にリソース名を使った実行をサポートしたため、それと同じような変更です -
加えてリソース名を使いつつ --pod-running-timeoutを使うことでまだ Pod が実行される前にコマンドを実行して、1つの Pod が実行されたらそこでコマンドを実行するということができるようになりました。デフォルトは1m(1分) です。- 軽く試したところでは、Pod が作成された瞬間にコマンドを実行してしまい、まだコンテナが正しく実行されてしないにも関わらず接続しようとして失敗してしまっているように見えます
-
その他の変更/修正
-
kubectl execの Usage で[flags]が正しい位置になるように修正されました (#77589, @soltysh)-
kubectl が利用している spf13/cobra ライブラリが [flags]を Usage の最後に自動的に追加してしまっていたが、kubectl execでは不適切なのでそれを修正したというもの
-
-
kubectl describe cronjobsのSuccessful Job History Limitのエラーが修正されました (#77347, @danielqsj)-
cronJob.Spec.SuccessfulJobsHistoryLimitはポインタであるにも関わらずそのまま渡されていました
-
-
kubectl describeの出力で、特殊な文字を含む名前のフィールドを整形せずにそのまま出力するようしたことで、表示が崩れる問題を回避しました (#75483, @gsadhani)-
kubectl describeは例えばkindはKindとして出力されるように整形していますが、一部のフィールド名で表示が崩れていました
-
- Kind が "Status" であるカスタムリソースに対して kubectl が正しくハンドリングできていなかった問題を修正しました (#77368, @liggitt)
-
Admission Webhook で利用される meta.k8s.io/v1.Statusの処理が甘かったことで問題があったようです
-
- Pod への/からのコピーかどうかに関わらず、
kubectl cpのエラーを一貫して提供するようになりました (#77010, @soltysh)-
これまでは、Pod にコピーする場合と、Pod からコピーする場合でエラー内容が異なってしまっていたのを修正したということです
-
- 例えば
key:effectやkey=:effect-といった、より多くの v1.Taint 形式のパースのサポートが追加されました (#74159, @dlipovetsky)-
kubectl taintは、これまで値のない Taint 形式を不正として扱っていたようです -
値がなくてもよいことを知りませんでした
-
所感
1.15 では、特に目立った大きな変更は SIG-CLI ではありませんでした。kubectl rollout restart でわざわざ PATCH を使わずに Workload API をリスタート(再作成)できるようになったのはうれしい方も多いと思いますが、一方で kubectl 自体にこの機能を本当に追加する必要があったのか、プラグインとすることで kubectl のメンテナンスコストを上げずに済んだのではないかと考えています。kubectl プラグインは現在のところ単にプラグインのコマンドを呼び出すだけであり、便利な面はほとんどありませんが、kubectl completion による bash/zsh の自動補完に対応する PR を作成してレビューを受けていますので、今後補完されるようになれば少しは便利に使えるようになります。また、kubectl プラグインマネージャの krew を使えば、他の人が作成したプラグインを簡単にインストールして利用できます。ぜひ kubectl プラグインを使ってみてください。
- kubectl のプラグイン機能 kubectl plugin を使おう! - Qiita
-
https://github.com/kubernetes-sigs/krew
- 私が作成したプラグイン
open-svc,view-serviceaccount-kubeconfig,sort-manifestsも krew からインストールできます
- 私が作成したプラグイン
- kubernetes/cli-runtime: Set of helpers for creating kubectl commands and plugins.