Skip to main content

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:

RolePurposeRecommended spec
Primary nodeCluster control plane and ingress entry pointRuns only Kubernetes system workloads for stability
Infrastructure nodeDatabases, Kafka, Redisx86 architecture required for some database images
Main workload nodes (3)OpenLM Platform microservicesARM or x86
Reporting nodes (3)Spark workloads and Apache SupersetARM or x86
Note

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.

Note

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:

  1. Configure values.yaml with your storage class name and storage sizes.

  2. If you want infrastructure pods on the infrastructure node, add node selectors.

  3. 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:

  1. Complete the Prerequisites checklist.
  2. 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.