Kolla-Ansible makes deploying OpenStack on multiple nodes faster and simpler. It uses containers to isolate services and Ansible automation to streamline setup. Here’s why it’s a go-to tool for OpenStack:

  • Simplifies Multinode Setups: Assign roles like controller, compute, and storage across nodes for better scalability and performance.
  • Automates Deployment: No need for manual configuration – everything runs through Ansible playbooks.
  • Containerized Services: Each OpenStack service runs in its own Docker container for consistency and easy updates.
  • Customizable: Preconfigured for beginners but flexible for advanced users to tweak.

What You Need to Get Started:

  1. Hardware: At least 8GB RAM and 40GB disk per node (more for production).
  2. Networks: Set up management, external, tunnel, and API networks.
  3. Software: Compatible OS (Ubuntu, CentOS, etc.), Python 3.x, Docker, and Ansible.
  4. SSH Access: Passwordless SSH between nodes.

Key Steps:

  1. Prepare Nodes: Install dependencies, configure SSH, and meet hardware/software requirements.
  2. Configure Kolla-Ansible: Set up inventory and globals.yml files to map services to nodes.
  3. Run Deployment: Use Kolla-Ansible playbooks to deploy OpenStack services.
  4. Validate: Check containers, test services, and troubleshoot any issues.

Kolla-Ansible turns complex OpenStack setups into an automated, repeatable process. Whether you’re new to OpenStack or managing a large-scale cloud, this tool helps you deploy faster and with fewer errors.

OpenStack Installation Made Easy with Kolla-Ansible | Step-by-Step Guide

Like having a visual to follow along with? This video from Cyber ABC Lab is a great resource!

Prerequisites for Multinode OpenStack Deployment

Before diving into a multinode OpenStack deployment, confirm that your infrastructure meets all necessary requirements. This helps prevent potential issues during the setup process.

Hardware and Network Requirements

Your hardware needs to meet specific resource and networking standards to handle a multinode deployment. Each node in your cluster should have at least 8GB of RAM and 40GB of disk space for basic functionality. However, these are just the minimums and are generally not recommended for anything beyond a test or dev lab – production setups often demand much more, depending on workload requirements.

When distributing roles across nodes:

  • Controller nodes: Require fast CPUs and plenty of RAM to manage services like Nova API, Neutron, and Keystone. Production nodes will typically require 16–32 GB RAM minimum.
  • Compute nodes: Need sufficient CPU cores and memory to run virtual machines effectively. It varies based on workload, but production nodes will usually require 32-128 GB RAM.
  • Network nodes: Must have efficient networking capabilities to handle internal and external traffic. For production, you’ll want fast SSD storage, especially for controller/DB services.

Network configuration is equally important. OpenStack requires multiple networks for smooth operations, including:

  • Management network: Handles internal communication between OpenStack services.
  • External/public network: Provides connectivity to the outside world.
  • Tunnel network: Manages tenant traffic between compute nodes.
  • API-Ext network: Segregates API traffic for better security and performance.

Kolla-Ansible relies on this specific network setup for deployment. Additionally, ensure hostnames are resolvable across all nodes, as RabbitMQ – responsible for message queuing – needs proper DNS resolution or accurate /etc/hosts files to function correctly.

For production environments, consider setting up a local Docker registry to avoid relying on public registries. This approach speeds up deployment, reduces network dependencies, and gives you more control over container images.

Software Dependencies and Compatibility

After handling hardware and network requirements, verify that your software setup aligns with Kolla-Ansible’s needs. Supported operating systems include CentOS Stream, Debian, Rocky Linux, and Ubuntu, with default Python 3.x versions being compatible. Use official Kolla-Ansible documentation for version alignment with specific OpenStack releases (e.g., Caracal, Dalmatian, Epoxy).

Install Kolla-Ansible and its dependencies in a virtual environment. This prevents conflicts with system packages and simplifies version management. Before setting up the virtual environment, update to the latest version of pip to avoid compatibility issues.

When installing Docker, use the official Docker, Inc. version for better stability and compatibility. While distribution-packaged versions may work, official Docker releases are updated more frequently and support the features Kolla-Ansible depends on.

To optimize Ansible, tweak its configuration file by adjusting settings like host_key_checking, pipelining, and forks. These changes can significantly improve deployment speed, especially for larger clusters.

