OpenShiftでcontroller-runtimeを試す

あけましておめでとうございます。Red HatでOpenShiftのサポートをしているid:nekopです。OpenShift 全部俺 Advent Calendar 2018 - Qiitaの16日目のエントリです。

さて、過去2回でclient-goを直接利用する素のコントローラーを見ていきましたが、現在主流のkubebuilderやoperator-sdkなどの高レイヤーのライブラリはcontroller-runtimeというライブラリを利用しています。controller-runtimeを利用することでControllerとWebhookを簡単に実装できるようになっています。

含まれているサンプルではReplicaSetにLabelを付与するControllerと、Podのアノテーションを付与およびチェックするWebhookを実装しています。

スタンドアロンビルドする手順は過去2回のものと変わらないので省略して、成果物だけ以下に置きました。webhook部分は削除してpod名を出力するだけのControllerに変更していますが、importなどを除くと50行程度でControllerが書くことができています。素のclient-goのworkqueueサンプルでは150行くらいだったので、1/3くらいの手軽さです。

https://github.com/nekop/cr-pod-list-controller

glide.yamlを作った時に気づきましたが、controller-runtime v0.1.9ではk8s 1.11 / client-go 0.8ではコンパイルエラーになったので、k8s 1.12 / client-go 0.9にしています。新しいライブラリでまだバージョンが0系、stableブランチがないので利用する際には注意が必要です。クラスタはOpenShift 3.11 / k8s 1.11でも上記のサンプルは動作します。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。