Vector — Helm Chart
Repo: https://helm.vector.dev
OCI: oci://ghcr.io/vectordotdev/helm-charts/vector
Latest chart: v0.56.0 (app v0.56.0-distroless-libc)
K8s min: >=1.28.0-0
Quick Install
helm repo add vector https://helm.vector.dev
helm repo update
# Agent (DaemonSet — collect logs from all nodes)
helm install vector-agent vector/vector \
--namespace vector --create-namespace \
--set role=Agent \
--set customConfig.sources.kubernetes_logs.type=kubernetes_logs \
--set customConfig.sinks.stdout.type=console \
--set 'customConfig.sinks.stdout.inputs[0]=kubernetes_logs' \
--set customConfig.sinks.stdout.encoding.codec=json
Roles
| Role | Workload | Use Case |
|---|---|---|
Agent |
DaemonSet | Collect logs/metrics from every node |
Aggregator |
StatefulSet | Centralized processing with persistent buffer |
Stateless-Aggregator |
Deployment | Centralized processing without persistence |
# Aggregator (StatefulSet — centralized processing)
helm install vector-aggregator vector/vector \
--namespace vector \
--set role=Aggregator \
--set replicas=3 \
--set customConfig.sources.vector.type=vector \
--set customConfig.sources.vector.address=0.0.0.0:6000 \
--set customConfig.sinks.stdout.type=console \
--set 'customConfig.sinks.stdout.inputs[0]=vector' \
--set customConfig.sinks.stdout.encoding.codec=json
Configuration
Pipeline via customConfig
customConfig:
data_dir: /vector-data-dir
api:
enabled: true
address: 127.0.0.1:8686
sources:
kubernetes_logs:
type: kubernetes_logs
extra_label_selector: "app!=vector"
internal_metrics:
type: internal_metrics
vector:
address: 0.0.0.0:6000
type: vector
version: "2"
transforms:
remap:
type: remap
inputs: [kubernetes_logs]
source: |
.@timestamp = del(.timestamp)
.service = .kubernetes.container_name
sinks:
console:
type: console
inputs: [remap]
encoding:
codec: json
prometheus:
type: prometheus_exporter
inputs: [internal_metrics]
address: 0.0.0.0:9090
HAProxy Load Balancer (Aggregator)
haproxy:
enabled: true
replicas: 2
service:
type: ClusterIP
PodMonitor (Prometheus)
podMonitor:
enabled: true
interval: 30s
path: /metrics
port: prom-exporter
Key Parameters
| Parameter | Default | Role | Description |
|---|---|---|---|
role |
Aggregator |
all | Workload type |
image.repository |
docker.io/timberio/vector |
all | Image repo |
image.tag |
derived from appVersion | all | Image tag |
image.base |
distroless-libc |
all | Base distro |
replicas |
1 |
Agg/Stateless | Pod count |
customConfig |
{} |
all | Pipeline definition |
existingConfigMaps |
[] |
all | Use external ConfigMap for config |
dataDir |
"" |
all | Data dir (required with existingConfigMaps) |
secrets.generic |
{} |
all | Key-value secrets |
persistence.enabled |
false |
Aggregator | PVC for buffer |
persistence.size |
10Gi |
Aggregator | PVC size |
service.enabled |
true |
all | Create Service |
service.type |
ClusterIP |
all | Service type |
rbac.create |
true |
Agent | RBAC for pod/node access |
psp.create |
false |
Agent | PodSecurityPolicy |
autoscaling.enabled |
false |
Agg/Stateless | HPA |
podMonitor.enabled |
false |
all | Prometheus PodMonitor |
haproxy.enabled |
false |
Aggregator | HAProxy sidecar |
podLabels |
{vector.dev/exclude: "true"} |
all | Labels on pods |
env |
[] |
all | Environment variables |
envFrom |
[] |
all | Env from Secrets/ConfigMaps |
extraVolumes |
[] |
all | Additional volumes |
extraVolumeMounts |
[] |
all | Additional mounts |
initContainers |
[] |
all | Init containers |
extraContainers |
[] |
all | Sidecar containers |
resources |
{} |
all | CPU/memory requests/limits |
nodeSelector |
{} |
all | Node selection |
tolerations |
[] |
all | Taints |
affinity |
{} |
all | Scheduling affinity |
updateStrategy |
{} |
all | Rolling update strategy |
terminationGracePeriodSeconds |
60 |
all | Graceful shutdown |
livenessProbe |
{} |
all | Liveness |
readinessProbe |
{} |
all | Readiness |
startupProbe |
{} |
all | Startup |
extraObjects |
[] |
all | Extra K8s manifests |
Secrets
secrets:
generic:
datadog_api_key: "your-api-key"
aws_access_key_id: "AKIA..."
aws_secret_access_key: "..."
Referenced via env:
env:
- name: DATADOG_API_KEY
valueFrom:
secretKeyRef:
name: vector
key: datadog_api_key
Upgrading
helm repo update
helm upgrade vector-agent vector/vector \
--namespace vector \
--values values.yaml \
--version 0.56.0
Common Mistakes
- Role not set — Default is
Aggregator. Set--set role=Agentfor DaemonSet. - customConfig replaces all defaults — When using
customConfig, you must define the full pipeline (sources, transforms, sinks). No defaults are merged. - Agent requires RBAC —
rbac.create=true(default) for reading pod logs. Disable only if using pre-created RBAC. - API health endpoint —
customConfig.api.enabled=truerequired for liveness/readiness probes. Without it, probes fail. - gRPC probes — Vector 0.55+ supports gRPC health probes via
grpc.health.v1.Health/Checkon port8686. - Aggregator without persistence —
persistence.enabled=falsemeans buffer data is lost on pod restart. - HostPath for Agent — Agent uses
/var/log/,/var/lib/,/proc,/sysmounts by default. Don't override unless you know the impact. - Base distribution —
distroless-libcis minimal. Usedebianif you need shell access or debugging tools.