Skip to content

Releases

v1.0.0-rc.3

Choose a tag to compare

@github-actions github-actions released this 05 Nov 02:12

v1.0.0-rc.3 is the third release candidate for Substrate 1.0. It brings release-1.0 up to main as of November 4. On top of rc.2 it moves atelet to the system-cluster-critical priority class so disk pressure can no longer evict the one component that frees node disk, makes a gVisor durableDir root 0777 as documented, adds the pkg/objectstore/actorauthz package so out-of-tree object-store providers can run the actor checks, publishes CRD types in the API reference, and adds an upgrade e2e test that runs on every push to a release branch.

It also carries everything in rc.2: actors run as the image's USER, capabilities.add is limited to a short allowlist, /tmp and /dev/shm are tmpfs, mounts are nodev on both runtimes, and the worker outage from microVM memory overshoot, the 15 s atenet-router start stall, drifting actor and worker assignments, and the device plugin wedge after an atelet restart are fixed.

Upgrading from rc.2 breaks gVisor MEMORY snapshots of actors with a durableDir. Upgrading from rc.1 additionally breaks all gVisor snapshots and needs an image cache reset. See Upgrading from v1.0.0-rc.2 and Upgrading from v1.0.0-rc.1 at the end. Upgrading from v0.6.0 is not supported; reinstall.

What's Changed

⚠️ Breaking Changes

