CINXE.COM

<!DOCTYPE html> <html lang="en" dir="ltr" itemscope itemtype="http://schema.org/Product" prefix="og: http://ogp.me/ns#"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title itemprop="name">MAAS | How it works</title> <!-- Google Analytics and Google Optimize --> <script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-1018242-58', 'auto', {'allowLinker': true, 'siteSpeedSampleRate': 100}); ga('require', 'GTM-N953L4W'); ga('require', 'linker'); ga('linker:autoLink', ['conjure-up.io', 'login.ubuntu.com', 'www.ubuntu.com', 'ubuntu.com', 'insights.ubuntu.com', 'developer.ubuntu.com', 'cn.ubuntu.com', 'design.ubuntu.com', 'maas.io', 'canonical.com', 'landscape.canonical.com', 'pages.ubuntu.com', 'tutorials.ubuntu.com', 'docs.ubuntu.com']); </script> <!-- End Google Analytics and Google Optimize --> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-P4TGJR9');</script> <!-- End Google Tag Manager --> <!-- javascript --> <script src="/static/js/ga.js" defer></script> <script src="/static/js/navigation.js" defer></script> <script src="https://assets.ubuntu.com/v1/703e23c9-lazysizes+noscript+native-loading.5.1.2.min.js" defer></script> <script type="module" src="https://md-block.verou.me/md-block.js"></script> <!-- stylesheets --> <link rel="stylesheet" type="text/css" media="screen" href="/static/css/main.css?v=7363de0" /> <link rel="icon" type="image/png" href="https://assets.ubuntu.com/v1/c555447f-maas-2022-favicon-16.png" sizes="16x16" /> <link rel="icon" type="image/png" href="https://assets.ubuntu.com/v1/6cce4f7c-maas-2022-favicon-32.png" sizes="32x32" /> <link rel="icon" type="image/png" href="https://assets.ubuntu.com/v1/bdcff402-maas-2022-favicon-64.png" sizes="64x64" /> <link rel="icon" type="image/png" href="https://assets.ubuntu.com/v1/7baeacdb-maas-2022-favicon-128.png" sizes="128x128" /> <meta name="google-site-verification" content="oJqEviYsw1FaDzCq7kzhewyJ2enm5vk9Q-prliavhjw" /> <meta name="description" content="MAAS (Metal as a Service) offers cloud style provisioning for physical servers. It is open source and free to use, with commercial support available from Canonical." /> <meta name="twitter:card" content="summary"> <meta name="twitter:site" content="@ubuntucloud"> <meta name="twitter:creator" content="@ubuntucloud"> <meta name="twitter:domain" content="maas.io"> <meta name="twitter:title" content="Metal as a Service | MAAS"> <meta name="twitter:description" content="MAAS (Metal as a Service) offers cloud style provisioning for physical servers. It is open source and free to use, with commercial support available from Canonical."> <meta name="twitter:image" content="https://assets.ubuntu.com/v1/85274a82-maas-social-banner.png"> <meta property="og:type" content="website"> <meta property="og:url" content="https://maas.io/"> <meta property="og:site_name" content="MAAS"> <meta property="og:title" content="Metal as a Service | MAAS"> <meta property="og:description" content="MAAS (Metal as a Service) offers cloud style provisioning for physical servers. It is open source and free to use, with commercial support available from Canonical."> <meta property="og:image" content="https://assets.ubuntu.com/v1/85274a82-maas-social-banner.png"> <meta name="copydoc" content="https://docs.google.com/document/d/16tkFyk2W-AkoJYeE9qoFjwzHBlH4diazN9tlqRsV3XA/edit"> </head> <body class="how-it-works-page"> <header id="navigation" class="p-navigation"> <div class="row"> <div class="col-3"> <div class="p-navigation__banner"> <div class="p-navigation__tagged-logo"> <a class="p-navigation__link" href="/"> <div class="p-navigation__logo-tag"> <img class="p-navigation__logo-icon" src="https://assets.ubuntu.com/v1/0a863174-MAAS+logomark+only.svg" alt=""> </div> <span class="p-navigation__logo-title">Canonical MAAS</span> </a> </div> <a href="#navigation" class="p-navigation__toggle--open" title="menu">Menu</a> <a href="#navigation-closed" class="p-navigation__toggle--close" title="close menu">Close menu</a> </div> </div> <div class="col-9"> <nav class="p-navigation__nav" aria-label="main"> <ul id="main-navigation" class="global-nav p-navigation__items u-clearfix"> <li class="p-navigation__item is-selected" aria-current="page"> <a class="p-navigation__link" href="/how-it-works" onclick="dataLayer.push({'event' : 'GAEvent' , 'eventCategory' : 'Main navigation' , 'eventAction' : 'Click' , 'eventLabel' : 'How it works' });">How it works</a> </li> <li class="p-navigation__item"> <a class="p-navigation__link" href="/install" onclick="dataLayer.push({'event' : 'GAEvent' , 'eventCategory' : 'Main navigation' , 'eventAction' : 'Click' , 'eventLabel' : 'Install' });">Install</a> </li> <li class="p-navigation__item"> <a class="p-navigation__link" href="/docs" onclick="dataLayer.push({'event' : 'GAEvent', 'eventCategory' : 'Main navigation' , 'eventAction' : 'Click' , 'eventLabel' : 'Docs' });">Docs</a> </li> <li class="p-navigation__item--dropdown-toggle" id="learn"> <a href="#learn-menu" aria-controls="learn-menu" class="p-navigation__link">Learn</a> <ul class="p-navigation__dropdown" id="learn-menu" aria-hidden="true"> <li> <a class="p-navigation__dropdown-item" href="/tour" onclick="dataLayer.push({'event' : 'GAEvent' , 'eventCategory' : 'Main navigation' , 'eventAction' : 'Click' , 'eventLabel' : 'Tour' });">Features</a> </li> <li> <a class="p-navigation__dropdown-item" href="/tutorials" onclick="dataLayer.push({'event' : 'GAEvent', 'eventCategory' : 'Main navigation' , 'eventAction' : 'Click' , 'eventLabel' : 'Tutorials' });">Tutorials</a> </li> <li> <a class="p-navigation__dropdown-item" href="/resources" onclick="dataLayer.push({'event' : 'GAEvent', 'eventCategory' : 'Main navigation' , 'eventAction' : 'Click' , 'eventLabel' : 'Resources' });">Understand MAAS</a> </li> <li> <a class="p-navigation__dropdown-item" href="/blog" onclick="dataLayer.push({'event' : 'GAEvent', 'eventCategory' : 'Main navigation' , 'eventAction' : 'Click' , 'eventLabel' : 'Blog' });">Blog</a> </li> </ul> </li> <li class="p-navigation__item"> <a class="p-navigation__link" href="https://discourse.maas.io" onclick="dataLayer.push({'event' : 'GAEvent', 'eventCategory' : 'Main navigation' , 'eventAction' : 'Click' , 'eventLabel' : 'Discourse' });">Forum</a> </li> </ul> </nav> </div> </div> </header> <main class="u-no-margin--top " id="main-content"> <section class="p-strip--image is-dark p-takeover--no-overlays"> <div class="row u-equal-height u-vertically-center"> <div class="col-6"> <h1>How it works</h1> <p>MAAS has a tiered architecture with a central postgres database backing a &lsquo;Region Controller (regiond)&rsquo; that deals with operator requests. Distributed Rack Controllers (rackd) provide high-bandwidth services to multiple racks. The controller itself is stateless and horizontally scalable, presenting only a REST API.</p> <p>Rack Controller (rackd) provides <abbr title="Dynamic Host Configuration Protocol">DHCP</abbr>, <abbr title="Intelligent Platform Management Interface">IPMI</abbr>, <abbr title="Preboot Execution Environment">PXE</abbr>, <abbr title="Trivial File Transfer Protocol">TFTP</abbr> and other local services. They cache large items like operating system install images at the rack level for performance but maintain no exclusive state other than credentials to talk to the controller.</p> </div> <div class="col-6 u-align--center"> <img src="https://assets.ubuntu.com/v1/b03d95a1-maas.io-how-it-works.svg" alt="MAAS structure diagram" /> </div> </div> </section> <section class="p-strip is-deep u-no-padding--bottom" id="high-availability"> <div class="row"> <div class="col-8"> <h2>High availability in MAAS</h2> <p>MAAS is a mission critical service, providing infrastructure coordination upon which HPC and cloud infrastructures depend. High availability in the region controller is achieved at the database level. The region controller will automatically switch gateways to ensure high availability of services to network segments in the event of a rackd failure.</p> </div> </div> </section> <section class="p-strip is-shallow u-hidden--small"> <div class="row"> <div class="col-12"> <div class="lazyload" data-noscript> <noscript> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_964,h_342/https://assets.ubuntu.com/v1/d788fae0-maas.io-high-availability.svg" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_1928,h_684/https://assets.ubuntu.com/v1/d788fae0-maas.io-high-availability.svg 2x" alt="High availability network diagram" width="964" height="342" loading="lazy" class="u-no-margin--bottom" /> </noscript> </div> </div> </div> </section> <section class="p-strip is-deep u-no-padding--top"> <div class="row"> <div class="col-8"> <p>Rackds are not in the primary data path, they are not routers or otherwise involved in the flow of data traffic, this diagram shows only the role that MAAS Rackds play in providing local services to racks, and the way in which they can cover for one another in the event of a failure.</p> <p>MAAS can scale from a small set of servers to many racks of hardware in a datacentre. High-bandwidth activities (such as the initial operating system installation) are handled by the distributed gateways enabling massively parallel deployments.</p> </div> </div> </section> <section class="p-strip--accent is-deep" id="protocols"> <div class="row u-equal-height"> <div class="col-8"> <h2>Protocols</h2> <p>MAAS uses standard server <abbr title="Baseboard Management Controller">BMC</abbr> and <abbr title="Network Interface Controller">NIC</abbr> services such as <abbr>IPMI</abbr> and PXE to control the machines in your data centre. For converged infrastructure, MAAS talks to the chassis controller of the rack or hyperscale chassis such as Intel RSD, Cisco UCS or HP Moonshot. Custom plugins extend MAAS for alternative BMC protocols.</p> <p>Initial machine inventory and commissioning is done from an ephemeral Ubuntu image that works across all major servers from all major vendors. It is possible to add custom scripts for firmware updates and reporting.</p> </div> <div class="prefix-1 col-4 u-vertically-center"> <div class="lazyload" data-noscript> <noscript> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_238,h_238/https://assets.ubuntu.com/v1/1e561874-maas.io-protocols.svg" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_476,h_476/https://assets.ubuntu.com/v1/1e561874-maas.io-protocols.svg 2x" alt="" width="238" height="238" loading="lazy" class="u-hidden--small" /> </noscript> </div> </div> </div> </section> <section class="p-strip is-deep u-no-padding--bottom" id="physical-availability-zones"> <div class="row"> <div class="col-8"> <h2>Physical availability zones</h2> <p>In keeping with the notion of a &lsquo;physical cloud&rsquo; MAAS lets you designate machines as belonging to a particular availability zone. It is typical to group sets of machines by rack or room or building into an availability zone based on common points of failure. The natural boundaries of a zone depend largely on the scale of deployment and the design of physical interconnects in the data centre.</p> <p>Nevertheless the effect is to be able to a scale-out service across multiple failure domains very easily, just as you would expect on a public cloud. Higher-level infrastructure offerings like OpenStack or Mesos can present that information to their API clients as well, enabling very straightforward deployment of sophisticated solutions from metal to container.</p> </div> </div> </section> <section class="p-strip u-hidden--small"> <div class="row"> <div class="col-12"> <div class="lazyload" data-noscript> <noscript> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_573,h_258/https://assets.ubuntu.com/v1/d1dc00ae-maas.io-physical-availability-zones.svg" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_1146,h_516/https://assets.ubuntu.com/v1/d1dc00ae-maas.io-physical-availability-zones.svg 2x" alt="Availability zone diagram" width="573" height="258" loading="lazy" class="u-no-margin--bottom" /> </noscript> </div> </div> </div> </section> <section class="p-strip is-bordered is-deep u-no-padding--top"> <div class="row"> <div class="col-8"> <p>The MAAS API allows for discovery of the zones in the region. Chef, Puppet, Ansible and Juju can transparently spread services across the available zones.</p> <p>Users can also specifically request machines in particular AZs.</p> <p>There is no forced correlation between a machine location in a particular rack and the zone in which MAAS will present it, nor is there a forced correlation between network segment and rack. In larger deployments it is common for traffic to be routed between zones, in smaller deployments the switches are often trunked allowing subnets to span zones.</p> <p>By convention, users are entitled to assume that all zones in a region are connected with very high bandwidth that is not metered, enabling them to use all zones equally and spread deployments across as many zones as they choose for availability purposes.</p> </div> </div> </section> <section class="p-strip is-deep" id="node-lifecycle"> <div class="row"> <div class="col-8"> <h2>The node lifecycle</h2> <p>Each machine (&ldquo;node&rdquo;) managed by MAAS goes through a lifecycle &mdash; from its enlistment or onboarding to MAAS, through commissioning when we inventory and can setup firmware or other hardware-specific elements, then allocation to a user and deployment, and finally they are released back to the pool or retired altogether.</p> </div> </div> <br /> <div class="row u-equal-height"> <div class="col-5 u-hidden--medium u-hidden--small u-vertically-center"> <div class="lazyload" data-noscript> <noscript> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_353,h_662/https://assets.ubuntu.com/v1/b2cec06d-maas.io-node-lifecycle.svg" srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_706,h_1324/https://assets.ubuntu.com/v1/b2cec06d-maas.io-node-lifecycle.svg 2x" alt="Node lifecycle chart" width="353" height="662" loading="lazy" /> </noscript> </div> </div> <div class="col-7"> <h3 class="p-heading--4">New</h3> <p>New machines which PXE-boot on a MAAS network will be enlisted automatically if MAAS can detect their BMC parameters. The easiest way to enlist standard <abbr>IPMI</abbr> servers is simply to PXE-boot them on the MAAS network.</p> <h3 class="p-heading--4">Commissioning</h3> <p>Detailed inventory of RAM, CPU, disks, NICs and accelerators like GPUs itemised and usable as constraints for machine selection. It is possible to run your own scripts for site-specific tasks such as firmware updates.</p> <h3 class="p-heading--4">Ready</h3> <p>A machine that is successfully commissioned is considered &ldquo;Ready&rdquo;. It will have configured BMC credentials (on IPMI based BMCs) for ongoing power control, ensuring that MAAS can start or stop the machine and allocate or (re)deploy it with a fresh operating system.</p> <h3 class="p-heading--4">Allocated</h3> <p>Ready machines can be allocated to users, who can configure network interface bonding and addressing, and disks, such as LVM, RAID, bcache or partitioning.</p> <h3 class="p-heading--4">Deploying</h3> <p>Users then can ask MAAS to turn the machine on and install a complete server operating system from scratch without any manual intervention, configuring network interfaces, disk partitions and more.</p> <h3 class="p-heading--4">Releasing</h3> <p>When a user has finished with the machine, they can release it back to the shared pool of capacity. You can ask MAAS to ensure that there is a full disk-wipe of the machine when that happens.</p> </div> </div> </section> <section class="p-strip--accent is-shallow"> <div class="row u-equal-height"> <div class="col-10 u-sv3--small"> <h3 class="p-heading--4 u-no-margin--bottom">MAAS is a bare-metal server provisioning tool. It is open source and&nbsp;free.</h3> <br class="u-hide--medium u-hide--large" /> </div> <div class="col-2 u-vertically-center"> <a aria-label="Find out how to install MAAS" href="/install" class="p-button--positive u-no-margin--bottom">Install MAAS</a> </div> </div> </section> </main> <footer class="p-footer p-strip"> <div class="row"> <div class="col-4"> <h3 class="p-heading--4">MAAS</h3> <ul class="p-list"> <li class="p-list__item"> <a href="/">Home</a> </li> <li class="p-list__item"> <a href="/install">Install MAAS</a> </li> <li class="p-list__item"> <a href="/how-it-works">How it works</a> </li> <li class="p-list__item"> <a href="/tour">Tour</a> </li> <li class="p-list__item"> <a href="/docs">Docs</a> </li> <li class="p-list__item"> <a href="/tutorials">Tutorials</a> </li> <li class="p-list__item"> <a href="/contact-us">Contact us</a> </li> <li class="p-list__item"> <a href="/support">Support</a> </li> </ul> </div> <div class="col-4"> <h3 class="p-heading--4">Need help?</h3> <ul class="p-list"> <li class="p-list__item"> <a href="https://discourse.maas.io/">Discourse</a> </li> <li class="p-list__item"> <a class="js-invoke-modal" href="/contact-us">Commercial support</a> </li> </ul> </div> <div class="col-4"> <h3 class="p-heading--4">Contribute</h3> <ul class="p-list"> <li class="p-list__item"> <a href="https://launchpad.net/maas" >Launchpad</a > </li> <li class="p-list__item"> <a href="https://discourse.maas.io/c/docs" >Contribute to documentation</a > </li> </ul> </div> </div> <nav class="row"> <div class="has-cookie"> <p> &copy; 2025 Canonical Ltd. <a href="https://www.ubuntu.com">Ubuntu</a> and <a href="https://www.canonical.com">Canonical</a> are registered trademarks of Canonical Ltd. </p> <ul class="p-inline-list--middot"> <li class="p-inline-list__item"> <a href="https://www.ubuntu.com/legal" ><small>Legal information</small></a > </li> <li class="p-inline-list__item"> <a class="p-footer__link js-revoke-cookie-manager" href="" ><small>Manage your tracker settings</small></a > </li> <li class="p-inline-list__item"> <a href="https://github.com/canonical-web-and-design/maas.io/issues/new/" ><small>Report a bug on this site</small></a > </li> </ul> <span class="u-off-screen" ><a href="#">Go to the top of the page</a></span > </div> </nav> </footer> <script src="/static/js/modules/global-nav/global-nav.js"></script> <script src="/static/js/modules/cookie-policy/cookie-policy.js"></script> <script> canonicalGlobalNav.createNav({ breakpoint: 960 }); cpNs.cookiePolicy(); </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10