Repository navigation
v1.0.0-rc4
What's Changed
Other Changes
- Sync upstream v1 APIs and sandbox lifecycle fixes by @EItanya in #97
- Sync upstream runtime, release, and Helm updates by @EItanya in #103
- Sync upstream runtime, AgentGateway, and documentation updates by @EItanya in #104
- Sync release-1.0 with upstream backports by @EItanya in #108
- [release-1.0] Maintain fork release branches and unify publishing by @EItanya in #109
- feat(helm): configure the router request parking budget on release-1.0 by @renato0307 in #118
- Sync release-1.0 with upstream by @EItanya in #120
- Sync release-1.0 to upstream rc2 by @EItanya in #121
- [backport] charts/substrate: expose router timeouts with 60s defaults by @shashankram in #134
- Sync release-1.0 with upstream by @EItanya in #133
- Add a substrate-atelet chart for upgrading atelet separately by @iplay88keys in #135
Full Changelog: v0.6.0...v1.0.0-rc4
Images
Container images for this release are published as ghcr.io/kagent-dev/substrate/<image>:v1.0.0-rc4 for linux/amd64 and linux/arm64. The images a release publishes are listed in Release images.
Install
From a checkout of v1.0.0-rc4, with Go, install the release images into the current kubectl context. On GKE, the default --sandbox-classes=gvisor,microvm downloads microVM guest assets from GitHub and uploads them with gcloud to gs://<bucket>-assets (created with atelet read access by tools/setup-gcp create bucket and create iam in https://github.com/ai-on-gke/substrate-gke). Add --kind for a kind cluster, or --sandbox-classes=gvisor to skip microVM staging.
git clone --depth 1 --branch v1.0.0-rc4 https://github.com/kagent-dev/substrate.git
cd substrate
go run ./cmd/ate-setup deploy ate-system \
--image-repo ghcr.io/kagent-dev/substrate --image-tag v1.0.0-rc4 \
--storage-bucket-name=<bucket> \
--credential-provider='{"name":"k8s.io"}' \
--ingress-allowed-spiffe-ids=<SPIFFE IDs of your ingress clients>See Installing pre-built images for the flags.
kubectl-ate
kubectl-ate is attached for Linux and macOS on amd64 and arm64. Download the binary for your platform and its .sha256 file, check it, and put it on your PATH as kubectl-ate:
shasum -a 256 -c kubectl-ate-linux-amd64.sha256
install -m 0755 kubectl-ate-linux-amd64 ~/.local/bin/kubectl-ateHelm charts
Charts are published at oci://ghcr.io/kagent-dev/substrate/helm with version 1.0.0-rc4. Install them in this order:
substrate-crdssubstrate-podcertsubstrate-atelet, with--waitsubstrate, withatelet.enabled=false
substrate-atelet is new in this release. It installs atelet as its own release, so atelet can be upgraded before ate-api-server, as the version skew policy requires. The substrate chart still installs atelet by default, but that is deprecated. See the substrate-atelet README for its values.
Upgrade the releases in this order: substrate-podcert, substrate-atelet with --wait, each WorkerPool's workerImage, substrate-crds, then substrate.
Moving atelet to substrate-atelet
An existing install keeps atelet in the substrate release, and upgrades as before. To move atelet to substrate-atelet while upgrading to this release, run the steps below. They need Helm 3.17 or later.
REPO=oci://ghcr.io/kagent-dev/substrate/helm
V=1.0.0-rc4
helm get values substrate -n ate-system -o yaml > substrate-values.yaml
helm get values substrate-podcert -n podcertificate-controller-system -o yaml > podcert-values.yaml
# substrate-atelet takes the object store under objectStore. With the bundled
# RustFS, use the substrate release's rustfs.accessKey and rustfs.secretKey.
kubectl create secret generic rustfs-credentials -n ate-system \
--from-literal=AWS_ACCESS_KEY_ID=rustfsadmin \
--from-literal=AWS_SECRET_ACCESS_KEY=rustfsadmin
cat > atelet-values.yaml <<EOF
objectStore:
endpoint: http://rustfs.ate-system.svc:9000
region: us-east-1
pathStyle: true
credentialsSecret: rustfs-credentials
EOF
ATELET=(substrate-atelet $REPO/substrate-atelet --version $V -n ate-system \
-f substrate-values.yaml -f atelet-values.yaml)
atelet_objects() { helm template "${ATELET[@]}" | kubectl get -f - --ignore-not-found -o name; }
# 1. Upgrade the certificate controller.
helm upgrade substrate-podcert $REPO/substrate-podcert --version $V \
-n podcertificate-controller-system -f podcert-values.yaml --wait
# 2. Keep the atelet objects when the substrate release stops rendering them.
kubectl annotate -n ate-system --overwrite $(atelet_objects) helm.sh/resource-policy=keep
# 3. Adopt atelet in its own release and upgrade it.
helm upgrade --install "${ATELET[@]}" --take-ownership --wait
# 4. Set each WorkerPool's workerImage to the v1.0.0-rc4 ateworker image.
# 5. Upgrade the CRDs and the control plane without atelet. Pass -n if
# substrate-crds is installed in another namespace.
helm upgrade substrate-crds $REPO/substrate-crds --version $V --wait
helm upgrade substrate $REPO/substrate --version $V -n ate-system \
-f substrate-values.yaml --set atelet.enabled=false --wait
# 6. Remove the keep policy.
kubectl annotate -n ate-system $(atelet_objects) helm.sh/resource-policy-Step 2 is required. Without it, step 5 deletes the atelet DaemonSet even though substrate-atelet owns it. Helm deletes every object the old release listed. atelet_objects lists only objects that exist, so it skips ones this release adds, like the atelet-critical-pods ResourceQuota.
Step 3 restarts atelet once, as a rolling update. With the bundled RustFS, the substrate chart sets the object store credentials as literal environment values, and substrate-atelet reads them from a Secret.
If another chart manages your WorkerPools, update workerImage through that chart in step 4.
Committers in this release
- @adamwathieu
- @aditya-shantanu
- @adrianludwin
- @annapendleton
- @aramase
- @BenTheElder
- @bochengchu
- @chuangw6
- @chw120
- @cloudonly
- @dberkov
- @destijl
- @dims
- @EItanya
- @ericcurtin
- @fvoznika
- @haiyanmeng
- @HavenXia
- @hdp617
- @igooch
- @iplay88keys
- @jiayimeow
- @juli4n
- @keithmattix
- @laoj2
- @LiorLieberman
- @mastersingh24
- @maxsmythe
- @mikedickey
- @moficodes
- @msau42
- @MushuEE
- @noahlwest
- @nybidari
- @QuentinBisson
- @renato0307
- @rikatz
- @roycaihw
- @sairajp-rewind
- @sfunkenhauser
- @shashankram
- @SHRUTI6991
- @shrutiyam-glitch
- @Sneha-at
- @stshrive
- @teemow
- @thompsonmax
- @tjorourke
- @ygao-g
- @yufan-su
- @zoez7