Juju is an enterprise Operator Lifecycle Manager (OLM) that provides model-driven application management and next-generation infrastructure-as-code.
The Kubernetes operator pattern replaces configuration file management with software-defined operations and shared, reusable ops code packages. Juju expands this idea to include traditional apps on Windows and Linux.
As a universal operator lifecycle manager for containers, virtual machines and bare metal that manages provisioning and underlying infrastructure, Juju provides a clean approach to multi-cloud operations. Applications can be managed on multiple clouds, and on premise, in machines or on Kubernetes, and then integrated automatically.
Operators are packaged in charms and distributed through Charmhub.io which hosts the Open Operator Collection. A charm is a compressed archive of the operator code and metadata, which can also be shared directly along with applications.
Reusable ops code
We share the code to our open source applications. Why don’t we share the operations code, too?
With traditional configuration management, the architecture of a deployment was hard-coded into the infrastructure-as-code for that operation.
With Juju, the architecture is expressed in a model, which captures the applications, the integration, the machines. Operators discover the model dynamically, which means they can be reused in different models, for different deployments, for different organisations.
Reuse improves quality for any software, and especially operations software, which benefits from application ops experience and hard-to-achieve domain knowledge. Over time, an open source operator reflects deep and wide experience of running that application in a very broad range of contexts.
Model-driven operations reduce duplication and errors in complex system administration, allowing administrators to express their intent and having machinery translate that intent to configuration or actions across all the affected applications.
With Juju, operators are deployed together in models, which provide an administrative boundary for permissions and capacity allocation. All the operators in a single model share the same group of administrators, and run on the same cloud or the same Kubernetes cluster.
The Juju model includes an application graph, which declares the lines of integration between applications. Operators drive that integration automatically based on the graph. Administrators can add or remove integration lines dynamically.
Integration can take place within a model, or between applications in different models with the permission of both groups of model administrators. Cross-model integration allows multi-cloud integration, or integration between different substrates such as bare metal Windows and virtualised Kubernetes.
Each operator declares integration endpoints. Integration can be declared between matching endpoints, and code in each operator then handles their end of the integration.
Juju transforms your ability to integrate fast-moving open source components into large, complex deployments. The move to microservices and the explosion in open source have conspired to make modern operations incredibly complex and dependent on very rare skills. Model-driven operators solve two key problems - application operations domain knowledge is encapsulated in reusable packages, and dynamic model discovery allows reuse of those packages in widely different settings.
Reusable operations packages mean that you can deploy on multiple clouds without changing operations code. Cross-model integration enables direct integration of workloads on different clouds.
Microservices have made applications simpler, but operations more complex. Working at a higher level of abstraction makes it simpler to understand and share complex deployments. Delegating the details to shared open source ops code makes sense.
Simplify day two and beyond
Model-driven operators go beyond the application lifecycle, to handle integration, upgrades, storage, networking, configuration and everyday actions like backup and restore.
Charmed operators are aware of their setting and can optimise the application configuration accordingly.
|1||kubernetes||Get started on Kubernetes|
|1||getting-started-with-juju||Get started on machines|
|1||concepts-and-terms||Overview of Juju’s concepts and terms|
|2||fan-container-networking||Fan container networking|
|1||clouds||Add a cloud|
|1||creating-a-controller||Create a controller|
|1||deploying-advanced-applications||Tailoring the deployment|
|1||cross-model-relations||Creating cross-model relations|
|1||machine-auth||Accessing individual machines with SSH|
|1||gui||Accessing Juju’s web interface|
|1||storage||Defining and using persistent storage|
|0||System Administration Tasks|
|1||upgrading||Upgrading to a new release|
|1||controller-backups||Backing up the controller|
|1||controller-high-availability||Running a high-availability controller|
|1||working-with-multiple-users||Working with multiple users|
|1||cloud-image-metadata||Generate your own cloud image metadata|
|1||juju-resources||Working with resources|
|1||charm-writing/kubernetes||Kubernetes charm writing guide|
|1||charm-writing||Charm writing guide|
|1||tools||Software tools for charm writers|
|1||For Juju administrators|
|2||charm-unit-status-and-their-meanings||Status values and their meanings|
|1||For charm writers and developers|
|2||charm-writing/hook-tools||Juju hook tools|
|2||Internal API docs|
|1||help||Advanced status output|
|1||logs||Finding Juju logs|
|1||Ask on our forum|
|1||File a bug|
|1||Report a docs issue|
|1||Further contact details|