Repository navigation
Replies: 3 comments
Decision: schema mount method and image base (D6/D7)Recommendation: publish one schema image per tag, built on static
We switch the default to This changes D7. The plan was two bases, Support for image volumes
The feature also needs container runtime support: containerd ≥ 2.1, or CRI-O with image volume support (≥ 1.31 for alpha). Many clusters in use today are below 1.35 or don't have the gate on:
Making image volumes the only option would cut those users off. What the kind prototype showedI ran the current
Side finding, not related to the mount methodThe containerd in kind gives pods an open-file limit of about 1 billion, compared with about 1 million in Docker. BEAM sizes its port table from that limit, so each server used about 2.2 GB of RSS and three pods exhausted an 8 GB node. Setting Sources: |
|
D9 update: the schema release branches ( |
|
The split is done: the server and its Helm chart now live in agntcy/oasf-server ( |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Problem
Every
ghcr.io/agntcy/oasf-server:vX.Y.Zimage has one schema version baked into it (COPY --from=schemainserver/Dockerfile). To serve several OASF versions you run several images, one per schema release line (v0.7.x,v0.8.x,v1.0.x,v1.1.x, …).So a server CVE fix or bug fix has to be cherry-picked to every release branch, patch-released once per branch, and rolled out once per version in every deployment. The server is stable now, and this coupling costs more than it saves: security fixes can't ship quickly to all OASF versions.
We'd like to go back to the model OCSF uses:
After the split, a server fix is one server release plus one image tag bump, and it reaches every schema version at once.
How OCSF does it
As described in ocsf-server#131, the public OCSF site runs one server container per schema version. Nginx routes requests by URL prefix (e.g.
/1.4.0/→ the 1.4.0 instance). Each container getsSCHEMA_DIRpointing at its own schema checkout, andSCHEMA_PATHset to its URL prefix. Our Helm chart already follows this pattern: one Deployment and Service per schema version, aSCHEMA_VERSIONSConfigMap for the version switcher, and path-based ingress routing. The only real difference is where the schema comes from: a separate checkout there, baked into the server image here.Feasibility check
mainalready serves every released schema. Run withSCHEMA_DIRpointing at theschema/tree ofv0.7.8,v0.8.7,v1.0.4andv1.1.1, it starts cleanly for all four, with no errors or warnings. The UI pages and the main/api,/schemaand/sampleendpoints return 200 for each. A full output-parity comparison against the current bundled images is still to be done.schema/directory layout has been stable since 0.7.v1.0.0..v1.0.4), so schema artifacts must be keyed by the git tag, not only byversion.json.Target architecture
Proposed decisions
agntcy/oasfagntcy/oasf; the server moves to a newagntcy/oasf-serverbuf.build/agntcy/oasfand everygithub.com/agntcy/oasf/tree/main/schema/...link stay untouched.git filter-repoon a fresh clone ofagntcy/oasfthat keepsserver/,install/and the build/CI files, and movesserver/to the repo rootbundle/vX.Y.Zand drop the release branchesvX.Y.Zfor the new independent server semver.v2.0.0v1.2.0would read as "the image for schema 1.2". A major version marks the packaging break: the image no longer contains a schema.ghcr.io/agntcy/oasf-serverand addghcr.io/agntcy/oasf-schemaghcr.io/agntcy/oasf-schema:vX.Y.Z), pinned by digest. The chart chooses the mount withschema.mount. The default isinitContainer, which copies/schemainto anemptyDir.imageVolumeis opt-in and mounts the image withsubPath: schema. Image volumes need Kubernetes ≥ 1.35, so the chart refuses to render that mode on older versions unless an override is set. Once the chart's minimum is 1.35, a later chart major makesimageVolumethe default. Decided in #539.busyboxbase, with the schema under/schema, running as a non-root user. Decided in #539.cp, and withsubPaththe same image also works as an image volume, where the busybox layer is only mounted, never run. That makes one artifact per tag to build, sign, scan and pin.oci://ghcr.io/agntcy/oasf-server/helm-charts/oasfas chart v2.0.0 (breaking values change: one server image tag plus a list of schema versions)oasf-sdkanddir, and releases alongside the server.v0.7.x…v1.1.x)vX.Y.(Z+1), which publishes a new schema image.Schema delivery: alternatives considered
gitRepovolumegit-sync --one-time --depth=1 --ref=<tag or SHA>into anemptyDirvX.Y.Zpackagesschema/intooasf-schema:vX.Y.ZFeedback welcome, especially on D1 (repo naming), D4 (server versioning), and which schema versions should stay supported once a single server serves them all.
All reactions