Juju - documentation

Juju is an open-source operator framework for application and infrastructure management.

Operators encapsulate code, intent, and automation of know-how. Operators are modelled on a human operator with deep knowledge of a complex system, and understanding of how it should operate.

Juju encapsulates operator functionality as Charms. Charms (also known as Charmed Operators) are small, shareable, reusable packages.

Juju enables model-driven operations. Rather than describing configuration in complicated recipes, model-driven operations allow you to describe what your software should actually do, expressed in a clean and portable account of intent.


Juju’s components

Juju provides an end-to-end, ready-to-use implementation of the operator pattern. Its components are:


Why Juju?

Juju helps you transition from mere configuration management to application lifecycle management, by transforming your ability to integrate fast-moving open source components into large, complex deployments.

Juju offers:

  • deployment, configuration, scaling, integration, maintenance
  • reusable automated management and application domain knowledge
  • configuration discoverability
  • management of Kubernetes-native, container-native and VM-native applications

Juju provides the tools to turn your model description into a reality, repeatedly, across different clouds and in widely different settings.


Contribution and participation

Juju is an open-source project. We welcome all new community members and users.

For support, discussion and development, please join our forum or take part in the conversation in our chat.

See Juju release notes and news.

Content Guide

Deploy your application
Deploy
Integrate
Hybrid-cloud
Charm your application
Basic concepts
Hello, world
Publishing
Other Juju sites
Charmhub
JAAS

Navigation

Navigation
Level Path Navlink

Redirects

