kubectlはプラグイン機構を備えている。プラグインの仕組みを利用することで、kubectlにサブコマンドを追加して公式cliにはない機能を実現できる。
Krewによるプラグイン管理
プラグインはファイル名が kubectl-から始まる実行可能なファイルであればよく、インストール先のディレクトリ等に制約は無い。
このため、プラグインごとに異なるインストール方法やアップデート方法が必要になり、管理が大変だった。
これを解決するのがKrewで、統一的なインストール手順やプラグインの一括更新といった仕組みを提供してくれる。 また、プラグイン一覧を krew-indexとして管理しているので必要なプラグインを簡単に探すことができる。プラグイン一覧はドキュメントにも掲載されている。
Krewでプラグインをインストールするには kubectl krew install <pluginname>を実行すればよい。また、複数のプラグイン名を列挙したり、kubectl krew listの出力と同じフォーマットを入力として受け付けるので簡易的なプラグイン一覧の管理も可能。
$ kubectl krew install --help
...
Examples:
To install one or multiple plugins from the default index, run:
kubectl krew install NAME [NAME...]
To install plugins from a newline-delimited file, run:
kubectl krew install < file.txt
...
Krewにはできないこと
Krewにはプラグインのバージョン管理の仕組みは存在しない。 プラグインの更新(kubectl krew upgrade)を実行すると最新バージョンに更新してくれるが、利用可能なバージョンの範囲を指定することはできない。
また、シグネチャ等でプラグインを検証する仕組みも提供されていない。 こちらはいくつかのIssueで提案されており需要はありそうだが具体的な話が進んでいるわけではなさそう。