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