Controller¶
See also: How to manage controllers
In software design, a controller is an architectural component responsible for managing the flow of data and interactions within a system, and for mediating between different parts of the system. In Juju, it is defined in the same way, with the mention that:
It is set up via the boostrap process.
It refers to the initial controller unit as well as any units added later on (for machine clouds, for the purpose of high-availability) – each of which includes
a unit agent,
juju-controllercharm code, anda controller agent running, among other things, the Juju API server and an in-process embedded Dqlite database.
It is responsible for implementing all the changes defined by a Juju user via a Juju client post-bootstrap.
It stores state in the internal Dqlite database.
Controller storage¶
A Juju controller has two basic persistent storage needs: database access and blob storage. Prior to Juju 4, both these needs were satisfied by a MongoDB database; however, with the switch to a Dqlite database in Juju 4, only the database access need is satisfied – for blob storage the Juju controller will require an object store. By default, Juju will use the filesystem of the controller’s supporting infrastructure.