The operator-sdk CLI can generate, or scaffold, a number of packages and files for each Operator project.

Go-based project layout

Go-based Operator projects, the default type, generated using the operator-sdk init command contain the following files and directories:

File or directory Purpose


Main program of the Operator. This instantiates a new manager that registers all custom resource definitions (CRDs) in the apis/ directory and starts all controllers in the controllers/ directory.


Directory tree that defines the APIs of the CRDs. You must edit the apis/<version>/<kind>_types.go files to define the API for each resource type and import these packages in your controllers to watch for these resource types.


Controller implementations. Edit the controller/<kind>_controller.go files to define the reconcile logic of the controller for handling a resource type of the specified kind.


Kubernetes manifests used to deploy your controller on a cluster, including CRDs, RBAC, and certificates.


Targets used to build and deploy your controller.


Instructions used by a container engine to build your Operator.


Kubernetes manifests for registering CRDs, setting up RBAC, and deploying the Operator as a deployment.