SSH Configuration for Ansible Orchestration

Proper SSH setup is essential for Ansible to manage nodes seamlessly. Passwordless SSH access is required for deployment.

Follow these steps to configure SSH:

  1. Generate an SSH key pair using ssh-keygen. Accept the default file name and leave the passphrase empty.
  2. Copy the public key to all nodes using ssh-copy-id USER_NAME@HOST_NAME, replacing USER_NAME and HOST_NAME with the appropriate values. If managing many nodes, scripting this process can save time.
  3. Create and configure the ~/.ssh/config file: Use touch ~/.ssh/config to create the file, then edit it to include Hostname and User settings for each node. This simplifies connections in your Ansible inventory.
  4. Set file permissions with chmod 600 ~/.ssh/config to secure your configuration.

Before proceeding, test SSH connectivity by connecting to each node. This ensures passwordless authentication is working correctly. Fix any issues now to avoid deployment failures caused by connectivity problems. If you need additional guidance in preparing Kolla-Ansible, check our docs here.

Configuring Kolla-Ansible for a Multinode Environment

Once your infrastructure is in place and SSH access is set up, the next step is configuring Kolla-Ansible. These configuration files dictate how OpenStack services are distributed across your nodes and determine the overall deployment behavior.

Setting Up the Ansible Inventory File

The inventory file is crucial for mapping OpenStack services to specific hosts. It defines which services will run on which nodes in your multinode setup.

Start by copying the multinode inventory template from your Kolla-Ansible installation directory. You’ll find it at /usr/share/kolla-ansible/ansible/inventory/multinode. Copy this file to your working directory so you can modify it as needed.

The inventory file organizes nodes into groups based on the roles they will perform:

GroupDescription
controlNodes running API services, databases, and message queues
networkNodes handling Neutron networking services
computeNodes running Nova compute services for virtual machines
storageNodes providing Cinder block storage services
monitoringNodes running monitoring and logging services

To customize, add the IP addresses or hostnames of your nodes to the appropriate groups. For example, if your nodes have IPs 192.168.1.10, 192.168.1.11, and 192.168.1.12, you might assign the first as a control node, the second as a network node, and the third as a compute node.

Next, configure how Ansible connects to these nodes. Add parameters like ansible_ssh_user, ansible_become, and ansible_private_key_file to specify the SSH user, privilege escalation settings, and private key file. If all nodes share the same SSH user and key, you can define these settings globally in the [all:vars] section.

For more advanced setups, consider using host_vars and group_vars directories. These allow you to manage variables for specific hosts or groups without cluttering the main inventory file. This approach is particularly helpful when you need detailed customization for certain nodes or groups.

Once the inventory file is ready, move on to editing the globals.yml file, which defines additional service-specific settings.

Customizing the globals.yml Configuration

The globals.yml file, located at /etc/kolla/globals.yml, is the central configuration file for Kolla-Ansible. It governs key deployment parameters and operational settings for your OpenStack environment.

Network settings are among the most critical. Assign kolla_internal_vip_address to an unused IP address on your network. This IP will float between hosts running keepalived to provide high availability. If you’re not using HAproxy and keepalived, set this to the IP of your network interface. You can also configure kolla_external_vip_address separately to handle external traffic.

Define the network_interface for API, VXLAN, and storage traffic. By default, api_interface, storage_interface, tunnel_interface, and dns_interface inherit the value of network_interface, but you can customize them individually if needed. For Neutron’s external connectivity, set neutron_external_interface to a dedicated interface that handles external traffic. Ensure this interface has no IP address assigned.

Service enablement flags determine which OpenStack components will be deployed. Some key flags include:

  • enable_glance for image management
  • enable_keystone for identity services
  • enable_nova for compute
  • enable_neutron for networking
  • enable_cinder for block storage

Enable only the services you plan to use. This helps conserve resources and simplifies the deployment process.

For container image management, configure docker_registry to point to your Docker registry. If you’ve set up a local registry as suggested in the prerequisites, use it to speed up deployments and reduce reliance on external resources.

Security options like kolla_enable_tls_internal and kolla_enable_tls_external enable TLS encryption for internal and external VIPs. If you enable TLS, make sure to provide the necessary certificates and configure the kolla_external_fqdn_cert and kolla_internal_fqdn_cert parameters. TLS for internal and external traffic is powerful but requires detailed certificate management. New users should consider starting with TLS disabled and enabling it later once basic services are running.

