Skip to content

v0.8.0

Choose a tag to compare

@scotwells scotwells released this 16 Sep 22:56
b5aabe7

Compute becomes a multi-region service: workloads are placed at named locations and delivered to every cell that serves them, and each one can now choose how it runs, get its own network, and be managed from the CLI, portal or an AI assistant.

Important

Placement moves from city codes to locations (#264).

  • Workload: spec.placements[].cityCodes is deprecated in favour of placements[].locations or placements[].locationSelector. Existing workloads are rewritten automatically on their first reconcile after the upgrade, and keep running meanwhile.
  • WorkloadDeployment: spec.cityCode is replaced by spec.locationRef, and status.location is removed.
  • Instance: carries a compute.datumapis.com/location label instead of city-code.
  • Go clients: LocationReference now comes from go.miloapis.com/locations/api/v1alpha1 instead of go.datum.net/network-services-operator/api/v1alpha. Code that imports compute's API types must update that import.

The CLI's --port flag is removed. Use --http-port to publish a workload, or --no-http to keep it internal (#289).

What's new

  • Delivery to cells in every region. Workloads are delivered to the cells serving their locations through the federation layer. Instances heal and report status there, and resources can no longer be orphaned on the federation plane. (#107, #142, #147, #220, #227)
  • Placement at named locations. Workloads name locations from the locations service or select them by topology, and follow the fleet as locations come and go. (#261, #264)
  • Runtime classes. A workload chooses between the unikernel and general-purpose runtimes, each with its own network attachment. It is behind the RuntimeClasses feature gate. (#260, #296, #300, #301)
  • Container capabilities and published security settings. Sandbox containers can request the Linux capabilities their images need, and each instance publishes the security settings it runs with. (#304, #311)
  • A network interface per instance. Every instance gets its own interface, published on its status, and instances that stop serving are drained from traffic. (#224, #231, #245, #252, #253)
  • ConfigMaps, Secrets and image pull credentials. Workloads reference them, and they're delivered to every cell running the workload. Instances say whether a failure to start came from missing data, quota or the runtime. (#129, #143, #248)
  • Quota and service enablement. Instances are counted against Milo project quota, compute registers in the service catalog, and enabling compute requires provider approval. (#103, #115, #118, #126, #184)
  • Project suspension. Suspending a project pauses its instances without deleting anything, and resuming brings them back. (#200, #214)
  • Autoscaling. WorkloadDeployments support the /scale subresource and a Horizontal Pod Autoscaler controller, backed by a prometheus-adapter metrics component. (#201, #203, #208)
  • The datumctl compute plugin. Build, deploy and manage workloads from the CLI, including publishing a workload on an HTTPS URL, choosing a runtime class or network, and enabling compute through the service catalog. (#113, #238, #271, #289, #306, #307, #316)
  • Portal plugins. Consumers get a workloads plugin with instance logs, and staff get a provider plugin with a fleet-wide health view. (#198, #219, #251, #256, #305)
  • AI assistant support. A compute MCP server lets an assistant diagnose workloads, create them, and choose runtime classes safely. (#263, #275, #290, #309)
  • Reliability. Webhooks answer from every replica, startup no longer runs out of memory, idle deployments stop hot-looping, and reconcile storms page on-call. (#162, #190, #192, #193)

Note

New CRD: RuntimeClass. Beyond the placement changes above, schema changes are additive: container command/args, runtime class, replica fields and placement status. Compute now builds on released network-services-operator v0.27.0, locations v0.0.1, service-catalog v0.7.0 and datumctl v0.19.0.

Changelog

  • 514f55e Choose the network a workload attaches to with --network
  • 2ce2b38 Make Instance runtime class selectable server-side
  • abc5d44 Merge branch 'main' into feat/cli-network-flag
  • 35794e6 Merge branch 'main' into feat/instance-logs-metrics
  • fd56e83 Merge pull request #280 from datum-cloud/feat/validate-image-reference-contains-registry
  • e01a9f0 Merge pull request #290 from datum-cloud/feat/assistant-workload-creation
  • 46a758f Merge pull request #291 from datum-cloud/renovate/go-google.golang.org-grpc-vulnerability
  • d58a01a Merge pull request #296 from datum-cloud/feat/runtimeclass-available-condition
  • 63491a7 Merge pull request #299 from datum-cloud/fix/consumer-plugin-react-router-v8
  • 799dd93 Merge pull request #300 from datum-cloud/feat/instance-runtime-class-field-selector
  • 63cbebe Merge pull request #301 from datum-cloud/feat/runtime-class-network-attachment
  • da93e89 Merge pull request #302 from datum-cloud/chore/repin-networking-to-main
  • 84bf5bc Merge pull request #304 from datum-cloud/feat/sandbox-container-capabilities
  • 72b54fe Merge pull request #305 from datum-cloud/feat/instance-logs-metrics
  • e556488 Merge pull request #306 from datum-cloud/feat/cli-runtime-class-flag
  • b181077 Merge pull request #307 from datum-cloud/feat/cli-network-flag
  • abc61b8 Merge pull request #309 from datum-cloud/fix/assistant-runtime-classes
  • a81c592 Merge pull request #311 from datum-cloud/feat/published-default-security-context
  • b5aabe7 Merge pull request #316 from datum-cloud/chore/release-v0.8.0-dependencies
  • 90f6037 Merge upstream main into feat/assistant-workload-creation
  • bddf795 Merge upstream main into feat/assistant-workload-creation
  • 60df711 chore(deps): pin datumctl to the v0.18.3 release
  • 7814572 chore(deps): pin locations to the v0.0.1 release
  • d039624 chore(deps): pin network-services-operator to the v0.27.0 release
  • 548fa40 chore(deps): update module google.golang.org/grpc to v1.83.2 [security]
  • 93077db chore(deps): update service-catalog to v0.7.0 and datumctl to v0.19.0
  • 301fc92 chore(lint): name repeated resource-type, unit, and kind literals
  • bccdc6d docs(agent): guide runtime class choice and RuntimeClassNotServed triage
  • 48a2da4 docs(agent): route workload creation through the assistant's base tools
  • ea2383c feat(agent): let the assistant create workloads
  • dce6567 feat(agent): resolve placeable locations from ServiceAvailability
  • f5b732a feat(api): let sandbox containers request Linux capabilities
  • 45023b6 feat(api): publish the security configuration a tier applies by default
  • 724ffa4 feat(api): report runtime class usability as Available
  • 734f26f feat(cli): choose a runtime class when deploying
  • 072f132 feat(compute): publish a class's network attachment with the class
  • 6b8838a feat(compute): record the security configuration a workload runs with
  • bd9304f feat(compute): refuse to loosen confinement with no tier to state it
  • cbf1d3f feat(compute): run the confinement an instance states
  • f68dd08 feat(instancepod): drop every capability unless a container requests its own
  • cf102c7 feat(instancepod): translate capability requests and refuse host paths
  • 87aab90 feat(runtimeclass): validate capability requests against the class grant
  • ff7edbd feat: add logs and metrics
  • 7f804a5 feat: enrich locations and staff telemetry
  • ce74a04 feat: validate image reference contains registry
  • 401eee8 fix(agent): surface the runtime class as a final choice when rendering
  • 2ecef34 fix(compute): keep stamped workloads updatable when runtime classes go off
  • ca99932 fix(compute): record the capability floor on every container
  • f50f515 fix(compute): stamp the security configuration only when a workload is created
  • 266a232 fix(ui/consumer): bump react-router/react singleton versions to match cloud-portal host
  • 1cba1c2 fix(validation): restore compilation of the workload validation tests
  • d06fbcf refactor(agent): rely on the assistant's base tools for workload creation
  • 1affbdb refactor(cli): adopt the service catalog's activation SDK