Mapping table
Path Location
/docs/authors-charm-writing /docs/charm-writing
/stable/models-config /docs/configuring-models
/stable/controllers-config /docs/configuring-controllers
/getting-started /docs/getting-started-with-juju
/docs/getting-started /docs/getting-started-with-juju
/docs/getting-started-with-jaas /docs/getting-started-with-juju-on-jaas
/docs/clouds-lxd-resources /docs/lxd-resources
/docs/applications/groups /docs/application-groups
/docs/applications/ha /docs/ha-applications
/docs/applications/metrics /docs/application-metrics
/docs/tutorials/client-basic /docs/client-usage-tutorial
/docs/applications/configuring /docs/configuring-applications
/docs/applications/deploying-advanced /docs/deploying-advanced-applications
/docs/applications/deploying /docs/deploying-applications
/docs/reference/constraints /docs/constraints-reference
/docs/tutorials/multi-user-basic /docs/multi-user-basic-tutorial
/docs/tutorials/multi-user-external /docs/multi-user-external-tutorial
/docs/applications/scaling /docs/scaling-applications
/docs/tutorials/k8s-static-pv /docs/k8s-static-pv-tutorial
/docs/tutorials/k8s-charms /docs/k8s-charms-tutorial
/docs/applications/upgrading /docs/upgrading-applications
/docs/aws /docs/aws-cloud
/docs/gce /docs/gce-cloud
/docs/gcp /docs/gce-cloud
/docs/azure /docs/azure-cloud
/docs/microk8s /docs/kubernetes/microk8s
/docs/microk8s-cloud /docs/kubernetes/microk8s
/docs/k8s-cloud /docs/kubernetes
/docs/aks /docs/kubernetes/azure-aks
/docs/kubernetes/azure-ak /docs/kubernetes/azure-aks
/docs/eks /docs/kubernetes/amazon-eks
/docs/gke /docs/kubernetes/google-gke
/docs/azure-aks /docs/kubernetes/azure-aks
/docs/amazon-eks /docs/kubernetes/amazon-eks
/docs/google-gke /docs/kubernetes/google-gke
/docs/oracle /docs/oracle-cloud
/docs/openstack /docs/openstack-cloud
/docs/rackspace /docs/rackspace-cloud
/docs/clouds-aws /docs/aws-cloud
/docs/clouds-gce /docs/gce-cloud
/docs/clouds-joyent /docs/joyent-cloud
/docs/tutorials/k8s-microk8s /docs/microk8s-cloud
/docs/clouds-k8s /docs/k8s-cloud
/docs/clouds-lxd-advanced /docs/lxd-cloud-advanced
/docs/clouds-lxd /docs/lxd-cloud
/docs/clouds-maas /docs/maas-cloud
/docs/clouds-azure-advanced /docs/advanced-azure-cloud
/docs/clouds-azure /docs/azure-cloud
/docs/clouds-openstack /docs/openstack-cloud
/docs/clouds-oci /docs/oci-cloud
/docs/clouds-rackspace /docs/rackspace-cloud
/docs/tutorials/k8s-aws-integrator /docs/k8s-aws-integrator-tutorial
/docs/clouds-manual /docs/manual-cloud
/docs/clouds-vsphere /docs/vsphere-cloud
/docs/tutorials/k8s-cdk-autostorage /docs/k8s-cdk-autostorage-tutorial
/docs/tutorials/k8s-multicloud-gke-autostorage /docs/k8s-multicloud-gke-autostorage-tutorial
/docs/charm-building /docs/charm-writing
/docs/authors-charm-building /docs/charm-writing
/docs/install /docs/installing
/docs/install-juju /docs/installing
/docs/installing-juju /docs/installing
/docs/amulet /docs/tools#heading–amulet
/docs/configuring-applications https://discourse.jujucharms.com/t/configuring-applications/1059
/docs/multi-user-cloud https://discourse.jujucharms.com/t/a-multi-user-cloud/1190
/docs/charm-writing/actions https://discourse.jujucharms.com/t/actions-for-the-charm-author/1113
/docs/adding-a-model https://discourse.jujucharms.com/t/adding-a-model/1147
/docs/lxd-resources https://discourse.jujucharms.com/t/additional-lxd-resources/1092
/docs/appendix-gke https://discourse.jujucharms.com/t/appendix-installing-a-gke-cluster/1448
/docs/charm-writing/application-config https://discourse.jujucharms.com/t/application-configuration/1052
/docs/application-groups https://discourse.jujucharms.com/t/application-groups/1076
/docs/metrics-applications https://discourse.jujucharms.com/t/application-metrics/1067
/docs/client-usage-tutorial https://discourse.jujucharms.com/t/basic-client-usage-tutorial/1191
/docs/charm-writing/benchmarks https://discourse.jujucharms.com/t/benchmarking-juju-applications/1036
/docs/charm-writing/best-practice https://discourse.jujucharms.com/t/best-practice-for-charm-authors/1037
/docs/charm-hooks https://discourse.jujucharms.com/t/charm-hooks/1040
/docs/charm-layer-yaml-reference https://discourse.jujucharms.com/t/charm-layer-yaml-reference/1165
/docs/charm-network-primitives https://discourse.jujucharms.com/t/charm-network-primitives/1126
/docs/charm-writing/promulgation https://discourse.jujucharms.com/t/charm-promulgation/1054
/docs/charm-review-process https://discourse.jujucharms.com/t/charm-review-process/1055
/docs/charm-store-policy https://discourse.jujucharms.com/t/charm-store-policy/1044
/docs/charm-tools https://discourse.jujucharms.com/t/charm-tools/1180
/docs/charms-and-mysql-interfaces https://discourse.jujucharms.com/t/charms-and-mysql-interfaces/1139
/docs/client https://discourse.jujucharms.com/t/client/1083
/docs/cmr-scenario-1 https://discourse.jujucharms.com/t/cmr-scenario-1/1148
/docs/cmr-scenario-2 https://discourse.jujucharms.com/t/cmr-scenario-2/1149
/docs/command-changes-from-1-25-to-2-0 https://discourse.jujucharms.com/t/command-changes-from-1-25-to-2-0/1101
/docs/components-of-a-charm https://discourse.jujucharms.com/t/components-of-a-charm/1038
/docs/configuring-applications https://discourse.jujucharms.com/t/configuring-applications/1059
/docs/configuring-controllers https://discourse.jujucharms.com/t/configuring-controllers/1107
/docs/configuring-offline-usage https://discourse.jujucharms.com/t/configuring-juju-for-offline-usage/1068
/docs/configuring-models https://discourse.jujucharms.com/t/configuring-models/1151
/docs/controller-logins https://discourse.jujucharms.com/t/controller-logins/1389
/docs/create-a-google-compute-engine-controller https://discourse.jujucharms.com/t/create-a-google-compute-engine-controller/1189
/docs/appendix-creating-an-aws-vpc https://discourse.jujucharms.com/t/appendix-creating-an-aws-vpc/1064
/docs/creating-config-yaml-and-configuring-charms https://discourse.jujucharms.com/t/creating-config-yaml-and-configuring-charms/1039
/docs/creating-icons-for-charms https://discourse.jujucharms.com/t/creating-icons-for-charms/1041
/docs/creating-ssh-keypairs-on-windows https://discourse.jujucharms.com/t/creating-ssh-keypairs-on-windows/1133
/docs/charm-writing/hook-errors https://discourse.jujucharms.com/t/dealing-with-errors-encountered-by-charm-hooks/1048
/docs/debugging-building-layers https://discourse.jujucharms.com/t/debugging-building-layers/1115
/docs/charm-writing/hook-debug https://discourse.jujucharms.com/t/debugging-charm-hooks/1116
/docs/deploying-charms-offline https://discourse.jujucharms.com/t/deploying-charms-offline/1069
/docs/charm-writing/hook-debug-dhx https://discourse.jujucharms.com/t/dhx-a-customized-hook-debugging-environment-plugin/1114
/docs/disabling-commands https://discourse.jujucharms.com/t/disabling-commands/1141
/docs/event-cycle https://discourse.jujucharms.com/t/event-cycle/1117
/docs/getting-started-with-charm-development https://discourse.jujucharms.com/t/getting-started-with-charm-development/1118
/docs/getting-started-with-juju-on-jaas https://discourse.jujucharms.com/t/getting-started-with-juju-on-jaas/1134
/docs/charm-writing/howto-author https://discourse.jujucharms.com/t/how-to-become-a-juju-charm-author/1049
/docs/implementing-leadership https://discourse.jujucharms.com/t/implementing-leadership/1124
/docs/charm-writing/relations https://discourse.jujucharms.com/t/implementing-relations/1051
/docs/appendix-installing-ceph https://discourse.jujucharms.com/t/appendix-installing-ceph/1077
/docs/installing-snaps-offline https://discourse.jujucharms.com/t/installing-snaps-offline/1179
/docs/instance-naming-and-tagging-in-clouds https://discourse.jujucharms.com/t/instance-naming-and-tagging-in-clouds/1102
/docs/interface-layers https://discourse.jujucharms.com/t/interface-layers/1121
/docs/introducing-juju-2-0 https://discourse.jujucharms.com/t/introducing-juju-2-0/1140
/docs/introduction-to-juju-charms https://discourse.jujucharms.com/t/introduction-to-juju-charms/1188
/docs/juju-plugins https://discourse.jujucharms.com/t/juju-plugins/1145
/docs/centos https://discourse.jujucharms.com/t/juju-support-for-centos7/1142
/docs/language-details-contributing-to-juju-docs https://discourse.jujucharms.com/t/language-details-contributing-to-juju-docs/1104
/docs/layers-for-charm-authoring https://discourse.jujucharms.com/t/layers-for-charm-authoring/1122
/docs/leadership-howtos https://discourse.jujucharms.com/t/leadership-howtos/1123
/docs/managed-solutions https://discourse.jujucharms.com/t/managed-solutions/1132
/docs/metric-collecting-charms https://discourse.jujucharms.com/t/metric-collecting-charms/1125
/docs/multi-user-basic-tutorial https://discourse.jujucharms.com/t/multi-user-basic-setup-tutorial/1195
/docs/multi-user-external-tutorial https://discourse.jujucharms.com/t/multi-user-external-setup-tutorial/1196
/docs/notes-on-upgrading-juju-software https://discourse.jujucharms.com/t/notes-on-upgrading-juju-software/1153
/docs/offline-mode-strategies https://discourse.jujucharms.com/t/offline-mode-strategies/1071
/docs/persistent-storage-and-kubernetes https://discourse.jujucharms.com/t/persistent-storage-and-kubernetes/1078
/docs/reference https://discourse.jujucharms.com/t/reference-documents/1161
/docs/release-notes https://discourse.jujucharms.com/t/release-notes/1166
/docs/running-multiple-versions-of-juju https://discourse.jujucharms.com/t/running-multiple-versions-of-juju/1143
/docs/sample-command-usage-and-output-interpretation https://discourse.jujucharms.com/t/sample-command-usage-and-output-interpretation/1200
/docs/scaling-applications https://discourse.jujucharms.com/t/scaling-applications/1075
/docs/k8s-static-pv-tutorial https://discourse.jujucharms.com/t/setting-up-static-kubernetes-storage-tutorial/1193
/docs/charm-writing/subordinates https://discourse.jujucharms.com/t/subordinate-applications/1053
/docs/charm-writing/hook-env https://discourse.jujucharms.com/t/the-hook-environment-hook-tools-and-how-hooks-are-run/1047
/docs/charm-writing/store https://discourse.jujucharms.com/t/the-juju-charm-store/1045
/docs/charm-writing/relations-lifecycle https://discourse.jujucharms.com/t/the-lifecycle-of-charm-relations/1050
/docs/help-additions https://discourse.jujucharms.com/t/troubleshooting-additions/1182
/docs/help-clouds https://discourse.jujucharms.com/t/troubleshooting-clouds/1183
/docs/help-model-upgrades https://discourse.jujucharms.com/t/troubleshooting-model-upgrades/1186
/docs/help-removals https://discourse.jujucharms.com/t/troubleshooting-removals/1185
/docs/k8s-cdk-autostorage-tutorial https://discourse.jujucharms.com/t/tutorial-installing-kubernetes-with-cdk-and-using-auto-configured-storage/1469
/docs/k8s-multicloud-gke-autostorage-tutorial https://discourse.jujucharms.com/t/tutorial-multi-cloud-controller-with-gke-and-auto-configured-storage/1465
/docs/k8s-charms-tutorial https://discourse.jujucharms.com/t/understanding-kubernetes-charms-tutorial/1263
/docs/unmaintained-charms https://discourse.jujucharms.com/t/unmaintained-charms/1056
/docs/charm-writing/upgrading https://discourse.jujucharms.com/t/upgrading-a-charm/1131
/docs/upgrading-series https://discourse.jujucharms.com/t/upgrading-a-machine-series/1198
/docs/upgrading-applications https://discourse.jujucharms.com/t/upgrading-applications/1080
/docs/upgrading-models https://discourse.jujucharms.com/t/upgrading-models/1154
/docs/user-types-and-abilities https://discourse.jujucharms.com/t/user-types-and-abilities/1201
/docs/using-bundles-with-the-gui https://discourse.jujucharms.com/t/using-bundles-with-the-gui/1057
/docs/using-docker-in-charms https://discourse.jujucharms.com/t/using-docker-in-charms/1135
/docs/joyent-cloud https://discourse.jujucharms.com/t/using-joyent-with-juju/1089
/docs/lxd-cloud-advanced https://discourse.jujucharms.com/t/using-lxd-with-juju-advanced/1091
/docs/advanced-azure-cloud https://discourse.jujucharms.com/t/using-microsoft-azure-with-juju-advanced/1085
/docs/openstack-cloud https://discourse.jujucharms.com/t/using-openstack-with-juju/1097
/docs/using-resources-developer-guide https://discourse.jujucharms.com/t/using-resources-developer-guide/1127
/docs/k8s-aws-integrator-tutorial https://discourse.jujucharms.com/t/using-the-aws-integrator-charm-tutorial/1192
/docs/using-the-localhost-cloud-offline https://discourse.jujucharms.com/t/using-the-localhost-cloud-offline/1070
/docs/what-is-juju https://discourse.jujucharms.com/t/what-is-juju/1032
/docs/whats-new-2-6 https://discourse.jujucharms.com/t/whats-new-in-2-6/1202
/docs/writing-a-layer-by-example https://discourse.jujucharms.com/t/writing-a-layer-by-example/1120
/docs/writing-charm-tests https://discourse.jujucharms.com/t/writing-charm-tests/1130
/docs/writing-charms-that-use-storage https://discourse.jujucharms.com/t/writing-charms-that-use-storage/1128
/docs/writing-charms-that-use-terms https://discourse.jujucharms.com/t/writing-charms-that-use-terms/1129
/docs/writing-your-first-juju-charm https://discourse.jujucharms.com/t/writing-your-first-juju-charm/1046
/docs/tutorial-managing-credentials https://discourse.jujucharms.com/t/tutorial-managing-credentials/1289
/docs/command-consume https://discourse.charmhub.io/t/command-consume/1698
/docs/command-find-offers https://discourse.charmhub.io/t/command-find-offers/1722
/docs/command-list-firewall-rules https://discourse.charmhub.io/t/command-list-firewall-rules/1745
/docs/command-offer https://discourse.charmhub.io/t/command-offer/1772
/docs/command-offers https://discourse.charmhub.io/t/command-offers/1773
/docs/command-remove-offer https://discourse.charmhub.io/t/command-remove-offer/1788
/docs/command-remove-saas https://discourse.charmhub.io/t/command-remove-saas/1790
/docs/command-resume-relation https://discourse.charmhub.io/t/command-resume-relation/1799
/docs/command-set-firewall-rule https://discourse.charmhub.io/t/command-set-firewall-rule/1811
/docs/command-show-offer https://discourse.charmhub.io/t/command-show-offer/1826
/docs/command-suspend-relation https://discourse.charmhub.io/t/command-suspend-relation/1840
/docs/kubernetes /docs/olm/get-started-on-kubernetes
/docs/getting-started-with-juju https://juju.is/docs/olm
/docs/installing https://juju.is/docs/olm/installing-juju
/docs/tutorials https://juju.is/tutorials
/docs/concepts-and-terms https://juju.is/docs/olm/quick-reference
/docs/applications-and-charms https://juju.is/docs/olm/applications-and-charmed-operators
/docs/models https://juju.is/docs/olm/models
/docs/relations https://juju.is/docs/olm/relations
/docs/clouds https://juju.is/docs/olm/clouds
/docs/credentials https://juju.is/docs/olm/credentials
/docs/controllers https://juju.is/docs/olm/controllers
/docs/constraints https://juju.is/docs/olm/constraints
/docs/fan-container-networking https://juju.is/docs/olm/fan-container-networking
/docs/ha-applications https://juju.is/docs/olm/high-availability
/docs/spaces https://juju.is/docs/olm/network-spaces
/docs/clouds https://juju.is/docs/olm/clouds
/docs/credentials https://juju.is/docs/olm/credentials
/docs/creating-a-controller https://juju.is/docs/olm/create-controllers
/docs/deploying-applications https://juju.is/docs/olm/deploying-applications
/docs/constraints https://juju.is/docs/olm/constraints
/docs/deploying-advanced-applications https://juju.is/docs/olm/advanced-application-deployment
/docs/relations https://juju.is/docs/olm/relations
/docs/cross-model-relations https://juju.is/docs/olm/cross-model-relations
/docs/lxd-cloud https://juju.is/docs/olm/lxd
/docs/microk8s-cloud https://juju.is/docs/olm/microk8s
/docs/kubernetes/azure-aks https://juju.is/docs/olm/azure-kubernetes-service-(azure-aks)
/docs/kubernetes/amazon-eks https://juju.is/docs/olm/amazon-elastic-kubernetes-service-(amazon-eks)
/docs/kubernetes/google-gke https://juju.is/docs/olm/google-kubernetes-engine-(gke)
/docs/kubernetes https://juju.is/docs/olm/other-clusters
/docs/troubleshooting-additions /docs/olm/troubleshoot
/docs/vsphere-cloud https://juju.is/docs/olm/vmware-vsphere
/docs/vmware-vsphere https://juju.is/docs/olm/vmware-vsphere
/docs/openstack-cloud https://juju.is/docs/olm/openstack
/docs/maas-cloud https://juju.is/docs/olm/maas
/docs/manual-cloud https://juju.is/docs/olm/manual-setup
/docs/aws-cloud https://juju.is/docs/olm/amazon-aws
/docs/azure-cloud https://juju.is/docs/olm/azure
/docs/gce-cloud https://juju.is/docs/olm/google-gce
/docs/oci-cloud https://juju.is/docs/olm/oracle
/docs/rackspace-cloud https://juju.is/docs/olm/rackspace
/docs/machine-auth https://juju.is/docs/olm/accessing-individual-machines-with-ssh
/docs/working-with-actions https://juju.is/docs/olm/working-with-actions
/docs/collecting-juju-metrics https://juju.is/docs/olm/collecting-juju-metrics
/docs/gui https://juju.is/docs/olm/accessing-juju’s-web-interface
/docs/storage https://juju.is/docs/olm/defining-and-using-persistent-storage
/docs/removing-things https://juju.is/docs/olm/removing-things
/docs/upgrading https://juju.is/docs/olm/upgrading
/docs/controller-backups https://juju.is/docs/olm/controller-backups
/docs/controller-high-availability https://juju.is/docs/olm/high-availability-juju-controller
/docs/working-with-multiple-users https://juju.is/docs/olm/working-with-multiple-users
/docs/working-offline https://juju.is/docs/olm/working-offline
/docs/migrating-models https://juju.is/docs/olm/migrating-models
/docs/cloud-image-metadata https://juju.is/docs/olm/cloud-image-metadata
/docs/charm-bundles https://juju.is/docs/sdk/bundles
/docs/juju-resources https://juju.is/docs/sdk/resources
/docs/charm-writing/kubernetes https://juju.is/docs/sdk/hello-world
/docs/charm-writing https://juju.is/docs/sdk/hello-world
/docs/tools https://juju.is/docs/sdk
/docs/glossary https://juju.is/docs/olm/glossary
/docs/charm-unit-status-and-their-meanings https://juju.is/docs/olm/status-values
/docs/constraints-reference https://juju.is/docs/olm/constraints
/docs/commands https://juju.is/docs/olm/commands
/docs/juju-environment-variables https://juju.is/docs/olm/environment-variables
/docs/charm-writing/hook-tools https://juju.is/docs/sdk
/docs/charm-metadata https://juju.is/docs/sdk/charm-anatomy
/docs/bundle-reference https://juju.is/docs/sdk/bundles
/docs/logs https://juju.is/docs/olm/juju-logs
/docs/contact-us http://discourse.charmhub.io/
/docs/help http://discourse.charmhub.io/
/docs/webcli https://juju.is/docs/olm/using-the-juju-web-cli
/docs/roadmap https://juju.is/docs/olm/roadmap