If you’re running multiple keepalived clusters on the same Layer 2 network, assign a unique keepalived_virtual_router_id (a value between 0 and 255) to avoid conflicts.

After finalizing your changes in globals.yml, it’s time to validate your configurations.

Validating Configuration with Prechecks

Before deploying OpenStack, use Kolla-Ansible’s built-in tools to validate your setup.

Run the following command to perform prechecks:
kolla-ansible prechecks -i INVENTORY
Replace INVENTORY with the path to your inventory file. This tool verifies that all requirements are met for deploying OpenStack services.

Prechecks will examine network connectivity, disk space, memory, and service dependencies. Any failures or warnings should be addressed before moving forward. Common issues include insufficient disk space, misconfigured network interfaces, or missing dependencies. For instance, if network-related errors arise, double-check the interfaces specified in globals.yml and ensure they are correctly configured on your nodes.

After deployment, you can validate the generated configuration files by running:
kolla-ansible validate-config
This step ensures that the configuration files created during deployment are correct and contain the expected values.

If you encounter timeout errors during prechecks, especially with services like Nova Libvirt, investigate network connectivity between nodes. Make sure all required ports are open and accessible. Often, these issues are caused by firewalls or routing problems that need to be resolved before proceeding with deployment.

Deploying OpenStack Using Kolla-Ansible Playbooks

Once your configuration is verified and prechecks have passed, it’s time to deploy OpenStack across your multinode setup. This process unfolds in three stages: node bootstrapping, playbook execution, and post-deployment validation.

Bootstrapping Nodes with Kolla-Ansible

Before deploying OpenStack services, each node in your cluster needs to be prepared. This step, called bootstrapping, ensures all system prerequisites are configured. These include hostname resolution, user account setup, Docker installation, and firewall adjustments.

Start by installing the necessary Ansible Galaxy dependencies:

kolla-ansible install-deps

This command ensures that all required Ansible collections are installed on your deployment node. If you’re using a Python virtual environment for Kolla-Ansible, make sure to activate it before proceeding.

Next, run the bootstrap command:

kolla-ansible bootstrap-servers -i <path/to/multinode/inventory/file>

This step configures Docker’s storage driver and repository settings based on your globals.yml file. It also handles SELinux settings on Red Hat-based systems and can set up Python virtual environments if specified. For those planning to update Docker later, enabling the live-restore option can help avoid unnecessary container restarts. However, be cautious – this feature may occasionally cause issues with some container configurations.

The bootstrapping process usually takes 5–10 minutes per node, depending on network speed and the number of required packages. Keep an eye out for SSH or permission errors during this phase.

Once all nodes are bootstrapped and system configurations are in place, you’re ready to deploy OpenStack services.

Running the Deployment Playbook

After successfully bootstrapping your nodes, the next step is deploying OpenStack itself. This phase installs and configures all OpenStack services based on your inventory file and globals.yml settings.

To start the deployment, use:

kolla-ansible deploy -i <path/to/multinode/inventory/file>

The playbook deploys services in the correct dependency order. For multinode setups, using a local Docker registry can speed up the process by reducing reliance on external networks. It’s strongly recommended for production, but not strictly required. Without a local registry, the deployment may take longer, as each node will need to download images from external sources. It can also cause failed deployments if Docker Hub is rate-limiting or unavailable.

A typical multinode deployment can take anywhere from 30 to 60 minutes, depending on your hardware and network performance. While the process is mostly automated, it’s important to monitor the output for potential issues, such as network errors, disk space problems, or service conflicts.

Once the deployment is complete, you’ll need to validate the environment to ensure everything is working as expected.

Post-Deployment Steps and Validation

After the deployment playbook finishes, it’s time to verify that your OpenStack environment is operational. Start by checking the status of all containers on each node:

docker ps

Look for critical services like keystone, nova-api, neutron-server, and horizon. These should be running without any restart loops or error states.

Next, generate the OpenStack admin credentials by running:

kolla-ansible post-deploy -i <path/to/multinode/inventory/file>

This command creates the /etc/kolla/admin-openrc.sh file, which contains the environment variables needed for administrator access to your OpenStack deployment.

