はじめに
GKEの管理をしていて日々kubectlを打っているのですが、最近krew
というツールの存在を知りました。
krew
のプラグインを活用することで、kubectlをもっと便利に使えるようになります。
そこで本記事では、いくつかプラグインを触ってみて便利そうだなと思ったものをサンプルコマンドと共に紹介していきます。
前提
-
krewのインストール手順は下記ドキュメントをご参照下さい。
https://krew.sigs.k8s.io/docs/user-guide/setup/install/ -
kubectlはエイリアスを張っているので、本記事では全て
k
コマンドになっています。
krewの基本的なコマンド
# krewの更新(リストの更新)
$ k krew update
# インストール済みのプラグインの更新
$ k krew upgrade
# プラグインの検索
$ k krew search
# プラグインのインストール
$ k krew install {プラグイン名}
# プラグインのアンインストール
$ k krew uninstall {プラグイン名}
# インストール済みプラグインを一覧表示
$ k krew list
便利プラグイン紹介
※ 個人的に使う場面が多そうなプラグインです。便利なプラグインは他にも沢山あるのでぜひ探してみてください。
krewプラグイン一覧
# 2023/06現在で200以上のプラグインがあります
$ k krew version
OPTION VALUE
GitTag v0.4.3
$ k krew search |wc -l
218
ctx
簡単にコンテキストを変えて、操作対象クラスタを切り替えできる。
日常的に操作するクラスターが複数あるときにかなり便利。
これまでkubectx
使ってましたが、こっちでも良いなと思いました。
# 対象のクラスタ確認
$ k ctx
# 切り替え
$ k ctx my-cluster-1
ns
簡単にnamespaceを切り替えできる。クラスタ内で複数namespaceを操作するときに便利。
# default名前空間に切り替え
$ k ns default
# kube-system名前空間に切り替え
$ k ns kube-system
Context "gke_xxx_my-cluster-1" modified.
Active namespace is "kube-system".
# 確認
$ k get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
event-exporter-gke 1/1 1 1 1d
kube-dns 2/2 2 2 1d
kube-dns-autoscaler 1/1 1 1 1d
neat
既存リソースをget -o yaml
で出力したマニフェストから、k8sが自動付与した冗長な記述を削ぎ落として表示してくれる。
マニフェストがかなり読みやすくなる。個人的にかなり好みです。
おそらく、getできれば何に対しても利用できると思います。
$ k get po my-pod -o yaml | k neat
# もちろんdeploymentでも
$ k get deploy my-deploy -o yaml | k neat
# json表示も可能
$ k get deploy my-deploy -o yaml | k neat -o json
stern
k8sの複数のPodとコンテナをtailできる。色分け表示されるので分かりやすい。
kubectl logs
をPodごとに実行しなくても良いので、デバッグ時等に大活躍します。
Pod名のクエリは正規表現で指定
$ k stern {マッチするPod名}
# 全namespaceの全podのログ
$ k stern hello -A
resource-capacity
resource-capacity (kube-capacity)
Node・PodごとにResource Request/Limitを一覧表示してくれる。
従来ならk describe node
の長ったらしい出力の中から見にいかないといけないのを、簡略化して表示してくれるので、個人的にすごく好みです。
# ノードごとの使用率・合計使用量を表示
$ k resource-capacity
---
NODE CPU REQUESTS CPU LIMITS MEMORY REQUESTS MEMORY LIMITS
* 2237m (38%) 343m (5%) 3795Mi (20%) 5355Mi (29%)
gke-node-1 573m (29%) 100m (5%) 1250Mi (20%) 1610Mi (26%)
gke-node-2 1033m (53%) 100m (5%) 1200Mi (19%) 1780Mi (29%)
gke-node-3 631m (32%) 143m (7%) 1345Mi (22%) 1965Mi (32%)
---
# ノードごとの空き容量・合計空き容量を表示
$ k resource-capacity -a
---
NODE CPU REQUESTS CPU LIMITS MEMORY REQUESTS MEMORY LIMITS
* 3553m/5790m 5447m/5790m 14321Mi/18116Mi 12761Mi/18116Mi
gke-node-1 1357m/1930m 1830m/1930m 4789Mi/6039Mi 4429Mi/6039Mi
gke-node-2 897m/1930m 1830m/1930m 4839Mi/6039Mi 4259Mi/6039Mi
gke-node-3 1299m/1930m 1787m/1930m 4694Mi/6039Mi 4074Mi/6039Mi
---
# ノード別でPodごとの使用量を表示
$ k resource-capacity -p
---
NODE NAMESPACE POD CPU REQUESTS CPU LIMITS MEMORY REQUESTS MEMORY LIMITS
* * * 2237m (38%) 343m (5%) 3795Mi (20%) 5355Mi (29%)
gke-node-1 * * 573m (29%) 100m (5%) 1250Mi (20%) 1610Mi (26%)
gke-node-1 default my-pod-1 50m (2%) 0m (0%) 250Mi (4%) 250Mi (4%)
gke-node-1 default my-pod-2 200m (10%) 0m (0%) 600Mi (9%) 600Mi (9%)
...
---
# namespaceを絞って表示
$ k resource-capacity -p -n default
# 並び替え表示(下記はCPU request値の降順)
$ k resource-capacity -p --sort cpu.request
# 実際の使用状況も表示
$ kube-capacity -u
status
describeやgetよりも、リソースのステータスをわかりやすく表示してくれる。
# 全Deploymentの詳細を表示
$ k status deploy
# 特定のものだけ
$ k status deploy my-deploy
# podやingress, service等も可能
get-all
従来のk get all
では全てのリソースを表示してくれなかったのを、krewのget-allなら本当に全部表示してくれる(らしい)。
初見で全部のリソースを俯瞰したい時とか、変なリソース作られてないか確認したい時に役立ちそう。
GKEのカスタムリソースであるmanagedcertificate
なども出力してくれたので、結構イケてそうです。
$ k get-all
## 大量に出力されるので、ファイルに書き出した方が良さそう
$ k get-all > get-all.txt
# namespace指定
$ k get-all --namespace=default
# scope指定
$ k get-all --only-scope=cluster
images
Podが使用しているコンテナイメージを一覧表示してくれる。
# 表形式で表示(場合によっては体裁崩れて見づらい)
$ k images
# 箇条書き表示。個人的にこっちの方が見やすい
$ k images -oy
- pod: my-pod
container: my-container
image: gcr.io/my-project/example:sha
# 抜粋表示
$ k images -oy -c 1,3
- pod: my-pod
image: gcr.io/my-project/example:sha
tree
リソースの関係をツリー表示してくれる。
初見のリソースについて把握したいときに便利そう。
$ k tree deploy my-deploy
$ k tree svc my-service
## ingressはできないっぽい..