---
title: "Step 6: Install OpenLM Platform"
description: Install the OpenLM Platform Helm release, openlm-platform, and follow it until every pod is running.
product: OpenLM Platform
---

Install the `openlm-platform` Helm release, then follow the pods until every one is running. Load the variables from `openlm-install.env`, the file you created from the [installation worksheet](https://www.openlm.com/documentation/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/before-you-start/worksheet):

```bash
source ./openlm-install.env
```

## 6.1 Install the release

Install the release with Helm:

```bash
helm upgrade --install openlm-platform openlm/openlm-platform \
  --version "$OPENLM_VERSION" -n "$NS" -f openlm-values.yaml --timeout 60m
```

:::note[OpenShift]
On OpenShift, add your second values file: `-f openlm-values.yaml -f openlm-values-openshift.yaml`. After the command finishes, follow the [Route steps](https://www.openlm.com/documentation/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/platforms/openshift#routes).
:::

The command returns when the chart's **topic setup job** finishes. That job creates or checks each of OpenLM Platform's Kafka topics, one after the other, and takes 10 to 30 minutes, so the command looks idle for a while. This is expected. Don't press Ctrl+C. The job runs again on **every upgrade**, even when no topic changes, so always keep `--timeout 60m` and plan the time into upgrade windows.

:::note[Pre-release versions]
A version such as `1.0.0-rc.4` is a pre-release. `helm search repo openlm` lists it only when you add `--devel`, but installing it with `--version` works as shown.
:::

## 6.2 Follow the progress

To follow the progress, watch the pods in a second terminal:

```bash
kubectl -n openlm get pods -w
```

The pods go through these stages, in order:

1. **Pods appear and start** (first few minutes). Many go through `ContainerCreating` while images download.
2. **`openlm-identity` takes longest to become ready**, up to 15 minutes on the first start, because it creates its database tables. Other services might restart a few times while they wait for it. This is expected.
3. **`openlm-usersandgroupsservice`** also has a long first start. Let it run.
4. **The topic setup job** (`kafkainitpod`) runs and then shows `Completed`.

## 6.3 Check that the installation finished

The installation has finished when the following command prints **nothing**, and every `Running` pod shows all containers ready (`1/1`):

```bash
kubectl -n "$NS" get pods --no-headers | grep -vE "Running|Completed"
```

On a cluster that pulls every image for the first time, plan 20 to 40 minutes.

## Fix pods that don't become ready

If a pod stays in an error or waiting status, find its status in the following table:

| Pod status | Most likely cause | Where to look |
|---|---|---|
| `Pending` for more than 5 minutes | No node fits: not enough capacity, or node placement is on but nodes aren't labeled | `kubectl -n $NS describe pod <pod>`, last lines. [Node placement](https://www.openlm.com/documentation/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/concepts/node-placement) |
| `ImagePullBackOff` | Nodes can't reach `public.ecr.aws`, or your mirror lacks the image | [Networking: registry](https://www.openlm.com/documentation/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/concepts/networking#registry-mirror) |
| `CreateContainerConfigError` | A secret is missing | Run step 3 again |
| `CrashLoopBackOff` on many pods | A data service is unreachable or a credential is wrong | `kubectl -n $NS logs <pod> --previous` |
| `CrashLoopBackOff` with `IdentityUnavailable` or `SSL` in the log | Pods can't reach or don't trust `https://$DOMAIN/identity` | [Sign-in and identity](https://www.openlm.com/documentation/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/concepts/identity-and-sign-in) |
| `helm` stops with `timed out waiting for the condition` | The topic setup job didn't finish in time, usually because Kafka is slow or unreachable | `kubectl -n $NS logs job/kafka-init-pod`, then run the same `helm upgrade --install` again with `--timeout 60m`. It continues, and the topics already created stay. |

For more problems and fixes, see [Troubleshooting](https://www.openlm.com/documentation/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/reference/troubleshooting).

:::tip[Check]
Check the release status:

```bash
helm -n "$NS" status openlm-platform | grep STATUS
```

The output must say `STATUS: deployed`, and the pod check in [6.3](#63-check-that-the-installation-finished) must print nothing.
:::