To test web services, open your web browser and navigate to the external virtual IP address (kolla_external_vip_address) specified in your configuration. Use the default login credentials: admin and the password stored in /etc/kolla/passwords.yml. If the Horizon dashboard loads and you can log in, your web services are functioning properly.

For CLI validation, source the admin credentials and run basic commands like:

source /etc/kolla/admin-openrc.sh
openstack service list
openstack endpoint list
openstack network agent list

These commands confirm that API services are responsive and Neutron networking agents are active across your compute nodes.

Finally, test connectivity between nodes. Ensure compute nodes can communicate with controller nodes and verify network traffic flows across the management, storage, and tunnel networks. For production environments, perform additional checks, such as verifying HAProxy settings, clock synchronization, and security configurations (e.g., disabling the Keystone admin token).

If any issues arise during validation, review logs for specific containers using:

docker logs <container_name>

Common challenges include time synchronization problems, network connectivity issues, or misconfigured service endpoints, which can disrupt inter-service communication. Address these promptly to ensure a stable deployment.

Advanced Tips for Customization and Troubleshooting

Once you’ve successfully deployed your multinode OpenStack environment, the next step is tailoring it to your needs and addressing any challenges that come up. Below, you’ll find techniques to fine-tune your setup, centralize management, and troubleshoot common issues effectively.

Customizing Container Images

The default Kolla-Ansible container images might not always include the packages or configurations you need. By building custom images, you can take full control over your OpenStack services.

To override templates, use the following command with Jinja2:

kolla-build --template-override /path/to/custom-template.j2

For more in-depth customization, edit the kolla-build.conf file. This allows you to specify custom repositories and plugins, which is particularly helpful when building OpenStack from source with specific patches or versions.

For example, to add the networking-cisco plugin to the neutron_server image, you can configure it in the kolla-build.conf file like this:

[neutron-server-plugin-networking-cisco]
type = git
location = https://opendev.org/x/networking-cisco
reference = master

Next, modify the neutron_server_footer section in your template to install the plugin from the archive.

You can also apply security fixes or custom modifications without rebuilding entire images by leveraging the patching system. Simply define a patches_path in your kolla-build.conf file and organize patches accordingly.

For package management, use suffixes like append, remove, or override in your overrides. For instance, adding extra packages to the Horizon dashboard can be done with horizon_packages_append, while horizon_packages_remove excludes unnecessary ones.

Centralized Logging and Monitoring

Managing logs across multiple nodes can quickly become overwhelming. Centralized logging simplifies this by consolidating logs into a single, searchable repository.

To enable central logging, update your /etc/kolla/globals.yml file and set enable_central_logging to “yes.” This will deploy OpenSearch and OpenSearch Dashboards as part of your Kolla-Ansible setup, providing a centralized logging solution.

Logs are forwarded from all nodes using Fluentd. You can customize Fluentd’s settings by placing configuration files in /etc/kolla/config/fluentd/. This allows you to filter log types, adjust formatting, or send logs to additional destinations.

Once the logging system is active, create index patterns in OpenSearch Dashboards. Use flog-* as the index pattern and @timestamp as the time filter field. This setup enables you to filter logs by fields like Hostname, Payload, severity_label, and programname.

To avoid storage issues, implement log retention policies. OpenSearch’s Index State Management plugin can automatically delete or archive logs based on criteria like age or size.

For performance monitoring, keep an eye on the /v1/status endpoint of the Gnocchi HTTP API. A high number of measures waiting to be processed can signal bottlenecks in your telemetry pipeline.

Common Deployment Issues and Solutions

Even with careful preparation, deployment problems can happen. Knowing how to address common issues can save time and effort.

Bootstrap Failures
If the bootstrap process fails, a complete cleanup is often necessary before retrying. Use this command to remove the failed deployment and start fresh:

kolla-ansible destroy -i <<inventory-file>>

Container Image Mismatches
Tag inconsistencies between OpenStack releases can cause mismatches. Before deploying a new version, refresh your Docker image cache with:

kolla-ansible pull

This ensures all nodes have the latest images, reducing the risk of version conflicts.

Configuration Issues
Outdated globals.yml files or missing variables are common culprits. Double-check that your openstack_release variable matches your desired version and ensure your host inventory is accurate.

