tare install
Install the complete Agent Router dataplane in a single command.
Synopsis
tare install <identity-file> [flags]
Description
tare install performs the full operator workflow:
- Load and validate the identity (service-account) file
- Optionally sync pinned images and the
serve-helmOCI chart to a private registry (--image-sync) - Optionally create a Kubernetes
dockerconfigjsonpull secret (--image-pull-secret-stdin) - Generate Helm values
helm upgrade --installthe Agent Router dataplane chart- Optionally wait for pods to be ready (
--wait)
helm and kubectl are downloaded automatically on first run into
~/.tare/tools/ and reused on subsequent runs.
By default (--ha=true) the data-plane Envoy proxy +
sidecar'd ExtProc deploy with HA-safe values: HPA minReplicas: 2,
PDB minAvailable: 1, and EnvoyProxy.spec.shutdown.drainTimeout: 300s
for graceful drain of in-flight LLM streams. If the target cluster has
no metrics.k8s.io APIService (metrics-server absent), tare install
prints a non-fatal warning: the install-time floor of 2 still applies
but the HPA cannot autoscale beyond it. Pass --ha=false for
single-replica installs (lab / CI).
The egress extproc sidecar (ai-gateway-extproc) that the AI Gateway injects
ships with a conservative default CPU request, so the HPA works out of the box.
HPA utilization is computed across every container in the egress pod, and a
container with no CPU request leaves the HPA unable to compute a value
(FailedGetResourceMetric: missing request for cpu in container ai-gateway-extproc).
The request is part of the HPA's aggregate denominator (the target percentage is
measured against the summed envoy + extproc requests), so if the default does
not match the observed traffic, override it in the data plane Helm values
(tare install / tare upgrade --helm-values <file>):
egressResources:
egress:
extProc:
resources:
requests:
cpu: 250m # size to observed extproc CPU (kubectl top pod --containers)
memory: 256Mi
limits:
memory: 512Mi
Set this in the persistent values, not with a live kubectl edit: the egress
objects are reconciled and an in-cluster edit is overwritten. No CPU limit is set
by default (a CPU limit would throttle the sidecar); the memory limit guards OOM.
The shipped values are a conservative starting point, not a universal setting. Under representative load, watch the sidecar with kubectl top pod -n tars-dataplane --containers and adjust for the cluster:
- Raise
limits.memoryif extproc approaches it: the memory limit is a hard cap, so an under-sized value causes OOM kills under heavy or large-payload traffic. - Size
requests.cputo real usage. It feeds the HPA's aggregate denominator, so it directly shifts the scale-out threshold.
Node size, request volume, and payload size all affect the right numbers, so the same values will not fit every environment.
Fresh installs pick up the request automatically. On an upgrade, the running egress pods keep their old request-less sidecar until they restart (the request is injected only at pod admission), so the HPA stays FailedGetResourceMetric until the deployment is rolled:
kubectl rollout restart deployment/egress -n tars-dataplane
When upgrading from a version that predates the GatewayConfig CRD (gatewayconfigs.aigateway.envoyproxy.io), apply CRDs first. tare upgrade does not reapply them, so helm upgrade otherwise fails with no matches for kind "GatewayConfig":
tare install --crds-only # then run your upgrade
--serve-urlThe data plane no longer registers its own gateway URL: registering it is a management-plane action, done in the Admin Dashboard under System → Settings → Data planes, which fires a PROXY_URL configuration event that updates the running data plane's tars-config. A data-plane service account is deliberately not an operator, so the registration API refuses it.
What --serve-url does now depends on the CLI version. On 0.3.0 and later it is accepted, prints a deprecation notice, and is otherwise ignored, so existing scripts keep working. On older CLIs it still calls the registration API, and the install fails before Helm runs; see the registration error below.