# VespaSet CRD

[](/en/operations/kubernetes/reference/vespaset-crd.html.md "View as Markdown") 

The `VespaSet` is the Custom Resource Definition (CRD) used to declare a Vespa deployment on Kubernetes. The Vespa Kubernetes Operator watches `VespaSet` resources and reconciles the cluster state to match the declared specification. This page is a reference for the fields available under `spec`.

Pod-level customization is done through `podTemplate` overrides, which accept a standard Kubernetes [`PodTemplateSpec`](https://kubernetes.io/docs/reference/kubernetes-api/core/pod-template-v1/#PodTemplateSpec). For the full details on override targets and merge policies, see [Configure Custom Overrides](/en/operations/kubernetes/configuration/custom-overrides-podtemplate.html).

```
apiVersion: k8s.ai.vespa/v1
kind: VespaSet
metadata:
  name: my-vespa-cluster
  namespace: vespa
spec:
  version: 8.752.24
  configServer:
    image: "images.example.com/vespa/configserver"
    storageClass: "standard"
    generateRbac: true
  application:
    image: "images.example.com/vespa/application"
  ingress:
    endpointType: "LOAD_BALANCER"
  profiles:
    default:
      storageClass: "local-storage"
```

## version

| Type | Required |
| --- | --- |
| string | No |

The Vespa version to deploy, e.g. `8.752.24`. The version is used as the image tag for the images provided in [`configServer.image`](#configserver) and [`application.image`](#application) — e.g. an image of `images.example.com/vespa/configserver` with version `8.752.24` resolves to `images.example.com/vespa/configserver:8.752.24`. Changing this field triggers a rolling upgrade of the deployment — see [Upgrade Vespa on Kubernetes](/en/operations/kubernetes/operations/upgrades.html).

## configServer

Configuration that applies to the ConfigServer pods.

| Field | Type | Description |
| --- | --- | --- |
| `image` | string | The container image to use for ConfigServer pods. The [`version`](#version) field is appended as the image tag. |
| `storageClass` | string | A string matching the name of a [StorageClass](https://kubernetes.io/docs/concepts/storage/storage-classes/) resource in your cluster, used for the ConfigServer persistent volumes. Storage performance is less critical for ConfigServers, so a cost-efficient network-attached storage class is generally an appropriate tradeoff — see [Configure Local Storage Type](/en/operations/kubernetes/configuration/configure-local-storage-type.html). |
| `serviceAccount` | string | The name of an existing Kubernetes ServiceAccount to run the ConfigServer pods as. Use this when RBAC resources are managed externally instead of by the operator. |
| `generateRbac` | boolean | When `true`, the operator automatically generates the RBAC resources (ServiceAccount, Role, and RoleBinding) required by the ConfigServer pods — see [Permissions](/en/operations/kubernetes/deployment/permissions.html). |

## application

Configuration that applies to the application (container and content) pods.

| Field | Type | Description |
| --- | --- | --- |
| `image` | string | The container image to use for application pods. The [`version`](#version) field is appended as the image tag. |
| `storageClass` | string | A string matching the name of a [StorageClass](https://kubernetes.io/docs/concepts/storage/storage-classes/) resource in your cluster, used for the persistent volumes of the application pods. If a cluster names a profile, the profile's `storageClass` takes precedence. For content clusters, we recommend node-local storage to maximize performance — see [Configure Local Storage Type](/en/operations/kubernetes/configuration/configure-local-storage-type.html). |
| `podTemplate` | object | A standard Kubernetes [`PodTemplateSpec`](https://kubernetes.io/docs/reference/kubernetes-api/core/pod-template-v1/#PodTemplateSpec) overlay applied to application pods by default. If a cluster names a profile, the [`profiles`](#profiles) `podTemplate` takes precedence for the pods of that cluster — see [Configure Custom Overrides](/en/operations/kubernetes/configuration/custom-overrides-podtemplate.html). |

## ingress

Configuration for the external access layer — see [Configure External Access Layer](/en/operations/kubernetes/configuration/ingress.html).

| Field | Type | Description |
| --- | --- | --- |
| `endpointType` | string | The type of Kubernetes Service endpoint to expose for Vespa traffic. One of: 
- `NONE` — no load balancer endpoint is created.
- `CLUSTER_IP` — a `ClusterIP` Service, reachable only from within the cluster.
- `LOAD_BALANCER` — a `LoadBalancer` Service, provisioning an external load balancer.

 |

## profiles

A map of profile names to per-cluster configuration. A profile maps a cluster `id` as defined in [`services.xml`](https://docs.vespa.ai/en/reference/applications/services/services.html) to configuration for the pods of that Vespa cluster, allowing different settings for different cluster types within the same `VespaSet`. An arbitrary number of profiles can be defined — see [Configure Custom Overrides](/en/operations/kubernetes/configuration/custom-overrides-podtemplate.html).

| Field | Type | Description |
| --- | --- | --- |
| `<name>.storageClass` | string | A string matching the name of a [StorageClass](https://kubernetes.io/docs/concepts/storage/storage-classes/) resource in your cluster, used for the persistent volumes of the pods in this profile. For content clusters, we recommend node-local storage to maximize performance — see [Configure Local Storage Type](/en/operations/kubernetes/configuration/configure-local-storage-type.html). |
| `<name>.podTemplate` | object | A standard Kubernetes [`PodTemplateSpec`](https://kubernetes.io/docs/reference/kubernetes-api/core/pod-template-v1/#PodTemplateSpec) overlay applied to the pods in this profile — see [Configure Custom Overrides](/en/operations/kubernetes/configuration/custom-overrides-podtemplate.html). |

```
spec:
  profiles:
    default:
      storageClass: "standard"
    music:
      storageClass: "local-storage"
```

 Copyright © 2026 - [Cookie Preferences](#)

### On this page:

- [VespaSet CRD](#page-title)
- [version](#version)
- [configServer](#configserver)
- [application](#application)
- [ingress](#ingress)
- [profiles](#profiles)