Settings to change before upgrading:

  • Snapshot location path segments are validated (#2784 by Anish Ramasekar (@aramase)). Each segment of --snapshot-location (SNAPSHOT_LOCATION) must match ^[A-Za-z0-9_-]+$ and cannot equal atespaces in any case. Fix the path before upgrading or ate-api-server refuses to start.
  • --cordon-control-plane is now --cordon-system-infra-components (#3210 by haiyanmeng). The env var is ATE_INSTALL_CORDON_SYSTEM_INFRA_COMPONENTS, the config key cordonSystemInfraComponents, and the shared pool label and taint ate.dev/workloadType=ate-system-infra. The old flag and config key fail; the old env var is ignored silently and the install stops cordoning. Relabel and retaint the pool, then redeploy with the new flag; the PR has the gcloud commands.
  • ActorTemplates may only add 12 capabilities (#3580 by Greg Castle (@destijl), #3487 by Benjamin Elder (@BenTheElder)). securityContext.capabilities.add accepts only AUDIT_WRITE, CHOWN, DAC_OVERRIDE, FOWNER, FSETID, KILL, NET_BIND_SERVICE, SETFCAP, SETGID, SETPCAP, SETUID and SYS_CHROOT; MKNOD, SYS_ADMIN, SYS_RAWIO and the rest are rejected at admission. Unknown names in add or drop are rejected too. Check your templates for typos and for capabilities outside the list. Unprivileged ping keeps working without NET_RAW.
  • Custom credential-exchange sidecars lose --actor-jwt-jwks-file (#3447 by Anish Ramasekar (@aramase)). The exchange now fetches keys through OIDC discovery. Drop the flag from custom sidecar configs, and set --actor-jwt-issuer-ca-file only when the issuer uses a private CA other than the service DNS one.
  • The public MintActorCertificate RPC is removed (#3427 by Eitan Yarmush (@EItanya)). Calls return UNIMPLEMENTED. Remove references to its client method and message types before upgrading. Actor JWTs and the worker certificates atunnel uses are unchanged.
  • Worker pods need the new worker image before the new ate-controller (#2428 by Tom O'Rourke (@tjorourke)). Workers get runtime-specific capability sets and the pod template changed. Move every WorkerPool to the new worker image first; a microVM pool left on the old image stops working once ate-controller rolls it. The PR has the upgrade and rollback steps.
  • A .svc actor JWT issuer is trusted only through IssuerCAFile (#3358 by Anish Ramasekar (@aramase)). The credential-exchange sidecar no longer accepts a .svc issuer certificate that verifies only through the system roots. Set --actor-jwt-issuer-ca-file to the issuer's CA, or the sidecar fails at start.
  • Pools hold a little less (#3104 by Benjamin Elder (@BenTheElder)). A worker's capacity is its memory limit minus 64 MiB, and each microVM actor books its limit plus 128 MiB + 8 MiB/GiB. A pool sized to exactly fit its actors needs limits.memory raised by about that much. MicroVM guests now see their whole memory limit.

Behavior changes after upgrading:

  • Containers run as the image's USER and WORKDIR, and the image cache layout changed (#2392 by Benjamin Elder (@BenTheElder)). Images with a USER stop running as root and capabilities.add no longer helps a non-root user. After an upgrade or rollback, atelet refuses the old image cache: delete /var/lib/ate/image-cache on each node once no actor runs there, or reboot the node. A custom atelet securityContext needs CHOWN, DAC_OVERRIDE, FOWNER and FSETID.
  • /tmp and /dev/shm are tmpfs on both runtimes (#3533 by nybidari). ROOTFS snapshots no longer keep /tmp, and image-provided files there are hidden. MicroVM /tmp counts against actor memory, capped at half the guest's memory; gVisor /dev/shm is 64 MiB. Mount a durableDir at either path for persistence or more space. /run now comes from the image rootfs.
  • gVisor MEMORY snapshots from before this release don't restore (#3533, #3580, #2392). runsc restore rejects a checkpoint whose mounts or user differ from the new spec, so suspended gVisor actors crash on resume and templates created before the upgrade crash on first resume. RevertActor doesn't help. Recreate the templates and replace the actors. MicroVM actors are unaffected.
  • A gVisor durableDir root is now mode 0777, and its old MEMORY snapshots don't restore (#3457 by nybidari). The API guide always said 0777; gVisor gave the tmpfs default 01777, whose sticky bit stopped one user deleting another's files in the volume root. The mount now carries a mode=0777 option, and runsc restore rejects a MEMORY checkpoint whose mount options differ, so a gVisor actor whose template has a durableDir crashes on resume from a snapshot taken before this release, including the template's golden. Recreate those templates and replace actors holding an old MEMORY snapshot. Rollback breaks the same way. Dirs restored from VOLUMES or ROOTFS snapshots keep 01777.
  • MicroVM assets move to kata 4.3.1, Envoy to v1.39.5 (#3181 by Davanum Srinivas (@dims)). A microVM MEMORY snapshot taken on kata 4.1.0 restores at ROOTFS fidelity on its next resume: a fresh guest with its rootfs writes and volumes, no memory state. Recreate templates whose golden you want warm again.
  • A microVM actor that overshoots its booking is killed, not its worker (#3429 by Benjamin Elder (@BenTheElder)). Each actor's cgroup gets memory.high at what it books; one stuck there is killed and reported crashed with "killed for exceeding its memory limit". Other actors keep running. Without PSI the worker sets no limit and warns at startup.
  • MicroVM guests get containerd's default masked and read-only paths (#3249 by Huy Pham (@hdp617)). A uid 0 entrypoint can no longer write guest sysctls such as vm.max_map_count, matching gVisor. Goldens and checkpoints taken before this release keep a writable /proc/sys until re-taken.
  • WorkerPool NetworkPolicies are named substrate-<pool> (#3130 by Yufan Su (@yufan-su)). Pools with similar long names no longer share a policy. On an in-place upgrade the old substrate-<truncated>-<hash> policy stays until the pool is deleted; once the new one exists, delete the old ones with the command in the PR.
  • An actor and its worker assignment are written in one transaction (#3223 by Scott Funkenhauser (@sfunkenhauser)). Earlier releases could leave them out of sync after an interrupted write, and this release no longer repairs that. A worker that can't be deleted or an actor stuck in RESUMING is the symptom.
  • Atespace names must not be reused (#3450 by Shruti Nair (@SHRUTI6991)). A request authorized against a deleted atespace can apply to a new one with the same name, and nothing enforces uniqueness. Pick a new name instead.

Bug Fixes

Read more

v1.0.0 - "Fully armed and operational"

Choose a tag to compare

@github-actions github-actions released this 05 Nov 23:55
b34fbee
image of yolo the octopus, our logo, yolo is bright green has 8 arms and a few of them are holding colorful pastel toy robots, representing agents. this version of yolo is dressed up in a black cloak as palpatine, from star wars

Now witness the power of this fully armed and operational ... system for managing agents and agent-like workloads securely at scale.

Thank you to our MANY contributors who helped get us here! We couldn't have done it without you. ❤️

What's Changed

⚠️ Breaking Changes

Bug Fixes

Features: Networking and Egress

Features: Security and Identity

Features: Workers and Actors

Features: Install and Operations

Documentation

Other Changes

Read more

v1.0.0-rc.2

Choose a tag to compare

@github-actions github-actions released this 04 Nov 02:35

v1.0.0-rc.2 is the second release candidate for Substrate 1.0. It brings release-1.0 up to main as of November 3 and hardens the sandboxes before GA: actors run as the image's USER, capabilities.add is limited to a short allowlist, /tmp and /dev/shm are tmpfs, and mounts are nodev on both runtimes. It also fixes a worker outage from microVM memory overshoot, a 15 s stall on every atenet-router start, an actor and worker assignment that could drift apart, and the device plugin wedging after an atelet restart.

Upgrading from rc.1 is possible but breaks gVisor snapshots and needs an image cache reset. See Upgrading from v1.0.0-rc.1 at the end. Upgrading from v0.6.0 is not supported; reinstall.

What's Changed

⚠️ Breaking Changes

Settings to change before upgrading:

  • Snapshot location path segments are validated (#2784 by Anish Ramasekar (@aramase)). Each segment of --snapshot-location (SNAPSHOT_LOCATION) must match ^[A-Za-z0-9_-]+$ and cannot equal atespaces in any case. Fix the path before upgrading or ate-api-server refuses to start.
  • --cordon-control-plane is now --cordon-system-infra-components (#3210 by haiyanmeng). The env var is ATE_INSTALL_CORDON_SYSTEM_INFRA_COMPONENTS, the config key cordonSystemInfraComponents, and the shared pool label and taint ate.dev/workloadType=ate-system-infra. The old flag and config key fail; the old env var is ignored silently and the install stops cordoning. Relabel and retaint the pool, then redeploy with the new flag; the PR has the gcloud commands.
  • ActorTemplates may only add 12 capabilities (#3580 by Greg Castle (@destijl), #3487 by Benjamin Elder (@BenTheElder)). securityContext.capabilities.add accepts only AUDIT_WRITE, CHOWN, DAC_OVERRIDE, FOWNER, FSETID, KILL, NET_BIND_SERVICE, SETFCAP, SETGID, SETPCAP, SETUID and SYS_CHROOT; MKNOD, SYS_ADMIN, SYS_RAWIO and the rest are rejected at admission. Unknown names in add or drop are rejected too. Check your templates for typos and for capabilities outside the list. Unprivileged ping keeps working without NET_RAW.
  • Custom credential-exchange sidecars lose --actor-jwt-jwks-file (#3447 by Anish Ramasekar (@aramase)). The exchange now fetches keys through OIDC discovery. Drop the flag from custom sidecar configs, and set --actor-jwt-issuer-ca-file only when the issuer uses a private CA other than the service DNS one.
  • The public MintActorCertificate RPC is removed (#3427 by Eitan Yarmush (@EItanya)). Calls return UNIMPLEMENTED. Remove references to its client method and message types before upgrading. Actor JWTs and the worker certificates atunnel uses are unchanged.
  • Worker pods need the new worker image before the new ate-controller (#2428 by Tom O'Rourke (@tjorourke)). Workers get runtime-specific capability sets and the pod template changed. Move every WorkerPool to the new worker image first; a microVM pool left on the old image stops working once ate-controller rolls it. The PR has the upgrade and rollback steps.
  • Pools hold a little less (#3104 by Benjamin Elder (@BenTheElder)). A worker's capacity is its memory limit minus 64 MiB, and each microVM actor books its limit plus 128 MiB + 8 MiB/GiB. A pool sized to exactly fit its actors needs limits.memory raised by about that much. MicroVM guests now see their whole memory limit.

Behavior changes after upgrading:

  • Containers run as the image's USER and WORKDIR, and the image cache layout changed (#2392 by Benjamin Elder (@BenTheElder)). Images with a USER stop running as root and capabilities.add no longer helps a non-root user. After an upgrade or rollback, atelet refuses the old image cache: delete /var/lib/ate/image-cache on each node once no actor runs there, or reboot the node. A custom atelet securityContext needs CHOWN, DAC_OVERRIDE, FOWNER and FSETID.
  • /tmp and /dev/shm are tmpfs on both runtimes (#3533 by nybidari). ROOTFS snapshots no longer keep /tmp, and image-provided files there are hidden. MicroVM /tmp counts against actor memory, capped at half the guest's memory; gVisor /dev/shm is 64 MiB. Mount a durableDir at either path for persistence or more space. /run now comes from the image rootfs.
  • gVisor MEMORY snapshots from before this release don't restore (#3533, #3580, #2392). runsc restore rejects a checkpoint whose mounts or user differ from the new spec, so suspended gVisor actors crash on resume and templates created before the upgrade crash on first resume. RevertActor doesn't help. Recreate the templates and replace the actors. MicroVM actors are unaffected.
  • MicroVM assets move to kata 4.3.1, Envoy to v1.39.5 (#3181 by Davanum Srinivas (@dims)). A microVM MEMORY snapshot taken on kata 4.1.0 restores at ROOTFS fidelity on its next resume: a fresh guest with its rootfs writes and volumes, no memory state. Recreate templates whose golden you want warm again.
  • A microVM actor that overshoots its booking is killed, not its worker (#3429 by Benjamin Elder (@BenTheElder)). Each actor's cgroup gets memory.high at what it books; one stuck there is killed and reported crashed with "killed for exceeding its memory limit". Other actors keep running. Without PSI the worker sets no limit and warns at startup.
  • MicroVM guests get containerd's default masked and read-only paths (#3249 by Huy Pham (@hdp617)). A uid 0 entrypoint can no longer write guest sysctls such as vm.max_map_count, matching gVisor. Goldens and checkpoints taken before this release keep a writable /proc/sys until re-taken.
  • WorkerPool NetworkPolicies are named substrate-<pool> (#3130 by Yufan Su (@yufan-su)). Pools with similar long names no longer share a policy. On an in-place upgrade the old substrate-<truncated>-<hash> policy stays until the pool is deleted; once the new one exists, delete the old ones with the command in the PR.
  • An actor and its worker assignment are written in one transaction (#3223 by Scott Funkenhauser (@sfunkenhauser)). Earlier releases could leave them out of sync after an interrupted write, and this release no longer repairs that. A worker that can't be deleted or an actor stuck in RESUMING is the symptom.
  • Atespace names must not be reused (#3450 by Shruti Nair (@SHRUTI6991)). A request authorized against a deleted atespace can apply to a new one with the same name, and nothing enforces uniqueness. Pick a new name instead.

Bug Fixes

Read more

v1.0.0-rc.1

Choose a tag to compare

@github-actions github-actions released this 29 Oct 22:24
f86fde9

Container Images

Container images for v1.0.0-rc.1 are published to GitHub Container Registry (GHCR).

All images are tagged with v1.0.0-rc.1.

Available images: Agent Substrate GitHub Packages

To pull an image:

docker pull ghcr.io/agent-substrate/substrate/<image-name>:v1.0.0-rc.1

What's Changed

⚠️ Breaking Changes

Bug Fixes

Features: Networking and Egress

Features: Security and Identity

Features: Workers and Actors

Features: Install and Operations

Documentation

Other Changes

Read more

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 22 Oct 17:25
d3f2363

What's Changed

⚠️ Breaking Changes

Bug Fixes

Features: Networking and Egress

Features: Security and Identity

Features: Observabil...

Read more

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 22:22
e8d40c3

What's Changed

⚠️ Breaking Changes

Bug Fixes

Features: Networking and Egress

Features: Security and Identity

Features: Observability

Features: Workers and Actors

Features: Install and Operations

  • benchmarking: pace boomer to a target rate and add the resumepaused user class by haiyanmeng in #2350
  • ate-setup: have EnsureCRDs create only the missing CRDs by Haven Xia (@HavenXia) in #2585
  • Add --fake-data-plane to install a fake data plane for control-plane benchmarks by haiyanmeng in #2469

Dependencies

Documentation

Other Changes

Read more

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 08 Oct 00:15
756c2a5

What's Changed

⚠️ Breaking Changes

Bug Fixes

Features: Networking and Egress

Features: Security and Identity

Features: Observability

Features: Workers and Actors

Features: Install and Operations

Documentation

Other Changes

Read more

v0.3.0

Choose a tag to compare

@BenTheElder BenTheElder released this 30 Sep 23:40
ccecc78

What's Changed

Bug Fixes

Features: Networking and Egress

Features: Security and Identity

Features: Observability

Features: Install and Operations

Features: Workers and Actors

  • Add ActorDirs message to carry per-actor directories and and split the path packages by owner by Haven Xia (@HavenXia) in #1730
  • ateapi: release a suspend's replaced snapshot after committing SUSPENDED by haiyanmeng in #2006

Documentation

Other Changes

New Contributors

Full Changelog: v0.2.0...v0.3.0

Committers in this release

v0.2.0

Choose a tag to compare

@BenTheElder BenTheElder released this 25 Sep 22:26
10a1bfb

v0.2.0 adds multi-actor workers, per-sandbox networking, and egress policy enforcement, along with many fixes and API cleanups.

Substrate is still pre-1.0 and changes quickly. This release contains breaking changes to the API and the wire protocol. Please read them below before you upgrade.

Please try it out and file issues for anything you find.

Breaking Changes

  • Requests are now routed with an explicit ate-target-actor: <atespace>/<actor> header instead of the Host header. (#1333)
  • ActorTemplate.containers.readyz is renamed to wakeupProbe. (#1794)
  • The top-level boot field is removed from ResumeActorRequest. (#1548)
  • IPBlockRule is renamed to CIDRRule. (#1597)
  • SnapshotsConfig is renamed to SnapshotConfig. (#1791)
  • LocalSnapshotInfo is renamed to LocalSnapshot. (#1856)
  • A worker's sandbox_class is now immutable. (#1257)
  • Every Delete<Resource> method now takes DeletePreconditions. (#1807)
  • The egress gateway now enforces EgressPolicy. An actor without a policy has no egress, and traffic that no rule allows is denied. (#1545)
  • Actors can no longer send UDP to any port except DNS. (#1623)
  • Removed the unused TagStatus.source_actor_uid field (#1772), other unused messages (#1814), and reserved field numbers (#1793).
  • Removed the ate.scheduler.eligible_workers metric (#1804) and the ateerrors failure-reason taxonomy (#1817).
  • Snapshot storage paths now use Tag UIDs. (#1521)
  • kubectl ate now prints a single resource as a bare object, not a list. (#1627)

Features

Workers and Actors

  • A worker can now run more than one actor at a time. (#1836)
  • Each actor sandbox gets its own network namespace. (#1689)
  • New RevertActor lifecycle RPC. (#1675, #1711)
  • ActorStatus now reports the crash reason and when it happened. (#1867)
  • An actor is marked crashed when an ateom checkpoint or restore fails with a non-retriable error. (#1220)
  • ateom can now suspend actors itself. (#1779)
  • ActorTemplate golden snapshots are published as tags. (#1523)
  • ExternalSnapshot records the actor_template_uid of each snapshot. (#1713)
  • The same volume can be mounted at more than one path. (#1611)
  • The actor template resync interval is configurable. (#1522)
  • The actor termination grace period is now 30 minutes. (#1565)
  • API fields can have defaults. (#1630, #1674)

Networking and Egress

  • The egress gateway enforces each actor's EgressPolicy. (#1545)
  • An egress credential injector (#1360), plus an example credential provider that reads Kubernetes Secrets (#1335, #1811).
  • kubectl ate can get, create, and update egress policies. (#1659, #1813)
  • atunnel supports looking up the original destination over IPv6. (#753)
  • The parking lot takes its slots when a request parks, not when it is admitted. (#1229)
  • Initial Envoy Dynamic Modules for the dataplane. (#1535)
  • agentgateway is tested in CI. (#1598)

Security and Identity

  • Groundwork for authorization: an OpenFGA model for atespaces, served from the API server. Checks are not enforced yet. (#1233, #1670, #1839)
  • Actor JWT and certificate minting moved into the API server. (#1315, #1626)
  • Running actors receive rotated projected trust bundles without a restart. (#1231)
  • Support for PodCertificateRequest v1, falling back to v1beta1. Needed on clusters that no longer serve v1beta1. (#1829)
  • Secret-bearing proto fields are marked debug_redact and redacted from RPC logs. (#1803, #1822)
  • The CSI plugin caches its CA certificate pool. (#1344)

Observability

  • Actor lifecycle events are emitted over OTLP. (#1658, #1638, #1771)
  • atelet emits per-actor usage events. (#1206, #1559)
  • The OTLP relay forwards log records, and ateoms get a LoggerProvider over it. (#1800, #1857)
  • ate.worker.state reports worker occupancy in actor slots. (#1854)
  • ate.sandbox.class is bounded by one rule for every emitter. (#1484)
  • Each component logs its build version at startup. (#1569)

Install and Operations

  • The namespace, Service names, and ServiceAccount names are configurable. (#350)
  • A large-cluster install option, and an option to run each control-plane component on a dedicated machine. (#1632)
  • Tolerations to isolate workload types on tainted nodes. (#1874)
  • atelet sets resource requests and a priority class. (#1651)
  • The worker Deployment has an explicit rollout strategy. (#1783)
  • setup-gcp gains --enable-nested-virtualization and other improvements. (#1669, #1616)
  • ko base images are pinned by digest. (#1500)
  • Micro-VM kata assets are bumped to 4.1.0 (#1708), and the kata-config asset is dropped (#1704).
  • kubectl ate fixes, including better get workers output. (#1536, #1577, #1733)

Bug Fixes

  • Fixed the kind install on arm64 hosts. (#1869)
  • In-progress snapshots no longer leak after a worker is deleted. (#1541)
  • atelet removes an actor's directory when it terminates the actor (#1654), and ateom removes its directory on graceful shutdown (#1678).
  • ateom-gvisor deletes an actor's containers before its sandbox (#1847), treats a container runsc has no record of as already destroyed (#1666), and keys cgroup leaves by actor UID (#1667).
  • ateom-gvisor names its root container _pause so no actor container can collide with it. (#1496)
  • ateom-gvisor no longer passes -direct to runsc restore. (#1549)
  • ateom-microvm finds leftover VMM processes by their staged path. (#1843)
  • Stale named network namespaces are replaced. (#1682)
  • Stale system-info volume registrations are superseded in atelet. (#1684)
  • atelet caches pool resolutions so a list flap cannot split the CPU counter. (#1479)
  • The API server always resolves the atelet IP from the node name. (#1742)
  • An API server replica applies its own worker writes to its cache at commit. (#1583)
  • Worker pool changes now propagate to workers. (#1636)
  • atenet reports "unknown" when a resume does not complete (#1482), and has a longer default route timeout (#1529).
  • ListActorTemplates maps pagination errors correctly. (#1595)
  • Teardown can now delete crashed actors (#942) and waits for the ate-system namespace to terminate (#1851).
  • More validation at template creation: snapshot storage location (#1493), system-info projection paths (#1439), and container image (#1614). Added declarative validation for TagStatus and GoldenSnapshotStatus (#1772, #1831).

Documentation

  • The upgrade runbook is reorganized. (#1624)
  • The supported egress traffic for GA (#1749), how the gateway enforces an EgressPolicy (#1545), and the atunnel to PEP contract (#1726).
  • A metrics best-practices guide for component authors. (#1553)
  • Warnings that worker node pools must not auto-upgrade or use spot nodes (#1528), and about the 30-minute eviction window (#1618).
  • Added MAINTAINERS.md (#1499), and welcomed Keith Mattix as a maintainer (#1806).

Thank you to all of our contributors.

Committers in this release include:

v0.1.0 - The First Release

Choose a tag to compare

@BenTheElder BenTheElder released this 10 Sep 23:39
fa6d949

v0.1.0 Marks our first "real" release.

Substrate is still evolving rapidly and will continue to make breaking changes for the immediate future, but we think the system is ready for early testing.

Please try it out and submit issues for the things you find!

  • If something you thought should work, doesn't. Let us know.
  • If something doesn't work the way you think it should, please file a bug.
  • If you find a missing feature, check if we're already tracking it and if not please file a feature request.

Say hi to Yolo the Octopus, our logo and mascot:

image


Thank you to all of our contributors.

Committers in this release include: