Berserk Docs

Creating a Berserk Cluster

Deploy Berserk to Kubernetes, configure ingest, and run your first query

Berserk is pre-release (beta) software, provided AS IS with no warranty. By installing and using it you agree to our Terms of Use.

In this guide you'll deploy Berserk to Kubernetes, ingest telemetry, and run your first query. You're going to need helm, kubectl, and the bzrk CLI:

# Install bzrk
curl -fsSL https://go.bzrk.dev | bash

# Install helm and kubectl
brew install helm kubectl # macOS
pacman -S helm kubectl    # Arch
apt install helm kubectl  # Debian/Ubuntu

Don't have a Kubernetes cluster? We recommend k3d for running a local dev cluster.

Installation

Berserk needs a PostgreSQL instance (version 17 or 18) and access to S3-compatible object storage.

Install with Helm

helm repo add berserk https://berserkdb.github.io/helm-charts
helm repo update

Download and update the quick-start-values.yaml with you S3 bucket

curl -o quick-start-values.yaml https://raw.githubusercontent.com/berserkdb/helm-charts/refs/heads/main/examples/quick-start-values.yaml

The Helm chart can create the required Kubernetes secrets for you. Pass your S3 and PostgreSQL credentials inline:

helm install berserk berserk/berserk \
  --namespace bzrk \
  --create-namespace \
  --set global.s3Credentials.accessKeyId=YOUR_ACCESS_KEY \
  --set global.s3Credentials.secretAccessKey=YOUR_SECRET_KEY \
  --set global.postgresCredentials.databaseUrl="postgres://<user>:<password>@<host>:5432/<database>" \
  -f quick-start-values.yaml

Getting Data Into Berserk

Berserk receives telemetry from any OpenTelemetry Collector.

Add Berserk as an OTLP gRPC exporter in your OpenTelemetry Collector configuration:

exporters:
  otlp/berserk:
    endpoint: "http://<ingest-bzrk-service>:4317"
    tls:
      insecure: true

service:
  pipelines:
    traces:
      exporters: [otlp/berserk]
    logs:
      exporters: [otlp/berserk]
    metrics:
      exporters: [otlp/berserk]

Replace <ingest-bzrk-service> with the address of your Berserk ingest service.

For our recommended configuration with disk-backed queues, retry policies, and tuned timeouts, see the OpenTelemetry Collector Configuration.

Create the first admin

Berserk's auth edge (the gateway service) ships with no default credentials. On first boot it prints a one-time setup URL to the container's stderr; open it in a browser to create the initial admin.

kubectl -n bzrk logs deploy/gateway | grep -A1 "Initial admin setup"

You'll see something like:

Initial admin setup:
  Open: https://<your-gateway-host>/setup?token=…
  This link expires in 1 hour and can be used once.

The URL is minted from the gateway's GATEWAY_PUBLIC_BASE_URL. If your gateway sits behind an Ingress, set that to the public hostname (e.g. https://berserk.example.com) so the link is reachable from your machine; otherwise port-forward and use http://127.0.0.1:9500:

kubectl -n bzrk port-forward svc/gateway 9500:9500
# Open http://127.0.0.1:9500/setup?token=…

Submit the form — it asks for email, given name, family name, and a password (12+ characters) — and you'll be redirected to /login. Sign in with the credentials you just set.

The setup token is a single-use admin credential. Treat container logs as sensitive — anyone with kubectl logs access on the gateway pod sees the active token until setup is completed.

For unattended deploys, automated env-driven admin provisioning and OIDC-only mode, see UI First-Boot Setup.

Authenticate the CLI

Configure the active profile to point at your gateway, then run bzrk login:

bzrk profile add prod --endpoint https://berserk.example.com
bzrk profile use prod
bzrk login

bzrk login prints a URL — follow the on-screen instructions to sign in. Credentials are stored in ~/.config/bzrk/config.toml.

To authenticate, open https://berserk.example.com/oauth/device and enter:

    user_code: ABCD-WXYZ

Waiting for approval…
✓ Signed in as alice@example.com (profile: prod)

bzrk logout revokes the refresh token server-side and clears the local fields. See Berserk CLI → Authenticating for the full reference.

Query Your Data

Once data is flowing and the CLI is signed in, query it:

bzrk search "default | take 10" --since "1h ago"

The table name is the first part of the query. From there you can use KQL to filter, project, and aggregate your data. See the Query Reference documentation for the full query language reference.

To organize data by service or environment, you can create additional tables.

More configuration

See the helm-charts examples for ready-to-use configurations (minimal and production-ready) and how to adjust the resource specs for the servies.

If you manage secrets externally (e.g. via Vault, External Secrets Operator, or GitOps), see Managing Secrets for the expected secret formats.

For more configuration options and service details, see Cluster Admin.

On this page