もりはやメモφ(・ω・ )

ITとか読書感想文とか

kubectlのkrewで利用できるpluginの有名どころを眺めてみた

いまさら 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 という名付けみたいですね、当初は何かの略称と思って考えが及びませんでした。

krew.sigs.k8s.io

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の画面で切り分けられるのは素晴らしい体験でした
  • 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-convertkrew 管理ではなく、公式の kubectl インストールのページで紹介されていました。 autocompletion と同格とはやりおる。この違いはなんなのか...

kubernetes.io

Conclusion

以上、 k krew で利用できる有名どころのプラグインを見てみた結果でした。 知らないと活用できないので、こういったザッピング的なことをたまにやると学びが多くて良いですね。 みんなが利用している=GitHubのStar数が一定数ある として絞ったことで時間的にもさほどかからずに知識をアップデートできたと感じています。

CNCF Cloud Native Interactive Landscape も見直したいところですけど、もはや”ウォーリーを探せ”レベルに数があるので大変です。。 一方でCloudNativeの隆盛を感じる要素でもあるので、Landscapeが広がっていくことには希望を感じています。 landscape.cncf.io