Kubeless uses custom resource definition, which means that when you create a custom resource definition, then the Kubernetes API server creates a resource path for each version specified. Custom resource definition can be namespaced or cluster-scope, so CRD is called a function, which means that Kubeless functions can be created as normal Kubernetes resources in the background, and a controller is created. The controller will watch these custom resources, and will launch upon runtime demand. The following diagram shows how this architecture works: