See also:

In Juju, a model is a user-defined collection of applications.

Models are wrappers for all of the components that support the applications running within them, such as relations (integrations), storage, and network spaces.

One can deploy multiple applications to the same model. Thus, models allow the logical grouping of applications and infrastructure that work together to deliver a service or product. Moreover, one can apply common configurations to a whole model. As such, models allow the low-level storage, compute, network and software components to be reasoned about as a single entity as well.

All Juju models are managed by a Juju controller. This enables clients to have a single point of contact with the system and allows commands to be executed independently from the workloads. Both the model and the controller are associated with a cloud (and a cloud credential), though they do not both have to be on the same cloud (this is a scenario where you have a ‘multicloud controller’ and where you may have ‘cross-model integrations (relations)’).

A model is associated with a single controller. A controller can have an indefinite number of models and each model can have an indefinite number of machines (and thus applications). Models themselves can be shared amongst Juju users.

Models are of two types:

  1. The controller model (controller). This is your Juju management model. A Juju deployment will have just one controller model, which is created by default when you create a controller (juju bootstrap). It typically contains a single machine, for the controller (since Juju 3.0, the controller application). If controller high availability is enabled, then the controller model would contain multiple instances. The controller model may also contain certain applications which it makes sense to deploy near the controller – e.g., starting with Juju 3.0, the juju-dashboard application.

  2. Regular model. This is your Juju workload model. A Juju deployment may have many different workload models, which you create manually (juju add-model). It is the model where you typically deploy your applications.

The picture below illustrates a typical deployment with one controller model containing one controller machine and a number of regular models, each containing multiple workload machines.


Last updated 8 months ago. Help improve this document in the forum.