controller-tools
Kubebuilderでは、カスタムコントローラーの開発を補助するためのツール群としてcontroller-toolsを提供しています。
controller-toolsには下記のツールが含まれていますが、本資料ではcontroller-genのみを取り扱います。
- controller-gen
- type-scaffold
- helpgen
controller-gen
controller-genは、GoのソースコードをもとにしてマニフェストやGoのソースコードの生成をおこなうツールです。
controller-genのヘルプを確認すると、下記の5種類のジェネレータの存在が確認できます。
$ controller-gen -h
(中略)
generators
+webhook[:headerFile=<string>][,year=<string>] package generates (partial) {Mutating,Validating}WebhookConfiguration objects.
+schemapatch[:generateEmbeddedObjectMeta=<bool>],manifests=<string>[,maxDescLen=<int>] package patches existing CRDs with new schemata.
+rbac[:headerFile=<string>],roleName=<string>[,year=<string>] package generates ClusterRole objects.
+object[:headerFile=<string>][,year=<string>] package generates code containing DeepCopy, DeepCopyInto, and
+crd[:allowDangerousTypes=<bool>][,crdVersions=<[]string>][,deprecatedV1beta1CompatibilityPreserveUnknownFields=<bool>][,generateEmbeddedObjectMeta=<bool>][,headerFile=<string>][,ignoreUnexportedFields=<bool>][,maxDescLen=<int>][,year=<string>] package generates CustomResourceDefinition objects.
kubebuilderが生成したMakefileには、make manifestsとmake generateというターゲットが用意されており、make manifestsではwebhook, rbac, crdの生成、make generateではobjectの生成がおこなわれます。
controller-genがマニフェストの生成をおこなう際には、Goのstructの構成と、ソースコード中に埋め込まれた// +kubebuilder:から始まるコメント(マーカーと呼ばれる)を目印にします。
利用可能なマーカーは下記のコマンドで確認できます。(-wwや-wwwを指定するとより詳細な説明が確認できます)
$ controller-gen crd -w
$ controller-gen webhook -w