はじめに
ここでは、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.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 が利用している spf13/cobra ライブラリが
-
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
の処理が甘かったことで問題があったようです
-
Admission Webhook で利用される
- 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.