User Guide: Juju Concepts

If you are new (or new-ish) to Juju :juju:, your feedback is very welcome on a new guide available that explains some of the terminology that we use in the project:

Link to the new page:

For the impatient, here’s a copy of the text:

Working with Juju productively involves understanding some of its terminology. This page is a 2 minute summary of the main things to learn.

Hosting environment

Juju interacts with a hosting environment to deploy and manage your workload.

  • Machines are compute resources, whether bare-metal servers, virtual machines or containers.

  • Providers, or cloud providers, are the businesses that provide clouds and APIs to access them.

  • Clouds are targets that Juju can deploy to. Public clouds include AWS, Google Compute Engine and Microsoft Azure.

Juju’s software architecture

Juju uses an active agent architecture, the core of which is a controller. These terms describe how Juju gets its work done.

  • Charms are software packages that are invoked during phases of an application’s lifecycle by Juju. They implement installation, scaling and configuration negotiation.

  • Client is a term used for the tool that users use to interact with Juju, such as the juju executable.

  • Controllers are software agents running in a cloud that manage models.

  • Agents are running instances of Juju with responsibility to manage an application, a unit, machine or controller. They interact as a distributed system. Commands that you execute are sent to the controller, which then delegates the command to the responsible agent.

Software modelling

Within the Juju ecosystem, an “application” is an abstract entity. These terms describe how Juju enables you to define your software model, so that it can be implemented.

  • Applications are instances of a charm. Applications do not necessarily corespond to a software package running on a machine, but what the charm defines.

  • Models are user-defined collections of applications. Models are wrappers for all of the components that support the applications running within them, such as relations, storage and network spaces.

  • Units are instances of the software running within an applications. An application’s units occupy machines.

  • Relations are protocols facilitated by Juju that allow applications to auto-negotiate their configuration. An application’s relations are defined by its charm.

If you encounter any unfamiliar terms, the Juju project provides a full glossary.