How Juju works
Juju high-level architecture
Juju provides a declarative, model-driven, and interactive way to install, provision, maintain, update, and integrate applications on and across Kubernetes, Linux containers, virtual machines, and bare metal machines, on public or private cloud.
The following diagram provides an overview of the high level architecture of a Juju deployment and it describes the key components of the system. You can find a more detailed explanation of all the components you find in this page in the reference section of the Juju documentation.

A single tool to deploy and manage apps across VMs, Kubernetes, bare metal and cloud
Flexibility and portability are at the heart of Juju
Juju and charms support multiple cloud backends, giving you the choice to deploy your applications to the most cost effective, resource-rich or commercially suitable clouds, and then connect them in a way that suits your application model.
In addition Juju gives you flexibility in how to orchestrate your deployment. You can manage everything from a single, centralised Juju controller, or you can have multiple controllers installed on each layer of the infrastructure.

Juju on k8s
When applications are deployed on Kubernetes every instance of a workload runs in a pod with its own container and next to the Juju unit agent.
The model corresponds to a namespace and the applications are generally deployed as StatefulSets.
The Juju agent talks to a component called Pebble in order to interact with the workload. Pebble is a daemon that allows the management of non-system processes independently from the system services.
In this model the operations code (the charm) scales together with the workload, reducing the risk for bottlenecks at scale.

Juju on VMs and system containers
In the case of machines the charm runs in a container, alongside the juju agent.
The workload is deployed alongside the charm code and juju agent and it is directly controlled by the unit workers.

Read about these next:
Charm architecture encapsulates app management, with charms automating lifecycle actions via a controller, responsive to both admin commands and system events.
Juju integrations are virtual connections between applications to allow the exchange of information.