---
title: "How to run MapTiler Server in Kubernetes | Guides | Self hosting | Map server"
description: "Deploy MapTiler Server in Kubernetes using a Helm chart."
---

> For AI agents: a documentation index is available at [/llms.txt](https://docs.maptiler.com/llms.txt). Markdown versions of all pages are available by appending .md to any URL.

# Run MapTiler Server in Kubernetes

This page provides instructions on how to run MapTiler Server in Kubernetes using our pre-configured Helm chart.

## Prerequisites

-   Running Kubernetes cluster with at least 1 node.
-   Running [Ingress controller](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/).
-   [Helm](https://helm.sh) installed.

## Steps

1.  Install the MapTiler Server Helm chart:
    
    ```bash
    helm repo add maptiler https://labs.maptiler.com/maptiler-server-kubernetes/
    ```
    
2.  Deploy MapTiler Server on the Kubernetes cluster in the default configuration:
    
    ```bash
    helm install maptiler-server-app maptiler/maptiler-server
    ```
    

Complete documentation of the MapTiler Server Helm chart is available at [Artifact Hub](https://artifacthub.io/packages/helm/maptiler/maptiler-server).

## Sample configurations

### nginx Ingress controller

Here’s a sample nginx [Ingress controller](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) that you can use in the **values.yaml** file included in the Helm chart.

-   To use [custom max body size](https://github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/nginx-configuration/annotations.md#custom-max-body-size) for nginx requests, define the `nginx.ingress.kubernetes.io/proxy-body-size` annotation.
-   If you want to use TLS, you need to [create a Kubernetes TLS secret](https://kubernetes.io/docs/reference/kubectl/generated/kubectl_create/kubectl_create_secret_tls/) named **maptiler-server-tls** first.

```yaml
ingress:  
  enabled: true  
  className: nginx  
  annotations:  
    nginx.ingress.kubernetes.io/proxy-body-size: 300m  
  hosts:  
    - host: maps.company.com  
      paths:  
        - path: /  
          pathType: Prefix  
  tls:  
    - secretName: maptiler-server-tls  
      hosts:  
        - maps.company.com
```

### Shared storage

If you plan to run multiple replicas of MapTiler Server with shared tileset data and configuration, you need to make sure that each replica can access the same [Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) where the data and config is stored. To do that, configure the Persistent Volume Claim to use a [Storage Class](https://kubernetes.io/docs/concepts/storage/storage-classes/) which supports the [ReadWriteMany](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) access mode. Alternatively, you can set up an NFS storage.

Here’s a sample Persistent Volume configuration for the **values.yaml** file:

```yaml
storage:  
  storageClassName: csi-cinder-classic  
  size: 20Gi  
  
volumes:  
  - name: maptiler-server-data  
    persistentVolumeClaim:  
      claimName: maptiler-server-app  
  
volumeMounts:  
  - mountPath: /data/  
    name: maptiler-server-data
```
