> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tensormesh.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Install with Helm

> Install the Tensormesh Operator from the official Helm chart.

Helm is the primary install path for the Tensormesh Operator. A single `helm install`
command deploys the operator, registers its CRDs (`LMCacheEngine`, `LMCacheCoordinator`,
`CacheBlendEngine`), and by default creates an lmcache engine CR that the operator reconciles into
a DaemonSet on your GPU nodes, plus a fleet coordinator the engines register with.

## Prerequisites

* Helm `3.8` or newer (`helm version`)
* Cluster access with permission to create cluster-scoped resources
* A reachable Kubernetes 1.28+ cluster — see [Getting Started](/installation/getting-started)
* [cert-manager](https://cert-manager.io/docs/installation/) — the chart enables the
  mutating webhook by default and cert-manager issues its serving certificate:
  ```bash theme={null}
  kubectl apply -f https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.yaml
  kubectl -n cert-manager wait --for=condition=Available deploy --all --timeout=180s
  ```
* **Access token from the Tensormesh team**

<Note>
  The chart is distributed through a private registry. To install it, request an access
  token from [https://www.tensormesh.ai/contact](https://www.tensormesh.ai/contact). You'll use it to authenticate before installing.
</Note>

## Quick Install

Authenticate to the registry with the token Tensormesh provided, write your
configuration into `my-values.yaml`, and install:

```yaml my-values.yaml theme={null}
engine:
  enabled: true
  spec:
    privileged: true                 # required for GPU visibility in some cluster 
    l1:
      sizeGB: 200                     # per-node L1 cache size
    image:
      repository: lmcache/vllm-openai
      tag: v0.5.3                    # pin the tag the Compatibility Matrix pairs with your chart
      pullPolicy: IfNotPresent

coordinator:
  spec:
    image:
      repository: lmcache/vllm-openai
      tag: v0.5.3                    # Same image as engine
      pullPolicy: IfNotPresent
```

```bash theme={null}
# One-time: log in with the token Tensormesh gave you. When authenticating with a token,
# the username is not validated — any non-empty value works (we use "tensormesh" here).
echo '<TOKEN_FROM_TENSORMESH>' | helm registry login ghcr.io -u tensormesh --password-stdin

helm install tensormesh-operator \
  oci://ghcr.io/tensormesh-production/charts/tensormesh-operator \
  --version 0.5.3 \
  --namespace tensormesh-operator \
  --create-namespace \
  -f my-values.yaml \
  --wait
```

<Note>
  **If install fails, jump to [Troubleshooting](/installation/troubleshooting).**
</Note>

## Verify

<Steps>
  <Step title="The release exists">
    ```bash theme={null}
    helm list -n tensormesh-operator
    ```

    Example:

    ```text theme={null}
    NAME                  NAMESPACE             REVISION  UPDATED                   STATUS    CHART                      APP VERSION
    tensormesh-operator   tensormesh-operator   1         2026-08-12 02:05:00 UTC   deployed  tensormesh-operator-0.5.2  v0.5.2
    ```

    `STATUS` should be `deployed`.
  </Step>

  <Step title="The operator and coordinator pods are Running">
    ```bash theme={null}
    kubectl get pods -n tensormesh-operator
    ```

    Example:

    ```text theme={null}
    NAME                                              READY   STATUS    RESTARTS   AGE
    tensormesh-operator-5f47f76bd6-bzmqf              1/1     Running   0          2m
    tensormesh-operator-coordinator-7c6446f7c8-zc7g7  1/1     Running   0          2m
    ```
  </Step>

  <Step title="The CRD is registered">
    ```bash theme={null}
    kubectl get crd | grep lmcache.ai
    ```

    Example:

    ```text theme={null}
    cacheblendengines.lmcache.lmcache.ai    2026-08-12T02:04:10Z
    lmcachecoordinators.lmcache.lmcache.ai  2026-08-12T02:04:10Z
    lmcacheengines.lmcache.lmcache.ai       2026-08-12T02:04:10Z
    ```

    The chart ships all three CRDs (`crds.enabled=true`).
  </Step>

  <Step title="An engine CR exists and is being reconciled">
    ```bash theme={null}
    kubectl get lmcacheengines -n tensormesh-operator
    ```

    Example:

    ```text theme={null}
    NAME                                PHASE     READY   DESIRED   AGE
    tensormesh-operator-default-engine  Running   1       1         2m
    ```
  </Step>

  <Step title="The engine DaemonSet landed on your GPU nodes">
    ```bash theme={null}
    # select by the engine CR's name (instance label) — the component label
    # (cache-engine) also matches CacheBlend engine pods when those are enabled
    kubectl get pods -n tensormesh-operator -o wide \
      -l app.kubernetes.io/instance=tensormesh-operator-default-engine
    ```

    Example:

    ```text theme={null}
    NAME                                      READY   STATUS    RESTARTS   AGE   IP            NODE
    tensormesh-operator-default-engine-gfj2k  1/1     Running   0          2m    10.129.6.79   worker-gpu-a100-1
    ```

    Expect one pod per GPU node. On a cluster with no GPU nodes this list is empty — which
    is correct, not a failure.
  </Step>

  <Step title="Run the bundled smoke tests">
    ```bash theme={null}
    helm test tensormesh-operator -n tensormesh-operator
    ```

    Example:

    ```text theme={null}
    NAME: tensormesh-operator
    LAST DEPLOYED: Sat May 24 02:05:00 2026
    NAMESPACE: tensormesh-operator
    STATUS: deployed
    TEST SUITE:     tensormesh-operator-test-basic
    Last Started:   2026-05-24 02:08:00 +0000 UTC
    Last Completed: 2026-05-24 02:08:20 +0000 UTC
    Phase:          Succeeded
    ```
  </Step>
</Steps>

## Upgrade

```bash theme={null}
helm upgrade tensormesh-operator \
  oci://ghcr.io/tensormesh-production/charts/tensormesh-operator \
  --version 0.5.3 -n tensormesh-operator \
  -f my-values.yaml
```

Roll back if needed:

```bash theme={null}
helm history tensormesh-operator -n tensormesh-operator
helm rollback tensormesh-operator <revision> -n tensormesh-operator
```

## Uninstall

```bash theme={null}
helm uninstall tensormesh-operator -n tensormesh-operator
```

A pre-delete hook removes the chart-managed CRs (`LMCacheEngine`, `LMCacheCoordinator`,
and `CacheBlendEngine` if enabled) first, so their finalizers run cleanly before the
operator Deployment is torn down.

<Warning>
  **The CRDs survive `helm uninstall`** — same convention cert-manager and
  kube-prometheus-stack use. To remove them (and cascade-delete any remaining CRs):

  ```bash theme={null}
  kubectl delete crd lmcacheengines.lmcache.lmcache.ai \
    lmcachecoordinators.lmcache.lmcache.ai \
    cacheblendengines.lmcache.lmcache.ai
  ```
</Warning>

## Helm Values

| Key                     | Default | What it creates                                                                                                                                                                                                                 |
| ----------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `crds.enabled`          | `true`  | The three CRD schemas                                                                                                                                                                                                           |
| `operator.enabled`      | `true`  | The controller-manager Deployment                                                                                                                                                                                               |
| `engine.enabled`        | `true`  | An `LMCacheEngine` CR, which the operator reconciles into a DaemonSet (one cache server per GPU node)                                                                                                                           |
| `coordinator.enabled`   | `true`  | An `LMCacheCoordinator` CR — one fleet-wide Deployment the engines register with                                                                                                                                                |
| `webhook.enabled`       | `true`  | The **CacheBlend** pod-mutating webhook. **Requires cert-manager**; rendering fails fast without it. The chart does not register the LMCache connection webhook — wire those pods [manually](/installation/existing-deployment) |
| `cacheBlend.enabled`    | `false` | A `CacheBlendEngine` CR — see [CacheBlend](/configuration/cacheblend). Requires `webhook.enabled=true`                                                                                                                          |
| `observability.enabled` | `false` | An OpenTelemetry Collector CR. Requires the OpenTelemetry Operator already installed                                                                                                                                            |
| `openshift.enabled`     | `false` | The privileged SCC binding the engine's `hostIPC` needs                                                                                                                                                                         |
| `tests.enabled`         | `true`  | The `helm test` smoke-test pods                                                                                                                                                                                                 |

### See every value

The table above is the common subset. For the full list with defaults:

```bash theme={null}
helm show values \
  oci://ghcr.io/tensormesh-production/charts/tensormesh-operator --version 0.5.3
```

See the [Configuration reference](/reference/configuration) for per-section detail
and example overlays.

## Next steps

<CardGroup cols={2}>
  <Card title="vLLM Quick Start" icon="flask" href="/installation/example">
    Install, deploy vLLM against the engine, see the cache hit, run the benchmark.
  </Card>

  <Card title="Modify Existing vLLM Deployment" icon="wrench" href="/installation/existing-deployment">
    Patch the workload you already run to consume the engine connection ConfigMap.
  </Card>

  <Card title="Troubleshooting" icon="stethoscope" href="/installation/troubleshooting">
    Engine `Pending`, `ImagePullBackOff`, hung uninstalls, and more.
  </Card>
</CardGroup>
