armada

module
v0.22.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 8, 2026 License: Apache-2.0

README

Armada logo

CircleCI Go Report Card Artifact Hub LFX Health Score

OpenSSF Best Practices

Armada

Armada is a system built on top of Kubernetes for running batch workloads. With Armada as middleware for batch, Kubernetes can be a common substrate for batch and service workloads. Armada is used in production and can run millions of jobs per day across tens of thousands of nodes.

Armada addresses the following limitations of Kubernetes:

  1. Scaling a single Kubernetes cluster beyond a certain size is challenging. Hence, Armada is designed to effectively schedule jobs across many Kubernetes clusters. Many thousands of nodes can be managed by Armada in this way.
  2. Achieving very high throughput using the in-cluster storage backend, etcd, is challenging. Hence, Armada performs queueing and scheduling out-of-cluster using a specialized storage layer. This allows Armada to maintain queues composed of millions of jobs.
  3. The default kube-scheduler is not suitable for batch. Instead, Armada includes a novel multi-Kubernetes cluster scheduler with support for important batch scheduling features, such as:
    • Fair queuing and scheduling across multiple users. Based on dominant resource fairness.
    • Resource and job scheduling rate limits.
    • Gang-scheduling, i.e., atomically scheduling sets of related jobs.
    • Job preemption, both to run urgent jobs in a timely fashion and to balance resource allocation between users.

Armada also provides features to help manage large compute clusters effectively, including:

  • Detailed analytics exposed via Prometheus showing how the system behaves and how resources are allocated.
  • Automatically removing nodes exhibiting high failure rates from consideration for scheduling.
  • A mechanism to earmark nodes for a particular set of jobs, but allowing them to be used by other jobs when not used for their primary purpose.

Armada is designed with the enterprise in mind; all components are secure and highly available.

Armada is a CNCF Sandbox project and is used in production at G-Research.

For an overview of Armada, see the following videos:

The Armada project adheres to the CNCF Code of Conduct.

Installation

Armada Operator

For installation instructions, easiest way is to use the Armada Operator. For more information, see the Armada Operator repository.

Alternatively, you can install Armada manually by using the Helm charts defined in the deployment directory.

armadactl

Armada also provides a command-line interface, armadactl, which can be used to interact with the Armada system.

To install armadactl, run the following script:

scripts/get-armadactl.sh

Or download it from the GitHub Release page for your platform.

Local Development

Armada runs locally via goreman: the dependencies (redis, postgres, pulsar) run in containers, and the Armada components run as host processes built from source, so iteration is fast and debuggers attach directly.

mage kind                     # one-time: local Kubernetes cluster for the executor (skip for fake-executor)
export KUBECONFIG=.kube/external/config

mage dev:up no-auth           # default
mage dev:up auth              # OIDC via keycloak
mage dev:up fake-executor     # no Kubernetes cluster needed
mage dev:up hot-cold          # parallel Hot/Cold Lookout stack
mage dev:down                 # stop the dependency containers

See the developer guide for the full localdev reference (profiles, procfiles, service ports, authentication, debugging) and _local/README.md for the directory layout.

Documentation

For documentation, see the following:

We expect readers of the documentation to have a basic understanding of Docker and Kubernetes; see, e.g., the following links:

Contributions

Thank you for considering contributing to Armada! We want everyone to feel that they can contribute to the Armada Project. Your contributions are valuable, whether it's fixing a bug, implementing a new feature, improving documentation, or suggesting enhancements. We appreciate your time and effort in helping make this project better for everyone. For more information about contributing to Armada see CONTRIBUTING.md and before proceeding to contributions see CODE_OF_CONDUCT.md

Discussion

If you are interested in discussing Armada you can find us on slack

Directories

