Skip to content

v1.0.0-rc4

Choose a tag to compare

@github-actions github-actions released this 05 Nov 22:18
· 95 commits to main since this release
7ebca71

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-ate

Helm charts

Charts are published at oci://ghcr.io/kagent-dev/substrate/helm with version 1.0.0-rc4. Install them in this order:

  1. substrate-crds
  2. substrate-podcert
  3. substrate-atelet, with --wait
  4. substrate, with atelet.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