controller-runtime
カスタムコントローラーを開発するためには、Kubernetesが標準で提供しているclient-go, apimachinery, apiなどのパッケージを利用することになります。
controller-runtimeは、これらのパッケージを抽象化・隠蔽し、より簡単にカスタムコントローラーを実装可能にしたライブラリです。
抽象化・隠蔽しているとは言っても、Kubernetesのコンセプトに準拠する形で実装されています。
必要があればオプションを指定することにより、client-go
やapimachinery
が提供している機能のほとんどを利用できます。
controller-runtimeの設計コンセプトについて知りたい方はKubeBuilder Design Principlesを参照してください。
controller-runtimeが提供する代表的なコンポーネントには以下のものがあります。
- manager.Manager
- 複数のコントローラーをまとめて管理するためのコンポーネント。
- リーダー選出やメトリクスサーバーとしての機能など、カスタムコントローラーを実装するために必要な数多くの機能を提供します。
- client.Client
- Kubernetesのkube-apiserverとやり取りするためのクライアント。
- 監視対象のリソースをインメモリにキャッシュする機能などを持ち、カスタムリソースも型安全に扱うことが可能なクライアントとなっている。
- reconcile.Reconciler
- カスタムコントローラーが実装すべきインタフェース。
以降のページではこれらの機能を詳細に解説していきます。