Troubleshooting Steps
Start with kolla-ansible prechecks to confirm your deployment targets are ready. Then, inspect container statuses with docker ps -a to identify failed or restarting containers. For detailed logs, use:

docker logs <container-name>

Or access the container directly:

docker exec -it <container-name> bash

Service Registration Problems
Issues with Nova service registration often stem from connectivity problems between compute and controller nodes or incorrect service endpoints. Verify that your management network is functioning properly and that DNS resolution works across all nodes.

Image Download Errors
If images fail to download (e.g., missing initrd or vmlinuz data), re-upload the images to resolve the issue.

For persistent issues, you can use the “nuclear option” to reset your environment completely:

kolla-ansible -i multinode destroy --yes-i-really-really-mean-it

This command wipes the deployment, giving you a clean slate to start over when all else fails.

Wrapping Up: Scalable and Automated OpenStack Deployments With Kolla-Ansible

Setting up a multinode OpenStack environment with Kolla-Ansible turns what used to be a daunting task into a streamlined and repeatable process. By combining the power of Docker containers with Ansible playbooks, it allows organizations to deploy OpenStack clouds without the challenges of traditional methods. Kolla-Ansible provides production-ready containers and deployment tools specifically designed for managing OpenStack environments, simplifying both the initial setup and ongoing operations.

One of the standout features of this approach is its automation. By defining your infrastructure as code, updates and maintenance become much easier to handle. This means even operators with limited experience can deploy reliable cloud environments, while more advanced users can customize and expand as their needs evolve.

OpenStack’s horizontal scaling capabilities further boost its appeal. You can add compute nodes, expand storage, or introduce new services without disrupting existing workloads. The containerized architecture ensures consistency across deployments, whether you’re managing a small development project or a large-scale production environment – a feature that has become a standard for managing extensive infrastructures.

Over time, the benefits of this approach become even clearer. Standardized deployments reduce the risk of configuration drift, and version-controlled infrastructure offers insights into changes, making troubleshooting more straightforward and solutions easier to replicate.

For businesses looking to adopt enterprise-grade private cloud infrastructure, Kolla-Ansible offers a reliable and efficient path. By starting with Kolla-Ansible, organizations can tap into OpenStack’s full potential while sidestepping the complexities that often come with large-scale deployments. Automation and standardization not only save time but also enhance deployment reliability.

Building on these principles, OpenMetal takes things a step further by providing on-demand private cloud solutions. Our approach allows businesses to confidently deploy scalable, production-ready OpenStack environments in just 45 seconds, getting all the benefits discussed here as the foundation of our private cloud offerings.

FAQs

What are the advantages of using Kolla-Ansible for deploying OpenStack in a multinode setup?

Kolla-Ansible provides a straightforward way to deploy OpenStack across multiple nodes. By using containerization, it simplifies the process of setting up and managing OpenStack services. This approach makes it easier to scale your environment and ensures high availability, keeping services running smoothly even if hardware or software issues pop up.

The tool also automates many of the more complicated tasks involved in deployment, cutting down on manual setup and reducing the chances of errors. This not only speeds things up but also makes your cloud infrastructure more reliable and easier to manage. In short, Kolla-Ansible offers a practical and efficient way to deploy OpenStack compared to older, more traditional methods.

How can I customize my OpenStack deployment with Kolla-Ansible to meet specific needs or add extra services?

To customize your OpenStack deployment using Kolla-Ansible, you can tweak the globals.yml file. This file lets you configure various settings, including network options, authentication methods, and service versions. Whether you need combined or separate IP addresses for internal and external service access, these adjustments help align the deployment with your organization’s specific needs.

Want to add extra services? You can do that by defining new roles. Start by updating your Ansible inventory and playbooks. Add the service to both the multinode and all-in-one inventories, and then modify the main playbook (site.yml) to include the required roles. This way, the new service gets deployed and configured alongside existing OpenStack components, ensuring everything works together smoothly.

What are common challenges when deploying OpenStack with Kolla-Ansible, and how can they be resolved?

Deploying OpenStack with Kolla-Ansible isn’t always a walk in the park. Common hurdles include misconfigurations in the globals.yml file, deployment failures caused by interruptions (like accidentally hitting CTRL-C), or issues with service registration – especially with nova-compute. For instance, if the deployment hangs while waiting for nova-compute services to register, it might signal a configuration problem or an issue with the service itself.

