feat(deploy): Helm chart for ourios-server (shipping milestone C) - #286
feat(deploy): Helm chart for ourios-server (shipping milestone C)#286jensholdgaard wants to merge 1 commit into
Conversation
Add deploy/helm/ourios — the first deployable packaging of the ourios-server binary, scaffolded with `helm create` then customized. The binary runs all three roles in one process (always-on compactor + optional receiver + optional querier), so the chart deploys it as a single StatefulSet with the roles toggled via `roles.receiver.enabled` / `roles.querier.enabled`. The Parquet data store (OURIOS_BUCKET_ROOT) and the write-ahead log (OURIOS_WAL_ROOT, receiver-only) are PVCs. Topology: a single replica on a ReadWriteOnce data volume, because the object-storage backend (RFC 0013) is not yet wired — the compactor is the store's single writer, and cross-pod sharing would need RWX. When S3 lands, the store is shared via object storage and the querier can split into its own horizontally-scaled Deployment. This is the only shape that deploys on a vanilla cluster today; flagged here for review. - Image: ghcr.io/jensholdgaard/ourios (the published distroless build), tag defaulting to the chart appVersion. - Security: runs nonroot (uid 65532) with a read-only root filesystem + dropped capabilities; fsGroup lets the process write its PVCs; a tmp emptyDir covers the read-only rootfs. - Services: a headless service governs the StatefulSet; a client ClusterIP exposes only the enabled roles' ports (4317/4318 receiver, 4319 querier). - Probes: tcpSocket on an enabled role port (no HTTP health route exists yet; a compactor-only pod gets none). - `helm test`: posts a DSL query to the querier (or TCP-checks the receiver). - CI: .github/workflows/helm.yml runs `helm lint` + `helm template` across the role-toggle matrix on changes under deploy/helm/ (SHA-pinned setup-helm, least-priv token), matching the project's CI-gated verification discipline. No Ourios RFC is required (a chart is a normal k8s packaging concern, and CLAUDE.md §7 already lists deploy/helm/ as a target artifact). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Caution Review failedPull request was closed or merged during review 📝 WalkthroughWalkthroughIntroduces a complete Helm chart for the Changesourios Helm chart and CI workflow
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Parking this in favour of doing S3 Store selection first, then rebuilding the chart S3-native. Rationale (per maintainer): Plan: wire S3 selection in |
There was a problem hiding this comment.
Pull request overview
Adds a first deployable Kubernetes packaging for ourios-server by introducing a Helm chart (deploy/helm/ourios) and CI validation to lint and render-test the chart across the role-toggle matrix (receiver / querier / compactor-only).
Changes:
- Added a Helm v3 chart that deploys
ourios-serveras a single-replica StatefulSet with role toggles and PVC-backeddata+ optionalwal. - Added services, notes, and a
helm testhook pod to smoke-check connectivity/querying depending on enabled roles. - Added a GitHub Actions workflow to run
helm lintandhelm templatefor changes underdeploy/helm/.
Reviewed changes
Copilot reviewed 11 out of 11 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
deploy/helm/ourios/Chart.yaml |
Defines the new ourios Helm chart metadata (type, versions, description). |
deploy/helm/ourios/values.yaml |
Introduces chart configuration (image, role toggles, persistence, security contexts, env knobs). |
deploy/helm/ourios/templates/_helpers.tpl |
Adds shared naming/label helpers plus env and image construction helpers. |
deploy/helm/ourios/templates/statefulset.yaml |
Implements the core StatefulSet deployment with conditional ports/probes/PVCs by role. |
deploy/helm/ourios/templates/service.yaml |
Adds headless service for StatefulSet identity and a conditional client-facing service. |
deploy/helm/ourios/templates/serviceaccount.yaml |
Adds an optional ServiceAccount with configurable automount behavior. |
deploy/helm/ourios/templates/tests/test-connection.yaml |
Adds helm test hook pod to validate querier/receiver reachability. |
deploy/helm/ourios/templates/NOTES.txt |
Provides post-install guidance and role/port hints. |
deploy/helm/ourios/README.md |
Documents installation, topology constraints, and key values. |
deploy/helm/ourios/.helmignore |
Adds standard Helm ignore patterns for packaging. |
.github/workflows/helm.yml |
Adds CI workflow to lint and render-test the Helm chart on relevant changes. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 | ||
| - uses: azure/setup-helm@dda3372f752e03dde6b3237bc9431cdc2f7a02a2 # v5.0.0 |
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 | ||
| - uses: azure/setup-helm@dda3372f752e03dde6b3237bc9431cdc2f7a02a2 # v5.0.0 |
| annotations: | ||
| "helm.sh/hook": test |
| - name: query | ||
| image: busybox | ||
| command: |
| - name: otlp-http | ||
| image: busybox | ||
| command: |
What
First-shipping-milestone workstream C: a Helm chart at
deploy/helm/ourios— the first deployable packaging ofourios-server. Scaffolded withhelm create, then customized. (CLAUDE.md§7 already listsdeploy/helm/as a target artifact; no Ourios RFC is needed for a standard k8s packaging concern.)Design
ourios-serverruns all three roles in one process — always-on compactor + optional receiver (RFC 0003) + optional querier (RFC 0016) — so the chart deploys it as a single StatefulSet with roles toggled viaroles.receiver.enabled/roles.querier.enabled. Two PVCs:data(OURIOS_BUCKET_ROOT, the Parquet store) andwal(OURIOS_WAL_ROOT, receiver-only).Details:
ghcr.io/jensholdgaard/ourios(the published distroless build), tag → chartappVersion, overridable viaimage.tag.fsGrouplets the process write its PVCs; atmpemptyDir covers the read-only rootfs.tcpSocketon an enabled role port (no HTTP health route exists yet — endpoints are POST-only; a compactor-only pod gets no probe).helm test: posts a DSL query to the querier (or TCP-checks the receiver).Verification
helm lintclean.helm templaterenders valid manifests across the full role-toggle matrix (both / querier-only / receiver-only / compactor-only) — conditional env, ports, PVCs, probes, and services all gate correctly (verified locally)..github/workflows/helm.ymlrunshelm lint+ thehelm templatematrix on changes underdeploy/helm/— SHA-pinnedazure/setup-helm(v5.0.0), least-privcontents: read, path-filtered. Renovate already manages action pins.Out of scope / follow-ups
🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Chores