Skip to main content

BYOC Local Quickstart (Colima)

A single-node Polar Signals Cloud running on your laptop in roughly ten minutes. Backed by in-cluster MinIO (object storage) and Postgres (database). Intended for evaluation and exploration; not for production.

What this gives you

  • Every component of the platform running on a colima Kubernetes node.
  • The chart's manifests rendered against minimal values so you can read through exactly what gets installed.
  • A reproducible reset (kubectl delete namespace polarsignals-byoc) that wipes everything in one command.

What this deliberately doesn't give you

  • Working browser-based OIDC login. The bundled Dex is reachable in-cluster but not through ingress, so the OAuth redirect won't complete. The platform comes up healthy and the API verifies tokens; you just can't drive a login flow without adding ingress + TLS.
  • Production credentials. MinIO and Postgres ship with the literal credentials minio / minio123 and polarsignals / polarsignals. Don't put real data in this.
  • Multi-arch images. The chart pulls amd64-only images. On Apple Silicon, colima must run x86_64 with Rosetta (see below).

Prerequisites

  • kubectl and helm installed.
  • colima installed (brew install colima on macOS).
  • A Polar Signals registry service-account JSON key (saved as key.json) and the Helm chart version (a 0.0.0-git-<sha> tag). BYOC is not self-serve — contact sales to schedule a call; your rep provides both the key and the specific chart sha to use.
  • On Apple Silicon, macOS 13+ for Rosetta support.

Step 1 — Start colima

Apple Silicon (M-series Macs): force x86_64 with Rosetta. QEMU emulation works for most components but the ingestor stalls before its readiness server binds; Rosetta has no such issue.

colima start --arch x86_64 --vm-type vz --vz-rosetta --kubernetes

Intel Mac, Linux: the defaults are fine.

colima start --kubernetes

Verify the cluster is up:

kubectl get nodes
# NAME STATUS ROLES AGE VERSION
# colima Ready control-plane 1m v1.35.0+k3s1

Step 2 — Get the byoc-guide colima manifests

The supporting manifests (Postgres + MinIO + Dex + app secrets + chart values + Makefile) live in the colima/ directory of an internal byoc-guide repository. Ask your Polar Signals rep to grant you access, then clone:

git clone git@github.com:polarsignals/byoc-guide.git
cd byoc-guide/colima

The directory layout:

FileWhat it deploys
namespace.yamlThe polarsignals-byoc namespace
postgres.yamlPostgres 16 StatefulSet + Service + PVC
minio.yamlMinIO Deployment + bucket-creation Job
dex.yamlDex with one static user (admin@example.com / admin)
secrets.yamlAll six app secrets (DB, OIDC, token-signing, columnstore creds, two per-bucket configs)
values.yamlChart values: hostnames, secret names, single-replica resource requests
Makefilegenerate (helm template) + deploy (kubectl apply in order)

Step 3 — Create the pull secret

The chart pulls images from the Polar Signals registry. Save the service-account key as key.json in the colima directory (it's gitignored), then:

kubectl create namespace polarsignals-byoc
kubectl create secret docker-registry polarsignals-registry \
--namespace polarsignals-byoc \
--docker-server=europe-west3-docker.pkg.dev \
--docker-username=_json_key \
--docker-password="$(cat key.json)"

_json_key is the literal username GCP Artifact Registry expects when the password is a service-account JSON body.

Step 4 — Log helm into the registry

helm registry login -u _json_key --password-stdin \
europe-west3-docker.pkg.dev < key.json

Step 5 — Render and deploy

make generate
make deploy

generate pulls the chart at the version pinned in the Makefile and renders it against values.yaml to generated.yaml. deploy applies everything in dependency order: namespace, MinIO, Postgres, Dex, secrets, then the rendered chart.

Watch the rollout:

kubectl get pods -n polarsignals-byoc -w

You should converge to all-Running within a few minutes. The StatefulSet pods (commit-coordinator-0, symbolizer-0) come up last.

Step 6 — Access the UI

kubectl -n polarsignals-byoc port-forward svc/main-ui 8080:80
open http://localhost:8080

The UI shell loads. Anything that triggers an API call against https://api.cloud.polarsignals.localhost/... will fail — that hostname isn't routed to anything. To make the full flow work you'd need an ingress controller, hosts-file entries, and TLS termination, which the colima example deliberately skips.

For smoke-testing the API gRPC interface:

kubectl -n polarsignals-byoc port-forward svc/api 10901:10901 &
grpcurl -plaintext localhost:10901 list

Troubleshooting

Ingestor stuck 0/1 Running, no logs past jemalloc

You're on Apple Silicon running the QEMU-emulated x86_64 image, not Rosetta. Restart colima with Rosetta:

colima stop
colima start --arch x86_64 --vm-type vz --vz-rosetta --kubernetes

Then redeploy.

make generate says denied: Unauthenticated request

Helm hasn't authenticated to the registry. Run the helm registry login from step 4.

helm template fails with unexpected "\\" in operand

You're on a chart version before 0.0.0-git-9210a79. Bump the version pin in the Makefile and re-run.

Postgres pod won't start with initdb: directory not empty

The PVC has leftover data from a previous, incompatible Postgres version. Wipe it:

kubectl delete pvc -n polarsignals-byoc data-postgres-0
kubectl delete pod -n polarsignals-byoc postgres-0

The StatefulSet recreates both.

Reset

make undeploy

Equivalent to kubectl delete namespace polarsignals-byoc. Deletes the namespace plus every PVC inside, which wipes MinIO data and Postgres data. Start over from step 3.