Path Synopsis
cmd
armadactl command
binoculars command
broadside command
Package main provides the Broadside load tester for Armada Lookout.
Package main provides the Broadside load tester for Armada Lookout.
eventingester command
executor command
fakeexecutor command
lookout command
lookoutingester command
scheduler command
server command
simulator command
testsuite command
internal
armadactl
Package armadactl contains all the business logic for armadactl.
Package armadactl contains all the business logic for armadactl.
broadside/actions
Package actions provides functionality for simulating bulk operations on jobs during Broadside load tests.
Package actions provides functionality for simulating bulk operations on jobs during Broadside load tests.
broadside/db
Package db provides database abstraction for the Broadside load tester.
Package db provides database abstraction for the Broadside load tester.
broadside/estimation
Package estimation provides data volume estimation and confirmation prompts for Broadside load tests.
Package estimation provides data volume estimation and confirmation prompts for Broadside load tests.
broadside/ingester
Package ingester simulates job ingestion events for the Broadside load tester.
Package ingester simulates job ingestion events for the Broadside load tester.
broadside/jobspec
Package jobspec provides shared job specifications and utilities for Broadside load testing.
Package jobspec provides shared job specifications and utilities for Broadside load testing.
broadside/metrics
Package metrics provides histogram-based metrics collection for Broadside components.
Package metrics provides histogram-based metrics collection for Broadside components.
broadside/orchestrator
Package orchestrator coordinates Broadside load test execution.
Package orchestrator coordinates Broadside load test execution.
broadside/querier
Package querier simulates user query load for the Broadside load tester.
Package querier simulates user query load for the Broadside load tester.
common/armadaerrors
Package armadaerrors contains generic errors that should be returned by code handling gRPC requests.
Package armadaerrors contains generic errors that should be returned by code handling gRPC requests.
common/database
Package database contains shared utilities for components that interact with Armada's PostgreSQL databases.
Package database contains shared utilities for components that interact with Armada's PostgreSQL databases.
common/errormatch
Package errormatch provides types and functions for matching job failure signals: exit codes, termination messages, and Kubernetes conditions.
Package errormatch provides types and functions for matching job failure signals: exit codes, termination messages, and Kubernetes conditions.
common/logging
Package logging provides structured logging utilities for Armada components.
Package logging provides structured logging utilities for Armada components.
common/mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
executor/categorizer
Package categorizer classifies pod failures into a single named category with an optional subcategory, based on configurable rules.
Package categorizer classifies pod failures into a single named category with an optional subcategory, based on configurable rules.
lookout
Package lookout contains the Lookout API server, which serves the auto-generated REST API defined in swagger.yaml.
Package lookout contains the Lookout API server, which serves the auto-generated REST API defined in swagger.yaml.
lookout/gen/restapi
Package restapi Lookout v2 API
Package restapi Lookout v2 API
lookout/pruner
Package pruner contains the lookout database pruner.
Package pruner contains the lookout database pruner.
lookout/version
Package version exposes the Lookout backend's release version, commit, and build time.
Package version exposes the Lookout backend's release version, commit, and build time.
lookouthc/schema
Package schema contains the idempotent partitioner for the experimental hot-cold phase of Lookout.
Package schema contains the idempotent partitioner for the experimental hot-cold phase of Lookout.
lookoutingester/lookoutdb
Package lookoutdb provides the database-insertion layer for the Lookout ingester.
Package lookoutdb provides the database-insertion layer for the Lookout ingester.
scheduler/mocks
Package schedulermocks is a generated GoMock package.
Package schedulermocks is a generated GoMock package.
server/mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
testsuite/build
Package build info
Package build info
testsuite/eventwatcher
Utility for watching events.
Utility for watching events.
pkg
api
Package api is a reverse proxy.
Package api is a reverse proxy.
api/binoculars
Package binoculars is a reverse proxy.
Package binoculars is a reverse proxy.
api/schedulerobjects
Package schedulerobjects is a reverse proxy.
Package schedulerobjects is a reverse proxy.
scripts
merge_swagger command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL