When to Run Code Generation
Run code generation after:Modifying CRD Types
Adding/changing fields in
api/ce/kubelb.k8c.io/v1alpha1/ or api/ee/kubelb.k8c.io/v1alpha1/Adding Kubebuilder Markers
Adding validation markers like
+kubebuilder:validation:RequiredChanging RBAC
Modifying RBAC markers in controller comments (
//+kubebuilder:rbac)Adding New Controllers
Creating new controller files that need generated code
Full Code Generation Pipeline
Generate DeepCopy methods
Generates
DeepCopy, DeepCopyInto, and DeepCopyObject methods for all API types.Generate CRD manifests
Creates CustomResourceDefinition YAML files from Go structs and kubebuilder markers.
Individual Generation Commands
DeepCopy Generation
Generate DeepCopy methods for API types:controller-gen to generate code in zz_generated.deepcopy.go files:
- Header template:
hack/boilerplate/boilerplate.go.txt - Processes all packages with
//+kubebuilder:object:generate=true
CRD Manifest Generation
Generate CRD YAML files:config/crd/bases/*.yaml- Base CRD definitionscharts/kubelb-manager/crds/*.yaml- Helm chart CRDscharts/kubelb-ccm/crds/kubelb.k8c.io_syncsecrets.yaml- CCM CRDs
RBAC Generation
Generate RBAC manifests from controller markers:config/kubelb/rbac/role.yaml- Manager cluster roleconfig/ccm/rbac/role.yaml- CCM cluster role
Reconciliation Helper Generation
Generate resource reconciliation helpers:internal/resources/reconciling/zz_generated_reconcile.go based on:
- Configuration:
hack/reconciling.yaml - Library:
k8c.io/reconciler
Kubebuilder Markers
Kubebuilder markers are special comments that control code generation.Common Type Markers
RBAC Markers
RBAC markers go above theReconcile method:
groups: API group (empty string for core resources)resources: Resource type (use/statusor/finalizersfor subresources)verbs: Allowed operations
Webhook Markers
Tool Versions
KubeLB uses specific tool versions (defined in Makefile):| Tool | Version | Purpose |
|---|---|---|
| controller-tools | v0.20.1 | CRD/RBAC/webhook generation |
| kustomize | v5.8.1 | Kubernetes manifest management |
| helm-docs | v1.14.2 | Helm chart documentation |
| crd-ref-docs | v0.3.0 | API reference docs |
| go | 1.25.7 | Go version |
Helm Chart Documentation
Generate Helm chart README files:charts/kubelb-manager/README.mdcharts/kubelb-ccm/README.mdcharts/kubelb-addons/README.md
values.yaml includes doc comments:
Metrics Documentation
Generate Prometheus metrics reference:docs/metrics.md by parsing metric definitions in internal/metrics/.
Example metric definition:
Gateway API CRDs
Update Gateway API CRDs:- Standard channel:
internal/resources/crds/gatewayapi/standard/ - Experimental channel:
internal/resources/crds/gatewayapi/experimental/
Verification Commands
After code generation, verify correctness:Troubleshooting
”controller-gen: not found”
Solution: Install controller-gen:CRDs not updating after API changes
Solution: Run full generation pipeline:RBAC permissions missing
Cause: Missing or incorrect RBAC markers Solution:- Add RBAC markers above
Reconcilemethod - Run
make manifests - Check generated
config/*/rbac/role.yaml
Import order violations
Solution: Run gimps to fix import order:Best Practices
Always run full pipeline before committing
Always run full pipeline before committing
Don't manually edit generated files
Don't manually edit generated files
Files with
zz_generated or DO NOT EDIT in their name/header are auto-generated.Generated files:**/zz_generated.*.goconfig/crd/bases/*.yamlconfig/*/rbac/*.yamlcharts/*/README.md
Test CRD changes locally
Test CRD changes locally
After modifying CRDs:
Use descriptive kubebuilder markers
Use descriptive kubebuilder markers
Add descriptions to fields for better CRD documentation:
Next Steps
API Reference
View the complete API reference
Controller-gen
Learn more about controller-gen markers
