Environment setup
This page covers machine provisioning, Kubernetes installation, cluster configuration, and infrastructure service deployment for the on-premise machines path.
If your infrastructure team has already prepared the Kubernetes cluster and infrastructure services, skip to Prerequisites to validate readiness, then proceed to Platform installation.
Machine preparation
Provision machines according to the Requirements. Plan for the following node roles:
| Role | Purpose | Recommended spec |
|---|---|---|
| Primary node | Cluster control plane and ingress entry point | Runs only Kubernetes system workloads for stability |
| Infrastructure node | Databases, Kafka, Redis | x86 architecture required for some database images |
| Main workload nodes (3) | OpenLM Platform microservices | ARM or x86 |
| Reporting nodes (3) | Spark workloads and Apache Superset | ARM or x86 |
ARM and x86 architectures can be mixed in the same cluster. The infrastructure node should be x86 to ensure compatibility with all database container images.
Network setup
Each machine needs:
- A private IP address for intra-cluster communication (no restrictions on the private network)
- Optionally, a public IP address for administration (restrict to SSH port 22 only)
- HTTP ports 80 and 443 open on the primary node for ingress traffic
- Kubernetes API access over the network for cluster management
Kubernetes installation
Any CNCF-conformant distribution works. The example below uses K3s, which installs natively on the RHEL-family operating systems this path recommends. Other distributions (kubeadm, RKE2, MicroK8s) follow the same overall pattern: install a control plane, then join the remaining nodes.
Commands in this section use the RHEL-family tooling that matches the AlmaLinux 9 / RHEL 9 / Rocky Linux 9 requirement on the Requirements page. Debian-family distributions and their apt/snap tooling are outside the supported set for this platform.
Install the control plane
On the primary node:
curl -sfL https://get.k3s.io | sh -s - server \
--node-ip=<PRIVATE_IP> \
--advertise-address=<PRIVATE_IP>
Retrieve the join token – you need it for every other node:
sudo cat /var/lib/rancher/k3s/server/node-token
Join the remaining nodes
Run this on each infrastructure, main workload, and reporting node:
curl -sfL https://get.k3s.io | K3S_URL=https://<PRIMARY_PRIVATE_IP>:6443 \
K3S_TOKEN=<TOKEN> sh -s - agent --node-ip=<PRIVATE_IP>
Verify the cluster
From the primary node:
sudo k3s kubectl get nodes
Every node should report Ready. To use a standard kubectl from your workstation, copy /etc/rancher/k3s/k3s.yaml off the primary node and replace 127.0.0.1 in it with the node's reachable IP address.
Cluster topology and node labels
Apply labels to nodes so that workloads are scheduled to the correct machines using affinity rules:
kubectl label node <infra-node> openlm.com/role=infrastructure-workload
kubectl label node <worker-node-1> openlm.com/role=main-workload
kubectl label node <worker-node-2> openlm.com/role=main-workload
kubectl label node <worker-node-3> openlm.com/role=main-workload
kubectl label node <report-node-1> openlm.com/role=reporting-workload
kubectl label node <report-node-2> openlm.com/role=reporting-workload
kubectl label node <report-node-3> openlm.com/role=reporting-workload
Verify labels:
kubectl get nodes --show-labels
Infrastructure installation
After all nodes are connected, deploy the infrastructure services into a dedicated namespace:
kubectl create namespace openlm-infrastructure
Deploy services
The infrastructure services (MongoDB, MariaDB/PostgreSQL, Kafka, Redis) are deployed using Helm charts included in the deployment package.
For each service:
- Configure
values.yamlwith your storage class name and storage sizes - If needed, add node selectors to schedule infrastructure pods to the infrastructure node
- Install using Helm:
helm install <release-name> <chart>.tgz -f values.yaml -n openlm-infrastructure
Verify infrastructure
Confirm all infrastructure pods are running:
kubectl get pods -n openlm-infrastructure
Verify connectivity to each service (MongoDB, SQL database, Kafka, Redis) before proceeding.
Next steps
Once your cluster is running and infrastructure services are healthy:
- Complete the Prerequisites checklist
- Proceed to Platform installation