いまさら kubectl krew
を使い始めたので、有名どころを確認してみました。
Kubernetes(以後はk8s)は業務でEKSを利用していて、とはいえメインの担当ではないのでたまにトラブルシュートの支援で kubectl
を打つことがある程度です。今となっては保持者も珍しくない資格 CKA/CKAD も取得しましたが、正直いって普段はk8sを頻繁に触らないので資格勉強をしている時が一番k8s力が高かったりします。。。
そんなゆるふわk8sエンジニアな私ですが、ふと気になって kubectl
のプラグイン一覧を眺めてみました。
kubectl
のプラグインは krew
と呼ばれるツールで管理することができます。 krew
の公式ページによると "Krew is the plugin manager for kubectl command-line tool." とあります。
kubectl
プラグイン用の brew
だから krew
という名付けみたいですね、当初は何かの略称と思って考えが及びませんでした。
Plugins with over 900 stars on GitHub
有名どころの定義として、とりあえず "GitHubのStarが900以上のもの" として定義しました。当初は1000以上のみを絞るつもりでしたが、全体の星数の傾向から900台のものも十分有名と考えて良いと考えました。(星数が二桁のプラグインも少なくないので)
というわけで、2022-05-22時点でStarが900を越えるプラグインのリポジトリは以下でした。(目視確認のため漏れはあるかも)
Plguin Name | Description | Number of GitHub Stars | URL |
---|---|---|---|
access-matrix | Show an RBAC access matrix for server resources. RBACのマトリクスをテーブル上に表示してくれる。リポジトリの名前がrakkessとなっていて、plugin化するにあたってわかりやすい名前にしたっぽい? |
958 | https://github.com/corneliusweig/rakkess |
cert-manager | Manage cert-manager resources inside your cluster. 名前からLet's Encrypt管理専用と思ったがHashiCorp VaultやVenafi ? も対応しているらしい。ロゴがかっこいいです |
8.9k | https://github.com/cert-manager/cert-manager |
ctx | Switch between contexts in your kubeconfig. krewを使う前から常用していたサブコマンドの一つ。複数のクラスタをスイッチして管理するためには必須なツールですね |
13k | https://github.com/ahmetb/kubectx |
flyte | Monitor, launch and manage flyte executions. Machine Learning と Data Processing のための言語かつプラトフォームのflyteのためのWorkflow? 詳しくない分野なので概要すらわかりませんでした... |
2.3k | https://github.com/flyteorg/flyte |
ingress-nginx | Interact with ingress-nginx. ingress-nginxは利用もあって知っていましたが、その管理用のプラグインが存在することは知りませんでした。各種inspectやlintも用意されてるので今後は使っていこう... |
1.3k | https://kubernetes.github.io/ingress-nginx/kubectl-plugin/ |
karmada | Manage clusters with Karmada federation. 複数のクラウドで、複数のクラスタを管理する "Kuberenetes Armada" のためのプラグイン。思想の広がりは驚嘆すべきだけど管理は大変そうだなぁ... |
2.2k | https://github.com/karmada-io/karmada |
krew | Package manager for kubectl plugins. krew自身のPluginリストに載っているのも面白いですね。今後は利用させていただきます |
4.8k | https://github.com/kubernetes-sigs/krew |
kudo | Declaratively build, install, and run operators using KUDO. k8sのオペレータをビルドできるKUDO(Kubernetes Universal Declarative Operator)のプラグインらしいです。今の所独自なオペレータを欲していないので時が来たら... |
1k | https://kudo.dev/ |
kyverno | Kyverno is a policy engine for kubernetes. Admission controlやそのスキャンを行う policy engine とのこと。kubectlに慣れていれば簡単に使える様にデザインされているそうです |
2.4k | https://github.com/kyverno/kyverno |
neat | Remove clutter from Kubernetes manifests to make them more readable. これめっちゃ好き。neat = きちんとした。の意味通り kgp hogepod-o yaml で出力した内容からk8sが自動付与した情報を削ぎ落として綺麗に表示してくれる。地味に良くきくいい感じのプラグインですね! |
965 | https://github.com/itaysk/kubectl-neat |
ns | Switch between Kubernetes namespaces. ctxと同じく超必須なツールですね。namespaceのスイッチが簡単にできます |
13k | https://github.com/ahmetb/kubectx |
popeye | Scans your clusters for potential resource issues. クラスタとリソースのサニタイズ(セキュリティ的な無害化)のためのレポートを作成してくれます。お試しでやったけどリターンも一瞬だしCUI上でも見やすいレポートでびっくりでした |
3.4k | https://popeyecli.io/ |
score | Kubernetes static code analysis. manifestファイルのLintをしてくれるツールと理解。 "securityContext.readOnlyRootFilesystem to true" などの警告がいっぱい出ました... 前述した popeye よりも検出数は多いですね、良さそう |
1.8k | https://github.com/zegl/kube-score |
sniff | Start a remote packet capture on pods using tcpdump and wireshark. やべぇ、これはやばいやつです。対象のPodにWiresharkのバイナリを送り込み、そのキャプチャデータを手元に転送し、自分は手元PCのリッチなWireshark画面で通信を確認できます。やばい、最高。 |
2.1k | https://github.com/eldadru/ksniff |
starboard | Toolkit for finding risks in kubernetes resources. 複数のk8s系セキュリティツールを統合管理して利用する試みのツールキットとのこと。思想は好きですがまとまるのかな... |
1.2k | https://github.com/aquasecurity/starboard |
tail | Stream logs from multiple pods and containers using simple, dynamic source selection. ログストリームを確認するにはsternが鉄板ですが、tailという名前的にもわかりやすいプラグインがあるのを知りました。 むしろ stern は星が790と少ない....デフォで使うとクラスタのログ全部取るのもいいですね。pluginとしては tail ですが、リポジトリ名の kail なのはイカす |
1.5k | https://github.com/boz/kail |
trace | Trace Kubernetes pods and nodes with system tools. bpftraceを行えるプラグインとのこと。このレイヤは詳しくないです... |
1.6k | https://github.com/iovisor/kubectl-trace |
tree | Show a tree of object hierarchies through ownerReferences. deploymentやserviceをツリー上に表示してくれるプラグイン。初めて触るリソースをシュッと可視化するのに便利ですね |
2.1k | https://github.com/ahmetb/kubectl-tree |
My favorite plugins
今回の調査で知り、今後も頻繁に利用しそうなのは以下のプラグインたちです。
- sniff
- このプラグインには感動を覚えました。先日とあるpodの動作確認のために
apt install tcpdump
とかやっていたばかりだったので、コマンド一発でリッチなWiresharkの画面で切り分けられるのは素晴らしい体験でした
- このプラグインには感動を覚えました。先日とあるpodの動作確認のために
- score
- 新しいリソース群を作成した時にとりあえず
k score *.yml
するだけでも質の良いマニフェストを維持できそうですし、CIにも入れていきたいと思いました
- 新しいリソース群を作成した時にとりあえず
- tail
- stern で十分ログの確認はできていますが、ネーミング的にわかりやすいので今後はこちらにシフトしていきたいですね
- tree
- 階層構造がシュッとわかるのはシンプルに嬉しいです
- neat
k pod hogepod -o yaml | k neat
はシンプルに良いですね、k edit
してしまったリソースをファイルに落とす場合も便利そうです
- ctx/ns
- コマンドそれ自体は既に使っていましたが、今後は
k ctx
,k ns
としてサブコマンドとして使っていこうと思います
- コマンドそれ自体は既に使っていましたが、今後は
kubectl-convert is not managed by krew
実はプラグインのリストを眺めた理由は kubectl-convert
を使いたかったからでした。利用しているingressのマニフェストが以下の警告を出す様になっていて、手で変更するよりも kubectl-convert
を使う方が良いとの情報を見たからです。
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
調べてみると kubectl-convert
は krew
管理ではなく、公式の kubectl インストールのページで紹介されていました。 autocompletion と同格とはやりおる。この違いはなんなのか...
Conclusion
以上、 k krew で利用できる有名どころのプラグインを見てみた結果でした。
知らないと活用できないので、こういったザッピング的なことをたまにやると学びが多くて良いですね。
みんなが利用している=GitHubのStar数が一定数ある
として絞ったことで時間的にもさほどかからずに知識をアップデートできたと感じています。
CNCF Cloud Native Interactive Landscape も見直したいところですけど、もはや”ウォーリーを探せ”レベルに数があるので大変です。。 一方でCloudNativeの隆盛を感じる要素でもあるので、Landscapeが広がっていくことには希望を感じています。 landscape.cncf.io