Deployment guide
This guide shows you how to install AxoConsole on a local, on-premises virtual machine using k3s and Helm. Installation of other components like the ingress controller and the cert-manager is also included. Since this is a single instance deployment, we don’t recommend using it in production environments. For additional steps and configurations needed in production environments, contact our support team.
To deploy AxoConsole in an air-gapped environment, see Air-gapped.
At a high level, the deployment consists of the following steps:
-
Running the installation script on the virtual machine that deploys:
- Kubernetes
- cert-manager and Traefik
- AxoConsole
Any of these components can be skipped if already installed.
-
Basic authentication with admin user and password is configured by default. You can also configure other common authentication methods like LDAP, Github and Google.
-
Before deploying AxoRouter describes the steps you have to complete on a host before deploying AxoRouter on it. These steps are specific to on-premises AxoConsole deployments, and aren’t needed when using the SaaS AxoConsole.
Prerequisites
To install AxoConsole, you’ll need the following:
-
The URL for the AxoConsole installation script. You’ll receive this URL from our team. You can request it using the contact form.
CAUTION:
Don’t start the Install AxoConsole process until you’ve received the URL.
-
A license key for AxoConsole. You’ll receive this from our team. You can request it using the contact form.
-
A host that meets the system requirements.
-
Network access set up for the host.
System requirements
Supported platforms:
- Ubuntu 24.04 and 26.04,
- Red Hat Enterprise Linux 9.4 or newer and 10.
Other compatible and derivative distributions (for example, AlmaLinux or Rocky Linux) should work as well, but we don’t test them explicitly.
The virtual machine (VM) must have at least:
| Resource | Minimum | Production |
|---|---|---|
| CPU | 4 vCPU | 16 vCPU |
| RAM | 8 GB | 16 GB |
Disk (/) |
100 GB | 250 GB |
-
A Minimum setup with 4 vCPU (x86_64-based), 8 GB RAM, and 100 GB disk space can handle about 100 AxoRouter instances and 1000 data source hosts.
-
A real-life production scenario that handles 100 AxoRouter and 3000 data source hosts with 30-day metric retention would need:
- 16 vCPU (x86_64-based)
- 16 GB RAM
- 250 GB disk space
For details on sizing, contact our support team.
You’ll need to have access to a user with sudo privileges.
Network access
The host must be able to access the following domains related to the AxoConsole:
-
When using AxoConsole SaaS:
<your-tenant-id>.cloud.axoflow.io: HTTPS traffic on TCP port 443, needed to download the binaries for Axoflow software (like Axolet and AxoRouter).kcp.<your-tenant-id>.cloud.axoflow.io: HTTPS (mutual TLS) traffic on TCP port 443 for management traffic.telemetry.<your-tenant-id>.cloud.axoflow.io: HTTPS (mutual TLS) traffic on TCP port 443, where Axolet sends the metrics of the host.us-docker.pkg.dev: HTTPS traffic on TCP port 443, but only if you’re forcing the installation script to pull the container images from the public repository. The Axolet and AxoRouter for Linux installation scripts download the images directly from AxoConsole.
-
When using an on-premises AxoConsole:
-
The following domains should point to AxoConsole IP address to access Axoflow from your desktop and AxoRouter hosts:
your-host.your-domain: The main domain of your AxoConsole deployment.idp.your-host.your-domain: A subdomain for the identity provider. Only Dex uses this subdomain. The built-in identity provider uses the/idppath of the main domain.kcp.your-host.your-domain: A subdomain for management traffic.telemetry.your-host.your-domain: A subdomain for agent telemetry.
-
The AxoConsole host must have the following Open Ports:
- 80 TCP: Traefik ingress (HTTP, redirected to HTTPS).
- 443 TCP: HTTPS for the AxoConsole UI, API, and all web traffic.
-
-
When installing Axoflow agent for Windows or Linux:
github.com: HTTPS traffic on TCP port 443, for downloading installer packages.
Install AxoConsole
-
Download the installation script from the URL you’ve received from the Axoflow Support Team.
-
Transfer the file to the host where you want to install AxoConsole.
-
Run the installation script with your license key and the domain name for your AxoConsole deployment.
Note Re-running the installer will reuse any existing or modified manifests or user settings (for example, authentication settings added to/var/lib/rancher/k3s/server/manifests/axoflow-config.yaml) available on the host.Terminal window sudo LICENSE_KEY=<your-license-key> BASE_HOSTNAME=<axoconsole-domain-name> AXOFLOW_VERSION=0.90.0 bash ./axoflow-install.sh ‐‐no-airgapNoteIf you omit
BASE_HOSTNAME, the installer probes whether<VM_IP>.nip.ioresolves and offers it as the default. nip.io is a free wildcard DNS service. It’s useful for testing and demos, because AxoConsole and all its subdomains resolve without any DNS or/etc/hostsconfiguration. For production deployments, use a proper domain name.BASE_HOSTNAMEmust be a lowercase DNS name (a-z,0-9,-, and dots), not an IP address.You can use the following flags as needed for your environment.
-
--step: Prompt before each step -
--dry-run: Show what would be done without executing anything -
--skip-k3s: Skip k3s installation (already installed) -
--skip-cert-manager: Skip cert-manager installation -
--disable-traefik: Disable the built-in Traefik ingress controller of k3s. Use this option if you use a custom ingress controller. The installer also skips the CoreDNS rewrite of the base hostname, so the cluster DNS must resolve the base hostname to your ingress controller. -
--skip-nip-io: Skip the automatic<VM_IP>.nip.ioDNS probe and useaxoflow.localas the default base hostname. -
--idp-bootstrap: Don’t create theadminuser of the built-in identity provider. The first user who registers athttps://<axoconsole-domain-name>becomes the admin, so register before exposing the host to other users. Environment variable:AXOIDP_BOOTSTRAP=true. -
--idp-admin-password: Prompt for the password of theadminuser instead of generating a random one. The installer stores only a bcrypt hash of the password. Online installations without the bundle need thehtpasswdtool on the host to hash the password. The prompt needs an interactive terminal. For non-interactive installations, use one of the following environment variables instead:AXOIDP_ADMIN_PASSWORD=<password>: The password of theadminuser.AXOIDP_ADMIN_PASSWORD_HASH=<hash>: A bcrypt hash of the password. Create the hash on a different host, for example, withhtpasswd -nbB admin '<password>' | cut -d: -f2-. With this variable, the password doesn’t get to the AxoConsole host, and the host doesn’t needhtpasswd.
-
--diagnose [namespace]: Inspect pods that are not ready and explain why (image-pull errors, configuration issues, crashes). Runs automatically on a timeout; use on demand after a failed install. -
--uninstall: Uninstall AxoConsole. The installer prompts before each step (removing workloads, deleting data, and removing k3s), so you can stop at any point. See Uninstall AxoConsole.
Advanced flags:
--skip-images: Skip container image import entirely. Use when images are already loaded into k3s.--image-mode bundle|component|skip: Control how container images are imported.bundle(default) imports pre-packaged image tarballs;componentimports one image per component;skipskips import.--prepare-env: Install only k3s, cert-manager, and Traefik, and skip AxoConsole. Use for a two-phase install where you want to configure the environment before deploying AxoConsole.--ignore-requirements: Bypass hardware requirement checks.
-
-
If needed, follow the on-screen instructions. For a test installation, you can usually use the default values. For recommendations for a production environment, contact our support team.
-
Wait a few minutes until everything is installed.
In case of any errors, check Troubleshooting for tips.
-
If you didn’t use the
--idp-bootstrapor the--idp-admin-passwordflag, the script asks to show the password of the defaultadminuser. Record the password. You need it to log in to AxoConsole.Terminal window ... [2026-06-02 20:44:28] [INFO ] All pods in axoflow are ready/complete [2026-06-02 20:44:28] [INFO ] Axoflow is healthy [2026-06-02 20:44:28] [INFO ] Access the UI at: https://<axoconsole-domain-name> Show admin credentials? [y/N]: y Username: admin Password: MzGIjuWKjXOtiRs4If needed, later you can retrieve the password by running:
Terminal window kubectl -n "${AXOFLOW_NAMESPACE}" get secret axoidp-admin \ -o go-template='Username: {{ .data.username | base64decode }}{{ printf "\n" }}Password: {{ .data.password | base64decode }}{{ printf "\n" }}'Note- If you used the
--idp-bootstrapflag, the installer doesn’t create theadminuser or theaxoidp-adminsecret. Open the AxoConsole URL and register the first user. This user becomes the admin. - If you set the password with
--idp-admin-password(or theAXOIDP_ADMIN_PASSWORDorAXOIDP_ADMIN_PASSWORD_HASHenvironment variable), log in asadminwith the password that you set.
- If you used the
Log in to AxoConsole
-
If your desktop can’t resolve the domain name of AxoConsole, add the domain name to the
/etc/hostsfile of your desktop. Use the following format, with an IP address of AxoConsole that your desktop can access.Terminal window <AXOFLOW-CONSOLE-IP-ADDRESS> <your-host.your-domain> kcp.<your-host.your-domain> telemetry.<your-host.your-domain> -
Open the
https://<your-host.your-domain>URL in your browser. -
The on-premises deployment of AxoConsole shows a self-signed certificate. If your browser complains about the related risks, accept it.
-
Log in to AxoConsole as
admin, with the password from the installation step. If you used the--idp-bootstrapflag, register the first user, or log in with the user that you registered.
Prepare AxoRouter hosts
AxoConsole service reference
| Service Name | Namespace | Purposes | Function |
|---|---|---|---|
| KCP | axoflow |
Backend API | Kubernetes Like Service with built in database, that service manage all the settings that our system manage |
| Chalco | axoflow |
Frontend API | Serve the UI API Calls, implement business logic for the UI |
| Controller-Manager | axoflow |
Backend Service | Reacts to state changes in our business entities, manage business logic for the Backend |
| Telemetry Proxy | axoflow |
Backend API | Receives agents telemetries |
| UI | axoflow |
Dashboard | The frontend for AxoConsole |
| Prometheus | axoflow |
Backend API /Service | Monitoring component to store time series information and an API for query, manage alert rules |
| Alertmanager | axoflow |
Backend API /Service | Monitoring component to send alerts based on alerting rules (optional, disabled by default) |
| Axoflow IDP | axoflow |
Identity Connector/Proxy | Identity Connector/Proxy to allow the customer to use own identity (Google, LDAP, etc.) |
| Axolet Dist | axoflow |
Backend API | Static artifact store to contains agents binaries |
| Cert Manager (kcp) | axoflow |
Automated Certificate management tool | Manage certificates for Agents |
| Cert Manager | cert-manager |
Automated Certificate management tool | Manage certificates for Axoflow components (Backend API, HTTP Proxy) |
| FilterX Validator | axoflow |
Backend API | Validates FilterX expressions used in data processing pipelines |
| Traefik Ingress Controller | kube-system |
HTTP Proxy | Route the HTTP traffic between multiple Frontend/Backend APIs |
Troubleshooting
- If you get the
[ERROR] Timed out waiting for k3s node to be Readyerror message, increase the timeout limit by runningK3S_TIMEOUT=180, then rerun the installation script.
In case of other errors, run the following command to create a debug package from the cluster, and contact our support team.
sudo k3s kubectl cluster-info dump --all-namespaces --output-directory=./cluster-dump && tar -czvf cluster-dump.tar.gz cluster-dumpUninstall AxoConsole
To uninstall AxoConsole, run the installer with the --uninstall flag:
sudo ./axoflow-install.sh --uninstallThe uninstaller prompts before each step and requires separate confirmation for:
-
Removing the AxoConsole workloads and manifests
-
Deleting stored data (namespace and PersistentVolumeClaims) — irreversible
CAUTION:
Hazard of data loss!
Confirming step 2 permanently deletes all stored data.
-
Removing k3s
CAUTION:
Hazard of data loss!
If you’re using k3s to run other software apart from AxoConsole, decline step 3 to keep k3s in place.
The uninstaller is safe to run on a partial or incomplete installation.