Best Approach for Implementing AWX in Production: Docker vs. Kubernetes?

Hello,
I have a query regarding implementing AWX on Red Hat 9. My goal is to establish two control nodes and three execution nodes on a machine. I’m considering two deployment methods:

  • Running AWX in Docker.
  • Deploying AWX in a Kubernetes cluster using the awx-operator, following the instructions provided in the link below:

https://ansible.readthedocs.io/projects/awx-operator/en/latest/installation/basic-install.html

Which approach would you recommend or are there any other recommended or superior ways to implement AWX in a production environment that you would suggest considering?

Hi, the install guide for AWX may help you:

Starting in version 18.0, the AWX Operator is the preferred way to install AWX.
awx/INSTALL.md at devel · ansible/awx · GitHub

AWX can also alternatively be installed and run in Docker, but this install path is only recommended for development/test-oriented deployments, and has no official published release.
awx/INSTALL.md at devel · ansible/awx · GitHub

1 Like

Hello, thank you for your response.
I have already read the installation guide in the AWX GitHub repository. However, I am uncertain which approach would be best for my scenario. As you mentioned, the installation guide suggests running AWX in Docker, but it’s stated to be recommended primarily for development purposes. Nevertheless, some engineers do run AWX in Docker in production environments, and I’ve also noticed AWX available in the Azure Marketplace, where the AWX instance provided by Azure operates within Docker. This has left me quite perplexed about determining the ideal approach for my situation, particularly because I intend to set up multiple execution nodes. Additionally, I couldn’t find any references on how to run multiple control and execution nodes in Kubernetes, while there are several resources available for achieving this using Docker.

AWX is not being offered in Azure Marketplace by the AWX devs. What you see there is just 3rd parties offering “their” installation of AWX. AWX only has one recommended way of running, kubernetes, for anything but development.
Having said that, this is open source software, you may use it however you like as far as the license permits (for licenses see awx/LICENSE.md at devel · ansible/awx · GitHub and awx/licenses at devel · ansible/awx · GitHub). So if you say you want to run it in docker for production, do that, but you won’t get much help from devs/community if you do, so be prepared to solve your own issues :slight_smile:

and maybe for completeness: there is a supported way to run it via Azure Marketplace, if you buy the Red Hat product (Azure Automation Platform). If you buy that you will be also funding AWX development because most (all?) main developers work for Red Hat

Thank you for your explanation.
Do you have any references I could use to implement multiple control nodes and execution nodes? I’ve tried searching online, but I couldn’t find a suitable reference for that.

Hi,

I could use to implement multiple control nodes

You can use task_replicas to increase the number of the control nodes: Scaling the web and task pods independently - Ansible AWX Operator Documentation

and execution nodes

An Execution Node in AWX is an instance that runs standalone, not on a Kubernetes cluster; it can be added via the GUI and the install bundle can be downloaded: awx/docs/execution_nodes.md at devel · ansible/awx · GitHub

If you want to limit the job pods to specific Kubernetes nodes, you can use Container Groups with customized pod spec with nodeAffinity: 7. Container and Instance Groups — Ansible AWX community documentation

Container Groups can also be used to run jobs on the different Kubernetes cluster than the cluster on which AWX runs.