Environment setup
To prepare machines for OpenLM Platform, provision them, install Kubernetes, label the nodes, and deploy the infrastructure services.
If your infrastructure team has already prepared the Kubernetes cluster and infrastructure services, skip to Prerequisites to validate readiness, then proceed to Platform installation.
Prepare the machines
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. Use an x86 infrastructure node so that all database container images run.
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
Install Kubernetes
Any Cloud Native Computing Foundation (CNCF) conformant distribution works. The following example uses K3s, which installs natively on the Red Hat Enterprise Linux (RHEL) family of operating systems that 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, run this command:
curl -sfL https://get.k3s.io | sh -s - server \
--node-ip=<private-ip> \
--advertise-address=<private-ip>
Replace <private-ip> with the private IP address of the node.
Get 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>
Replace <primary-private-ip> with the private IP address of the primary node, <token> with the join token, and <private-ip> with the private IP address of the node you join.
Verify the cluster
From the primary node, run this command:
sudo k3s kubectl get nodes
Every node reports 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.
Label the nodes
Apply labels to nodes so that workloads are scheduled to the correct machines using affinity rules. The OpenLM Platform chart expects openlm.com/role=main on the main workload nodes and openlm.com/role=spark on the reporting nodes. The infrastructure label is for the node selectors of your infrastructure charts:
kubectl label node <infra-node> openlm.com/role=infrastructure-workload
kubectl label node <worker-node-1> openlm.com/role=main
kubectl label node <worker-node-2> openlm.com/role=main
kubectl label node <worker-node-3> openlm.com/role=main
kubectl label node <report-node-1> openlm.com/role=spark
kubectl label node <report-node-2> openlm.com/role=spark
kubectl label node <report-node-3> openlm.com/role=spark
Verify the labels:
kubectl get nodes --show-labels
Install the infrastructure services
After all nodes are connected, deploy the infrastructure services into a dedicated namespace:
kubectl create namespace openlm-infrastructure
Deploy services
Deploy the infrastructure services (MongoDB, MariaDB/PostgreSQL, Kafka, Redis) with the Helm charts included in the deployment package.
For each service:
-
Configure
values.yamlwith your storage class name and storage sizes. -
If you want infrastructure pods on the infrastructure node, add node selectors.
-
Install the service with Helm:
helm install <release-name> <chart>.tgz -f values.yaml -n openlm-infrastructure
Verify the infrastructure services
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
After your cluster is running and the infrastructure services are healthy:
- Complete the Prerequisites checklist.
- Proceed to Platform installation.
The documentation team might draft this page using a large language model. A technical writer reviews every page and verifies it against the product before publishing it. A human makes the final decision.