Krew、kubectlプラグインマネージャーの使い始め方
Krewは、公式のKubernetes CLIであるKubectlのためのパッケージマネージャーです。Krewを使用すると、CLIの機能を拡張するKubectlプラグインを見つけて、インストールし、更新することができます。
Kubectlのプラグイン機構は、いくつかのプラグインインストール方法をサポートしています。最も簡単な方法は、プラグインをPATHにあるディレクトリに直接入れることです。これは手動のプロセスであり、新しいリリースが公開されてもプラグインを更新する方法は提供されません。
Krewは、Kubectlプラグインエコシステムのための一般的なパッケージ管理機能を提供します。既知のパッケージの公開インデックスを維持し、サードパーティーのインデックスもサポートしています。後者は、組織やチーム内でプラグインをプライベートに公開することを可能にします。
Krewのインストール
KrewはKubernetesプロジェクトの一部であるオープンソースのツールです。しかし、KrewはKubectlにバンドルされていません。Krewを始めるには、最新のリリースを手動でダウンロードしてインストールする必要があります。現在のKrewディストリビューションは、Kubectl v1.12以降で動作します。
ダウンロードはプロジェクトのGitHubリリースページから利用できます。配布用のtarアーカイブにはKrewバイナリが含まれています。インストールスクリプトを実行してKrewをシステムに追加してください:
./krew-linux_amd64 install krewあなたのシステムに適したKrewの配布物を自動的にダウンロードしてインストールする完全なスクリプトがドキュメント内にあります。
次に、Krewのbinディレクトリを含むようにPATHを更新してください。これは通常$HOME/.krewにある$KREW_ROOT内にあります。インストールしたKubectlプラグインの実行可能ファイルは、binのサブディレクトリ内に保存されます。
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"これで、kubectl krewコマンドを使用してKrewを利用できるようになったはずです:
~$ kubectl krew
krew is the kubectl plugin manager.
You can invoke krew through kubectl: "kubectl krew [command]..."
Usage:
kubectl krew [command]
...
プラグインインデックスの更新
Krewのプラグインインデックスは、現在インストール可能なプラグインをすべてカタログ化しています。これは、aptのようなOSレベルのパッケージマネージャーによって使用されるパッケージリストと似たように機能します。
インデックスを定期的に更新して、Krew インストールが利用可能なすべてのプラグインの最新バージョンにアクセスできるようにします:
kubectl krew update
Updated the local copy of plugin index.
プラグインのインストール
installコマンドはKubectlに新しいプラグインを追加します。Krewのインデックスにリストされているプラグインのいずれでもインストールできます。KrewはプラグインのダウンロードとKubectlへの登録を処理します。
kubectl krew install ctx
Updated the local copy of plugin index.
Installing plugin: ctx
Installed plugin: ctx
...
Krewは、インストール前に自動的にプラグインインデックスを更新し、新しいプラグインの最新リリースを取得できるようにします。インストールが完了すると、コマンドの出力の下部にプラグインの作者からの基本情報が表示されます。
これからは、kubectl CLIを介してプラグインのコマンドを使用できるようになります。
kubectl ctx my-context新しいプラグインリリースへの更新
Krewの最大の利点の一つは、その統合されたプラグイン更新システムです。upgradeコマンドを実行すると、パッケージインデックスが更新され、インストールされているすべてのプラグインが最新のリリースに更新されます。このプロセスは完全に自動です。
kubectl krew upgrade
Updated the local copy of plugin index.
...
プラグインは、それぞれの名前をupgradeコマンドに渡すことによって個別にアップグレードできます:
kubectl krew upgrade ctxプラグインを削除したい場合は、その名前をuninstallコマンドに指定してください:
kubectl krew uninstall ctxKrewはプラグインがあなたのシステムから完全に削除されることを保証します。
listコマンドは、すべてのプラグインとそのインストールされたバージョンを表示します:
~$ kubectl krew list
PLUGIN VERSION
ctx v0.9.4
krew v0.4.3
ns v0.9.4
Krew自体はプラグインリストに表示され、更新システムによってサポートされています。upgradeまたはupgrade krewを実行すると、プラグインが更新される前に最新のKrewリリースが取得され、インストールされます。
プラグインを検索中
search コマンドを使用することで、ターミナルから Krew パッケージインデックスをブラウズできます。
~$ kubectl krew search cert-manager
NAME DESCRIPTION INSTALLED
cert-manager Manage cert-manager resources inside your cluster no
興味のあるプラグインを見つけたら、info コマンドを実行して詳細を確認します。これにより、プラグインの現在のバージョン番号、ウェブサイトへのリンク、および著者から提供された短い説明が表示されます。
~$ kubectl krew info cert-manager
NAME: cert-manager
INDEX: default
URI: https://github.com/jetstack/cert-manager/releases/download/v1.7.0/kubectl-cert_manager-linux-amd64.tar.gz
SHA256: 73618617b9ec42994c3ea77bbc8be743e382501d42ad2ee7aeca0d32c15655c0
VERSION: v1.7.0
HOMEPAGE: https://github.com/jetstack/cert-manager
DESCRIPTION:
The official plugin accompanying cert-manger, a Kubernetes add-on to
automate the management and issuance of TLS certificates. Allows for
direct interaction with cert-manager resources e.g. manual renewal of
Certificate resources.
カスタムインデックスの使用
Krewは、独自のソースからプラグインをインストールするためのカスタムインデックスをサポートしています。インデックスは、YAMLマニフェストを含むpluginsフォルダーを持つGitリポジトリに過ぎません。これらのファイルは、インストール可能なプラグインを定義します。Krewのデフォルトインデックスの構造は、独自のインデックスを設定する際に役立つモデルです。
インデックスを追加するには、そのリポジトリのURLをindex addコマンドに渡してください。
kubectl krew index add custom-index https://example.com/krew/index.gitインデックス内でプラグインを参照するには、選択したインデックス名をプレフィックスとしてプラグインの名前の前に付けてください:
kubectl krew install custom-index/example-pluginプレフィックスが指定されていない場合、Krewはdefault/プレフィックスを使用します。これは常にKrewの組み込みプラグインインデックスを指します。プレフィックスなしのプラグイン名を独自のインデックスに渡したい場合は、KREW_DEFAULT_INDEX_URI環境変数をリポジトリのURLに設定してください:
export KREW_DEFAULT_INDEX_URI="https://example.com/krew/index.git"
Automatically resolved to the custom index
kubectl krew install example-plugin
自分のプラグインを公開する
自分のプラグインをKrewを通じてユーザーに配布するのは非常に簡単です。まず、自分のKubectlプラグインの内容をアーカイブとして作成する必要があります。.tar.gzまたは.zipファイルとして保存します。これを一般公開されている場所にアップロードします。プロジェクトのウェブサイトやGitHubのリリースページが良い選択です。
次にKrewプラグインマニフェストを作成してください。これは、プラグインの名前、説明、現在のバージョンなどの基本情報を提供するシンプルなYAMLファイルです。マニフェストには、プラグインアーカイブの公開URLも含まれています。ユーザーがプラグインをインストールすると、Krewはマニフェストに指定されたURLからそのアーカイブを取得します。
マニフェストを書いたら、それをGitリポジトリにコミットできます。そのリポジトリをカスタムKrewインデックスとして追加し、プラグインをKubectlインストールに追加します。Krewの公開インデックスへの提出は、pluginsディレクトリにマニフェストを追加するプルリクエストをそのリポジトリに作成することで受け付けられます。
結論
KrewはKubernetesのプラグインの発見、インストール、管理を簡素化します。これは、Kubectlプラグインを使用するすべての人にとって便利なツールです。Krewは、内部ツール用のカスタムプライベートインデックスを含む完全なパッケージ管理体験を提供します。
パブリックインデックスには、Kubernetes管理のあらゆる側面をカバーする180以上のプラグインが含まれています。人気のオプションには、クラスター内のCert-Managerオブジェクトを扱うためのcert-manager、簡素化されたログストリーミングを提供するtail、オブジェクトの静的分析のためのscore、そしてコンテキストやネームスペースの切り替えを簡素化するためのctxとnsなどがあります。
