Kubebuilderは、Kubernetes Custom Resource Definition(CRD)を作成するためのフレームワークです。プロジェクトを始めるときのkubebuilder init
コマンドにはいくつかのオプションがありますが、私はいつもこんなかんじで指定してます。
kubebuilder init \
--domain <ドメイン名> \
--repo github.com/<ユーザー名>/<レポジトリ名> \
--project-name <プロジェクト名> \
--owner "<オーナー名>"
# 例
kubebuilder init \
--domain dns.suin.jp \
--repo github.com/suin/kubernetes-dns \
--project-name suin-dns \
--owner "Suin"
各オプションの意味と私の使い方
--domain
自分の所有しているドメイン名を指定します。これはCRDのグループとして使われます。ドメインは会社やプロジェクトなどの組織で所有していることが普通ですが、ひとつの組織でひとつしかCRDグループを作らないことは長い目で見たらないと思うので、組織のトップレベルドメインじゃなく、サブドメインを指定するようにしています。
例: --domain dns.suin.jp
--repo
GitHubのリポジトリ名を指定します。これはGoのモジュール名となります。
例: --repo github.com/suin/kubernetes-dns
--project-name
プロジェクト名を指定します。Kustomize マニフェストの namePrefix / namespace に使用されます。指定しないとディレクトリ名が採用されますが、開発マシン上のディレクトリ名とプロジェクト名はいつも一致するわけじゃないので、明示的に指定するようにしています。「DNS」のような一般名詞の場合は、それでnamespaceが作られては良くないと思うので、組織名などを先頭につけてsuin-dns
のようにします。
例: --project-name suin-dns
--owner
プロジェクトのオーナー名を指定します。著作権情報に使用されます。指定しないと空欄になっちゃうので必ず指定するようにしています。
例: --owner "Suin"
まとめ
どれもやろうと思えば後で変更できますが、できるだけ後々の手間をかけないように最初から正しく設定しておくのがおすすめです。特に--domainはCRDのグループ名に影響するため、後から変更すると既存のCRDとの互換性に影響する可能性があります。
最後までお読みくださりありがとうございました。Kubebuilderを使ったKubernetes オペレータ開発で少しでもお役に立てば嬉しいです!