Installing ICM

AI Tools

ICM is installed with a single self-contained script, deploy_icm_unified.sh, which creates a service user, installs Docker and a pinned Ansible, downloads the ICM release package from Cloudsmith, and brings up the full ICM stack with Docker Compose on one Linux host. It runs interactively or fully non-interactively from environment variables.

The script and its detailed reference README are published in the public lightbits-community repository under intelligent-cluster-management/. This is the starting point. This article summarizes the flow.

Prerequisites

System Requirements

  • Operating System (a Python ≥ 3.12 Ansible controller is required):

    • Ubuntu 24.04+, Debian 13+

    • AlmaLinux / Rocky / RHEL 9 (via the AppStream python3.12 module) or 10

    • Not supported: Ubuntu 22.04 and Debian 12 (their stock Python is older than 3.12)

  • Disk: at least 20 GB free on / (bypass with ICM_SKIP_DISK_CHECK).

  • Memory: 4 GB RAM minimum, 8 GB recommended.

  • Network: outbound internet connectivity for package and container-image downloads.

  • Storage-network reachability (thick clone / data mobility only): to run thick clones, the ICM host must be able to reach every attached cluster's NVMe/TCP data network - the cluster's nvmeEndpoint addresses, both the discovery service (port 8009) and the I/O controllers (port 4420). ICM's bundled discovery-client attaches the source and destination volumes to the ICM host over NVMe/TCP to copy the data, so a route or interface onto that storage network is required. Management-only connectivity is sufficient to deploy ICM, attach clusters, and run volume/snapshot CRUD - but not for thick clone.

Required Permissions

  • Root access on the target host - the script creates a service user, installs packages, and configures the firewall.

Required Credentials

  • A Cloudsmith API key (obtain from Lightbits) - used to pull the ICM container images and release package from docker.lightbitslabs.com.

  • An ICM version to deploy (for example v0.9.6), or latest.

Install

Copy the script to a root-capable host and make it executable:

scp deploy_icm_unified.sh root@<ICM-Server>:/root/ ssh root@<ICM-Server> chmod +x deploy_icm_unified.sh

Interactive

./deploy_icm_unified.sh

The script prompts for the Cloudsmith API key, lets you pick a version (newest first), and asks for the project name.

Non-Interactive

Provide the inputs as environment variables and pass --non-interactive:

export ICM_CLOUDSMITH_API_KEY="<your-cloudsmith-api-key>" export ICM_VERSION="latest" # or a specific version, e.g. v0.9.6 export ICM_PROJECT_NAME="default" # optional; default: "default" export ICM_SKIP_DISK_CHECK="false" # optional; "true"/"1" skips the 20 GB check ./deploy_icm_unified.sh --non-interactive

Variable

Required

Meaning

ICM_CLOUDSMITH_API_KEY

Yes

Cloudsmith API key (used as the image-registry password).

ICM_VERSION

Yes

ICM version to deploy, or latest.

ICM_PROJECT_NAME

No

The Lightbits project ICM manages. Default: default.

ICM_SKIP_DISK_CHECK

No

true/1 skips the 20 GB free-disk check.

Deployment takes roughly 10–20 minutes, dominated by container-image pulls. On success, the script prints the access URLs and the icmcli alias is configured for the shell.

What Gets Deployed

The stack is brought up with Docker Compose and consists of the ICM service, its etcd registry, the Temporal engine with its PostgreSQL database and UI, the discovery client, and (optionally) the observability stack.

Access URLs

Service

URL

ICM API

https://<ICM-Server>:443

ICM Metrics

http://<ICM-Server>:8082

Temporal UI

http://<ICM-Server>:8080

Grafana

http://<ICM-Server>:3000

Prometheus

http://<ICM-Server>:9090

The etcd registry has no host port; it is reachable only inside the Compose network.

Files Created

Path

Contents

/opt/icm/

Compose stack, .env, postgresql-data/, tls/.

/etc/icm/

icm.yml, server certificate/key, keys/, .htpasswd, the Temporal encryption key, and Temporal/etcd certs.

/opt/observability/

Prometheus and Grafana configuration.

Security Notes

Note

The default ICM login is username admin, password light (stored in /etc/icm/.htpasswd). Change it before using ICM in production.

Note

The Cloudsmith API key is written in clear text to the generated Ansible inventory (inventory/group_vars/all.yml). Treat that file as a secret and rotate the key if it is exposed. The service user created by the installer has passwordless sudo.

Advanced Configuration

ICM's runtime configuration lives in /etc/icm/icm.yml.

The following are a few operational considerations:

  • Cluster polling interval — how often ICM refreshes its inventory from the attached clusters. Default 30s; must be within 5–120 seconds.

  • Refresh cron — the periodic full cluster refresh must be scheduled no more frequently than once per hour.

  • Request rate limit — ICM applies a request rate limit (default 200 requests/second); requests over the limit receive an HTTP 429 / gRPC ResourceExhausted.

Changing these values requires editing /etc/icm/icm.yml and restarting the ICM service.