To navigate these challenges, make use of the precheck feature to confirm that your environment is properly configured before kicking off the deployment. If something does go wrong, the fastest way to recover is to tear down the failed deployment and refresh the Docker images using the kolla-ansible pull command. Don’t forget to check container logs – they can often pinpoint the exact issue that needs attention. Following these steps can help ensure a smoother and more dependable deployment experience.

Interested in OpenMetal’s Hosted Private Cloud Powered by OpenStack?

Chat With Our Team

We’re available to answer questions and provide information.

Chat With Us

Schedule a Consultation

Get a deeper assessment and discuss your unique requirements.

Schedule Consultation

Try It Out

Take a peek under the hood of our cloud platform or launch a trial.

Trial Options

 

 

 Read More on the OpenMetal Blog

Automated Multinode OpenStack Deployment with Kolla-Ansible

Jul 02, 2025

Kolla-Ansible simplifies multinode OpenStack deployments using Docker and Ansible automation. This guide walks you through the entire process, from hardware needs to final validation, helping you build a scalable private cloud faster and with fewer errors.

5 Best Practices for Kubernetes and OpenStack Integration

Jun 25, 2025

The integration of Kubernetes and OpenStack is a mature strategy for building powerful, flexible, and cost-effective private and hybrid clouds. Success depends on understanding their complementary roles and taking advantage of integration points to create a cohesive system. This guide provides an analysis of five best practices for architecting, deploying, and managing Kubernetes on OpenStack.

Multi-Cloud Networking with Kubernetes and OpenStack

Jun 11, 2025

If you’re looking to simplify your multi-cloud strategy, combining Kubernetes with OpenStack is a powerful approach. OpenStack provides the core infrastructure-as-a-service (IaaS), and Kubernetes orchestrates your containerized applications on top of it, giving you a consistent platform everywhere. This guide gives you a straightforward look at how to plan, build, and manage a multi-cloud network using these two technologies.

OpenStack vs Apache CloudStack: A Decision Guide for Migrating off VMware

Jun 08, 2025

Discover an in-depth comparison of Apache CloudStack vs. OpenStack for migrating from VMware. Technical buyers will learn about architectural differences, VMware integration strategies, migration utilities (virt-v2v, MigrateKit, Coriolis), and how OpenMetal’s managed private cloud on OpenStack can accelerate your transition with predictable pricing and SLA-backed support.

Cinder Volume Fails to Attach: Common Causes and Fixes

Jun 06, 2025

Frustrated by a Cinder volume that won’t attach? We’ve got you. This guide breaks down the common causes like incorrect volume states, backend config errors, and network glitches. Learn to troubleshoot and fix these attachment failures with practical CLI commands and preventative tips.

An Introduction to Mistral Workflows in OpenStack

May 28, 2025

Mistral is OpenStack’s workflow automation service that simplifies cloud operations by turning manual tasks into automated workflows. Learn about how it works and how you can get started using it to help boost efficiency and resource management in cloud environments.

Configuring External Networks in OpenStack Neutron

May 22, 2025

Learn how to configure external networks in OpenStack Neutron. This guide walks through creating networks, subnets, routers, and floating IPs. Learn to secure connections, ensure high availability, and tune performance for reliable public access to your cloud.

Comparing OpenStack Monasca and Datadog for Private Cloud Monitoring

May 14, 2025

We’re diving into OpenStack Monasca and Datadog, comparing them as monitoring tools for private cloud environments. Picking one comes down to your organization’s way of working, your team’s skills, and your overall cloud strategy. We’ll get into how they work, benefits and challenges, their ideal use cases, and when you may want to use them together.

The Benefits of OpenStack-Based Hosted Private Cloud for IT MSPs

May 13, 2025

OpenStack-based hosted private clouds offer MSPs an exceptional opportunity to provide their clients with a high-performance, secure, and cost-effective cloud solution. By leveraging the flexibility of OpenStack, MSPs can fine-tune performance, reduce costs, and deliver customized solutions that align with client needs.

When to Use Asynchronous Replication in OpenStack Clouds

May 06, 2025

Explore asynchronous replication in OpenStack clouds for improved application performance, cost savings, and flexible disaster recovery. Learn its benefits, common use cases with Cinder and Swift, conceptual setup, and key considerations like managing RPO and resource usage for a resilient deployment.