# Helm Chart Reference

The Kubetail Helm chart deploys the full Kubetail stack into a Kubernetes cluster. It is published our helm chart repository located at [https://kubetail-org.github.io/helm-charts/](https://kubetail-org.github.io/helm-charts/) and the source code is located in the [kubetail-org/helm-charts](https://github.com/kubetail-org/helm-charts) repo under `charts/kubetail`.

The chart deploys four components:

| Component | Kind | Description |
|-----------|------|-------------|
| Dashboard | Deployment | Web UI and backend API |
| Cluster API | Deployment | GraphQL API for cluster operations |
| Cluster Agent | DaemonSet | Per-node agent that reads container log files |

## Install

Add the `kubetail` Helm repository:

```sh
helm repo add kubetail https://kubetail-org.github.io/helm-charts/
```

Install the chart into a dedicated namespace:

```sh
helm install kubetail kubetail/kubetail --namespace kubetail-system --create-namespace
```

By default, the chart autogenerates required secrets (`KUBETAIL_DASHBOARD_SESSION_SECRET`) and stores them in a Kubernetes Secret so they are preserved across upgrades.

## Upgrade

Pull the latest chart index, then upgrade the release:

```sh
helm repo update kubetail
helm upgrade kubetail kubetail/kubetail --namespace kubetail-system
```

## Uninstall

```sh
helm uninstall kubetail --namespace kubetail-system
```

## Values

### Chart

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `fullnameOverride` | string | `null` | Override the chart's computed fullname |
| `nameOverride` | string | `null` | Override the chart's name |
| `namespaceOverride` | string | `null` | Override the release's namespace |

### General

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `kubetail.allowedNamespaces` | array | `[]` | Restrict all components to these namespaces |
| `kubetail.secrets.KUBETAIL_DASHBOARD_SESSION_SECRET` | string | `null` | Base64-encoded dashboard session secret (autogenerated if null) |
| `kubetail.global.annotations` | map | `{}` | Extra annotations added to all resources |
| `kubetail.global.labels` | map | `{}` | Extra labels added to all resources |

### Dashboard

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `kubetail.dashboard.enabled` | bool | `true` | Enable or disable the Dashboard component |
| `kubetail.dashboard.authMode` | string | `"auto"` | Auth mode (`auto`, `token`) |
| `kubetail.dashboard.runtimeConfig` | map | *see values.yaml* | Dashboard runtime configuration (see [Dashboard reference](/reference/dashboard)) |
| `kubetail.dashboard.image.registry` | string | `"ghcr.io"` | Image registry |
| `kubetail.dashboard.image.repository` | string | `"kubetail-org/kubetail-dashboard"` | Image repository |
| `kubetail.dashboard.image.tag` | string | *see values.yaml* | Image tag |
| `kubetail.dashboard.image.digest` | string | `null` | Override image tag with a digest |
| `kubetail.dashboard.image.pullPolicy` | string | `"IfNotPresent"` | Image pull policy |
| `kubetail.dashboard.container.name` | string | `"kubetail-dashboard"` | Container name |
| `kubetail.dashboard.container.extraEnv` | array | `[]` | Additional environment variables |
| `kubetail.dashboard.container.extraEnvFrom` | array | `[]` | Additional envFrom sources |
| `kubetail.dashboard.container.securityContext` | map | *see values.yaml* | Container security context |
| `kubetail.dashboard.container.resources` | map | `{}` | CPU/memory resource requests and limits |
| `kubetail.dashboard.podTemplate.annotations` | map | `{}` | Additional pod annotations |
| `kubetail.dashboard.podTemplate.labels` | map | `{}` | Additional pod labels |
| `kubetail.dashboard.podTemplate.extraContainers` | array | `[]` | Additional sidecar containers |
| `kubetail.dashboard.podTemplate.securityContext` | map | `{}` | Pod security context |
| `kubetail.dashboard.podTemplate.affinity` | map | `{}` | Pod affinity rules |
| `kubetail.dashboard.podTemplate.nodeSelector` | map | `{}` | Node selector |
| `kubetail.dashboard.podTemplate.tolerations` | array | `[]` | Pod tolerations |
| `kubetail.dashboard.configMap.name` | string | `null` | Override ConfigMap name |
| `kubetail.dashboard.configMap.annotations` | map | `{}` | Additional ConfigMap annotations |
| `kubetail.dashboard.configMap.labels` | map | `{}` | Additional ConfigMap labels |
| `kubetail.dashboard.deployment.name` | string | `null` | Override Deployment name |
| `kubetail.dashboard.deployment.annotations` | map | `{}` | Additional Deployment annotations |
| `kubetail.dashboard.deployment.labels` | map | `{}` | Additional Deployment labels |
| `kubetail.dashboard.deployment.replicas` | int | `1` | Number of replicas |
| `kubetail.dashboard.deployment.revisionHistoryLimit` | int | `5` | Revision history limit |
| `kubetail.dashboard.deployment.strategy` | map | `{type: RollingUpdate}` | Deployment update strategy |
| `kubetail.dashboard.ingress.enabled` | bool | `false` | Create an Ingress resource |
| `kubetail.dashboard.ingress.name` | string | `null` | Override Ingress name |
| `kubetail.dashboard.ingress.annotations` | map | `{}` | Additional Ingress annotations |
| `kubetail.dashboard.ingress.labels` | map | `{}` | Additional Ingress labels |
| `kubetail.dashboard.ingress.rules` | array | `[]` | Ingress rules |
| `kubetail.dashboard.ingress.tls` | array | `[]` | Ingress TLS configuration |
| `kubetail.dashboard.ingress.className` | string | `null` | Ingress class name |
| `kubetail.dashboard.rbac.name` | string | `null` | Override RBAC resource names |
| `kubetail.dashboard.rbac.annotations` | map | `{}` | Additional RBAC annotations |
| `kubetail.dashboard.rbac.labels` | map | `{}` | Additional RBAC labels |
| `kubetail.dashboard.secret.enabled` | bool | `true` | Create a Secret resource |
| `kubetail.dashboard.secret.name` | string | `null` | Override Secret name |
| `kubetail.dashboard.secret.annotations` | map | `{}` | Additional Secret annotations |
| `kubetail.dashboard.secret.labels` | map | `{}` | Additional Secret labels |
| `kubetail.dashboard.service.name` | string | `null` | Override Service name |
| `kubetail.dashboard.service.annotations` | map | `{}` | Additional Service annotations |
| `kubetail.dashboard.service.labels` | map | `{}` | Additional Service labels |
| `kubetail.dashboard.service.ports.http` | int | `8080` | Service HTTP port |
| `kubetail.dashboard.serviceAccount.name` | string | `null` | Override ServiceAccount name |
| `kubetail.dashboard.serviceAccount.annotations` | map | `{}` | Additional ServiceAccount annotations |
| `kubetail.dashboard.serviceAccount.labels` | map | `{}` | Additional ServiceAccount labels |

### Cluster API

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `kubetail.clusterAPI.enabled` | bool | `true` | Enable or disable the Cluster API component |
| `kubetail.clusterAPI.runtimeConfig` | map | *see values.yaml* | Cluster API runtime configuration (see [Cluster API reference](/reference/cluster-api)) |
| `kubetail.clusterAPI.image.registry` | string | `"ghcr.io"` | Image registry |
| `kubetail.clusterAPI.image.repository` | string | `"kubetail-org/kubetail-cluster-api"` | Image repository |
| `kubetail.clusterAPI.image.tag` | string | *see values.yaml* | Image tag |
| `kubetail.clusterAPI.image.digest` | string | `null` | Override image tag with a digest |
| `kubetail.clusterAPI.image.pullPolicy` | string | `"IfNotPresent"` | Image pull policy |
| `kubetail.clusterAPI.container.name` | string | `"kubetail-cluster-api"` | Container name |
| `kubetail.clusterAPI.container.extraEnv` | array | `[]` | Additional environment variables |
| `kubetail.clusterAPI.container.extraEnvFrom` | array | `[]` | Additional envFrom sources |
| `kubetail.clusterAPI.container.securityContext` | map | *see values.yaml* | Container security context |
| `kubetail.clusterAPI.container.resources` | map | `{}` | CPU/memory resource requests and limits |
| `kubetail.clusterAPI.podTemplate.annotations` | map | `{}` | Additional pod annotations |
| `kubetail.clusterAPI.podTemplate.labels` | map | `{}` | Additional pod labels |
| `kubetail.clusterAPI.podTemplate.extraContainers` | array | `[]` | Additional sidecar containers |
| `kubetail.clusterAPI.podTemplate.securityContext` | map | `{}` | Pod security context |
| `kubetail.clusterAPI.podTemplate.affinity` | map | `{}` | Pod affinity rules |
| `kubetail.clusterAPI.podTemplate.nodeSelector` | map | `{}` | Node selector |
| `kubetail.clusterAPI.podTemplate.tolerations` | array | `[]` | Pod tolerations |
| `kubetail.clusterAPI.configMap.name` | string | `null` | Override ConfigMap name |
| `kubetail.clusterAPI.configMap.annotations` | map | `{}` | Additional ConfigMap annotations |
| `kubetail.clusterAPI.configMap.labels` | map | `{}` | Additional ConfigMap labels |
| `kubetail.clusterAPI.deployment.name` | string | `null` | Override Deployment name |
| `kubetail.clusterAPI.deployment.annotations` | map | `{}` | Additional Deployment annotations |
| `kubetail.clusterAPI.deployment.labels` | map | `{}` | Additional Deployment labels |
| `kubetail.clusterAPI.deployment.replicas` | int | `1` | Number of replicas |
| `kubetail.clusterAPI.deployment.revisionHistoryLimit` | int | `5` | Revision history limit |
| `kubetail.clusterAPI.deployment.strategy` | map | `{type: RollingUpdate}` | Deployment update strategy |
| `kubetail.clusterAPI.rbac.name` | string | `null` | Override RBAC resource names |
| `kubetail.clusterAPI.rbac.annotations` | map | `{}` | Additional RBAC annotations |
| `kubetail.clusterAPI.rbac.labels` | map | `{}` | Additional RBAC labels |
| `kubetail.clusterAPI.secret.enabled` | bool | `true` | Create a Secret resource |
| `kubetail.clusterAPI.secret.name` | string | `null` | Override Secret name |
| `kubetail.clusterAPI.secret.annotations` | map | `{}` | Additional Secret annotations |
| `kubetail.clusterAPI.secret.labels` | map | `{}` | Additional Secret labels |
| `kubetail.clusterAPI.service.name` | string | `null` | Override Service name |
| `kubetail.clusterAPI.service.annotations` | map | `{}` | Additional Service annotations |
| `kubetail.clusterAPI.service.labels` | map | `{}` | Additional Service labels |
| `kubetail.clusterAPI.service.ports.http` | int | `8080` | Service HTTP port |
| `kubetail.clusterAPI.serviceAccount.name` | string | `null` | Override ServiceAccount name |
| `kubetail.clusterAPI.serviceAccount.annotations` | map | `{}` | Additional ServiceAccount annotations |
| `kubetail.clusterAPI.serviceAccount.labels` | map | `{}` | Additional ServiceAccount labels |

### Cluster Agent

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `kubetail.clusterAgent.enabled` | bool | `true` | Enable or disable the Cluster Agent component |
| `kubetail.clusterAgent.runtimeConfig` | map | *see values.yaml* | Cluster Agent runtime configuration (see [Cluster Agent reference](/reference/cluster-agent)) |
| `kubetail.clusterAgent.image.registry` | string | `"ghcr.io"` | Image registry |
| `kubetail.clusterAgent.image.repository` | string | `"kubetail-org/kubetail-cluster-agent"` | Image repository |
| `kubetail.clusterAgent.image.tag` | string | *see values.yaml* | Image tag |
| `kubetail.clusterAgent.image.digest` | string | `null` | Override image tag with a digest |
| `kubetail.clusterAgent.image.pullPolicy` | string | `"IfNotPresent"` | Image pull policy |
| `kubetail.clusterAgent.container.name` | string | `"kubetail-cluster-agent"` | Container name |
| `kubetail.clusterAgent.container.extraEnv` | array | `[]` | Additional environment variables |
| `kubetail.clusterAgent.container.extraEnvFrom` | array | `[]` | Additional envFrom sources |
| `kubetail.clusterAgent.container.securityContext` | map | *see values.yaml* | Container security context |
| `kubetail.clusterAgent.container.resources` | map | `{}` | CPU/memory resource requests and limits |
| `kubetail.clusterAgent.podTemplate.annotations` | map | `{}` | Additional pod annotations |
| `kubetail.clusterAgent.podTemplate.labels` | map | `{}` | Additional pod labels |
| `kubetail.clusterAgent.podTemplate.extraContainers` | array | `[]` | Additional sidecar containers |
| `kubetail.clusterAgent.podTemplate.securityContext` | map | `{fsGroup: 0}` | Pod security context |
| `kubetail.clusterAgent.podTemplate.affinity` | map | `{}` | Pod affinity rules |
| `kubetail.clusterAgent.podTemplate.nodeSelector` | map | `{}` | Node selector |
| `kubetail.clusterAgent.podTemplate.tolerations` | array | *see values.yaml* | Pod tolerations (master/control-plane nodes tolerated by default) |
| `kubetail.clusterAgent.configMap.name` | string | `null` | Override ConfigMap name |
| `kubetail.clusterAgent.configMap.annotations` | map | `{}` | Additional ConfigMap annotations |
| `kubetail.clusterAgent.configMap.labels` | map | `{}` | Additional ConfigMap labels |
| `kubetail.clusterAgent.daemonSet.name` | string | `null` | Override DaemonSet name |
| `kubetail.clusterAgent.daemonSet.annotations` | map | `{}` | Additional DaemonSet annotations |
| `kubetail.clusterAgent.daemonSet.labels` | map | `{}` | Additional DaemonSet labels |
| `kubetail.clusterAgent.networkPolicy.enabled` | bool | `true` | Create a NetworkPolicy resource |
| `kubetail.clusterAgent.networkPolicy.name` | string | `null` | Override NetworkPolicy name |
| `kubetail.clusterAgent.networkPolicy.annotations` | map | `{}` | Additional NetworkPolicy annotations |
| `kubetail.clusterAgent.networkPolicy.labels` | map | `{}` | Additional NetworkPolicy labels |
| `kubetail.clusterAgent.service.name` | string | `null` | Override Service name |
| `kubetail.clusterAgent.service.annotations` | map | `{}` | Additional Service annotations |
| `kubetail.clusterAgent.service.labels` | map | `{}` | Additional Service labels |
| `kubetail.clusterAgent.service.ports.grpc` | int | `50051` | Service gRPC port |
| `kubetail.clusterAgent.serviceAccount.name` | string | `null` | Override ServiceAccount name |
| `kubetail.clusterAgent.serviceAccount.annotations` | map | `{}` | Additional ServiceAccount annotations |
| `kubetail.clusterAgent.serviceAccount.labels` | map | `{}` | Additional ServiceAccount labels |