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/UbuntuDon'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 updateDownload 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.yamlThe 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.yamlGetting 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 loginbzrk 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.