# Enable Resource Pools

[Resource pools](/pro/core-concepts/resource-pools.md) let you model shared capacity (GPUs, custom keys, and related limits) for dynamic pipelines. Keeping pool state consistent uses a background **reconciler** process in ZenML Pro.

On **Kubernetes** self-hosted deployments, you enable that process by adding a microservice (the resource pool reconciler) that runs `plugins start-resource-pool-reconciler` (same image as the workspace server).

{% hint style="warning" %}
**Commercial add-on:** Resource pools are not included in the base ZenML Pro plan. Your organization must purchase and enable them explicitly. See the [pricing page](https://www.zenml.io/pricing) for plans and contact ZenML if you need entitlements enabled for your license.
{% endhint %}

{% hint style="warning" %}
Deploy this microservice only for workspace servers installed with the ZenML Helm chart on Kubernetes. Other platforms (for example AWS ECS) are not covered here.
{% endhint %}

## Prerequisites

* Resource pools apply to [dynamic pipelines](https://docs.zenml.io/how-to/steps-pipelines/dynamic_pipelines). Ensure your teams understand that contract before enabling the reconciler.
* Enough cluster resources for one extra microservice (see the example `resources` below).

## What to configure in Helm

The ZenML Helm chart deploys optional background processes as additional microservices, each declared under the `workerDeployments` key in your workspace `values.yaml`. Each map entry becomes its own Kubernetes Deployment.

Add the **resource pool reconciler** under `workerDeployments` next to your existing `server:` configuration. That microservice uses the same container image as the ZenML Pro server by default and overrides the entrypoint to run the reconciler.

Set SQLAlchemy pool sizes appropriate for a dedicated pod. The example below is a reasonable starting point; adjust `resources` and probes for your environment.

{% hint style="warning" %}
The **resource pool reconciler** microservice must always run as a **single replica** with a **`Recreate`** rollout strategy. Do not scale it horizontally or switch to `RollingUpdate`; multiple reconciler pods or overlapping rollouts can corrupt or confuse pool reconciliation.
{% endhint %}

```yaml
workerDeployments:
  resource-pool-reconciler:
    enabled: true
    replicaCount: 1
    command: ["plugins"]
    args: ["start-resource-pool-reconciler"]
    strategy:
      type: Recreate
    resources:
      requests:
        cpu: 100m
        memory: 256Mi
      limits:
        cpu: 500m
        memory: 512Mi
    environment:
      ZENML_STORE_POOL_SIZE: "1"
      ZENML_STORE_MAX_OVERFLOW: "1"
    livenessProbe:
      httpGet:
        path: /health
        port: 8000
      initialDelaySeconds: 30
      periodSeconds: 60
      timeoutSeconds: 2
      failureThreshold: 3
    readinessProbe:
      httpGet:
        path: /health
        port: 8000
      initialDelaySeconds: 10
      periodSeconds: 30
      timeoutSeconds: 2
      failureThreshold: 3
```

### Environment variables (reference)

| Variable                   | Purpose                                                    |
| -------------------------- | ---------------------------------------------------------- |
| `ZENML_STORE_POOL_SIZE`    | SQLAlchemy pool size for store access in this microservice |
| `ZENML_STORE_MAX_OVERFLOW` | SQLAlchemy max overflow for the store connection pool      |

## Apply the change

After updating your values file, upgrade the release (adjust release name and namespace as you use them):

```bash
helm upgrade zenml oci://public.ecr.aws/zenml/zenml \
  --namespace zenml-workspace \
  --values zenml-workspace-values.yaml
```

## Related resources

* [Resource pools](/pro/core-concepts/resource-pools.md) — product overview and concepts
* [Resource pools — Core concepts](/pro/core-concepts/resource-pools/resource-pools-core-concepts.md)
* [Self-hosted Deployment on Kubernetes with Helm](/pro/deployments/deploy-details/workspace-server/deploy-workspace-k8s.md)
* [Helm chart on Artifact Hub](https://artifacthub.io/packages/helm/zenml/zenml)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.zenml.io/pro/deployments/deploy-details/workspace-server/deploy-workspace-resource-pools.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
