Skip to main content

tare install

Install the complete Agent Router data plane in one command.

Steps performed:
1. Load and validate the identity (service-account) file
2. Optionally sync images and the serve-helm OCI chart to a private registry (--image-sync)
3. Optionally create a Kubernetes dockerconfigjson pull secret (--image-pull-secret-stdin)
4. Generate Helm values and deploy via "helm upgrade --install"
5. Wait for pods to become ready (disable with --no-wait)

helm and kubectl are downloaded automatically on first run if not already present
(on supported platforms: darwin/arm64 and linux/amd64). Before rendering manifests
or touching the cluster, tare runs preflight checks (Helm 3+, kubectl, and for live
installs cluster connectivity). Set TARE_SKIP_PREFLIGHT=1 or use --skip-preflight
to bypass these checks (e.g. in constrained CI).

On an interactive terminal, if you omit --enable-otel-collector, tare asks (before
Helm install) whether to enable the in-cluster OpenTelemetry collector and prompts
for the OTLP endpoint and optional settings (GCP Workload Identity is asked only when
the OTLP auth header uses berglas sm://). Prompts read from /dev/tty when available
so Helm install is not blocked by stdin buffering. Skipped in CI, pipes, when using
--image-pull-secret-stdin, or when you pass --enable-otel-collector explicitly.

A second wizard asks whether to set HTTP_PROXY / HTTPS_PROXY / NO_PROXY env on the
controller, controller-worker, and data-plane Envoy pods. It runs before values are
generated, so --print-helm-values also reflects the wizard answers. Skipped when any
of --http-proxy / --https-proxy / --no-proxy is passed explicitly, in CI/pipes, or
when --image-pull-secret-stdin has already consumed stdin.

Examples:
# Sync images to the registry, then install
tare install identity.json --image-sync acme.registry.com

# Install only: use images already in this registry (no copy step)
tare install identity.json --image-registry acme.registry.com

# Sync images only; exit before install
tare install identity.json --image-sync acme.registry.com --sync-only

# Apply CRDs only; exit before namespaces / Helm install
tare install identity.json --crds-only

# Mirror-to-mirror sync: pull from an existing mirror (--image-registry),
# push to a new one (--image-sync). The source override only applies when
# --image-sync is also set.
tare install identity.json \
--image-registry acme.registry.com \
--image-sync acme1.registry.com --sync-only

# Print generated Helm values without deploying
tare install identity.json --print-helm-values

# Print all Kubernetes resources for a GitOps workflow (no cluster access needed)
tare install identity.json --print-resources

# Full workflow: sync + pull secret + install
echo "user:password" | tare install identity.json \
--image-sync acme.registry.com \
--image-pull-secret-stdin

# Optional: deploy the in-cluster OTEL collector (requires endpoint; headers/WI optional).
# Use --otel-collector-otlp-tls-insecure=false when the OTLP server uses TLS with verification.
# customer_id is added to collector metrics from identity customerId unless --customer overrides.
tare install identity.json --image-registry REGISTRY \
--enable-otel-collector \
--otel-collector-endpoint 'https://otel.example.com:4317'

Usage:
tare install <identity-file> [flags]

Flags:

Main:
--disable-hpa Disable HPA for all supported components
--disable-pdb Disable PDBs for all supported components
--drain-timeout-seconds int EnvoyProxy.spec.shutdown.drainTimeout (seconds). Maximum time Envoy waits for in-flight requests (long LLM streams) to finish before SIGKILL. Drives the Pod's terminationGracePeriodSeconds. (default 300)
--ha Deploy the data-plane Envoy proxy with HA-safe defaults (HPA min 2, PDB min 1). Pass --ha=false for single-replica lab/CI installs. (default true)
--no-wait Return after Helm finishes; do not wait for pods to be ready (overrides --wait)
--wait Wait for pods to be ready after deploy (default true; use --no-wait to disable) (default true)


Registry:
--image-pull-secret-name string With --image-pull-secret-stdin: name for the created secret (default: tars-image-pull-secret). Without: reference an existing secret by this name
--image-pull-secret-stdin Read 'user:password' from stdin and create a Kubernetes dockerconfigjson pull secret
--image-sync string Sync images and the serve-helm OCI chart to this registry before install; sets --image-registry to this destination after the sync (unless --image-registry was used to override the source)
--include-manage-images tare manage install With --image-sync/--print-images: also mirror the management-plane images (app, auth, dashboard, bootstrapper). Off by default — a data plane never runs these, so requiring them would break a registry meant only to serve data-plane installs/upgrades. Does not affect the image precheck. tare manage install has no image-sync path of its own yet, so this is currently the only way to mirror the management-plane tier.
--skip-image-precheck Skip the image-completeness precheck that runs before image sync / install (also TARE_SKIP_IMAGE_PRECHECK=1)
--sync-only Sync images (requires --image-sync) then exit without deploying
--upgrade-src-registry string Override the self-upgrade SOURCE registry (TARS_UPGRADE_SRC_REGISTRY on controller/worker; default registry.tetrate.ai). The destination is always --image-registry. For e2e/staging/air-gapped that mirror release images to a private registry.


Telemetry:
--enable-otel-collector Deploy the in-cluster OpenTelemetry collector and egress ALS (requires --otel-collector-endpoint)
--otel-collector-endpoint string OTLP endpoint for telemetry export (required with --enable-otel-collector)
--otel-collector-image-repository string Short image repository under global.imageRegistry (default: otel-collector-berglas)
--otel-collector-image-tag string Override otel-collector-berglas image tag (default: embedded manifest)
--otel-collector-otlp-tls-insecure Set otelCollector.exporters.otlp.tls.insecure (when true, skip TLS verification) (default true)
--otel-collector-workload-identity-email string GCP service account email for Workload Identity (collector ServiceAccount annotation)
--otel-exporter-auth-headers string Authorization header value for OTLP export (plain or sm:// for berglas)


Networking:
--forward-proxy-address string Explicit override for envoy's LLM-egress forward proxy (EGRESS_FORWARD_PROXY_ADDRESS on the ai-gateway-controller). Default: auto-derived from --http-proxy. Pass a different host:port to point envoy at a separate egress proxy; pass --forward-proxy-address="" to disable the LLM tunnel while keeping --http-proxy on for the controller/worker (Fiserv-style topology where the LLM is reachable in-VNet but the management plane needs a proxy).
--forward-proxy-no-proxy strings Host-name suffixes to exempt from envoy's LLM forward-proxy egress (comma-separated, e.g. .openai.azure.com,.privatelink.openai.azure.com). Only effective when the forward proxy is active. Case-insensitive; leading dot tolerated. Use for in-VNet LLM endpoints reachable directly (Azure Private Endpoint, GCP PSC, private DNS) while keeping the proxy on for other LLM endpoints.
--http-proxy string Outbound HTTP_PROXY env for controller/worker/Envoy pods (e.g. http://10.10.2.4:8888). Omit on a TTY to be prompted interactively (skipped in CI/pipes). Envoy itself does not honour HTTP_PROXY directly; by default the ai-gateway-controller derives EGRESS_FORWARD_PROXY_ADDRESS (host:port) from this and the eaigw extension server tunnels every LLM-bound upstream through it via HTTP CONNECT. Use --forward-proxy-address to override or disable that auto-derive.
--https-proxy string Outbound HTTPS_PROXY env for controller/worker/Envoy pods (e.g. http://10.10.2.4:8888). Omit on a TTY to be prompted (defaults to --http-proxy when left blank in the wizard).
--no-proxy string Outbound NO_PROXY env for controller/worker/Envoy pods (e.g. .svc,.cluster.local,10.0.0.0/8). Omit on a TTY to be prompted (skip with Enter).
--upgrade-manifest-base-url string Override the self-upgrade release-manifest base URL (TARS_UPGRADE_MANIFEST_BASE_URL on controller/worker; default https://tare.tetrate.ai/tools/tags). For e2e/staging/air-gapped.
--upgrade-manifest-certificate-identity-regexp string Override the trusted Sigstore certificate identity regexp for a private release workflow
--upgrade-manifest-certificate-oidc-issuer string Override the trusted Sigstore certificate OIDC issuer for a private release workflow


Inspect:
--crds-only Apply CRDs to the cluster then exit; skip namespaces, pull secret, Helm install, and wait. Cannot be combined with --sync-only, --image-sync, --image-pull-secret-stdin, or any --print-* flag.
--print-helm-values Print generated Helm values to stdout without deploying
--print-images Print the list of images and exit; combine with --image-sync to show src→dst pairs
--print-resources Print all Kubernetes resource manifests via helm template to stdout without applying


Output:
--parallel int Number of images to sync concurrently (1 = serial, recommended 2-4) (default 3)
--progress string Image-sync progress display: auto|tty|plain|none (default "auto")
--stall-threshold duration Flag image sync as stalled after this duration of zero throughput; escalate at 2x (default 30s)


Other:
--argocd-namespace string Namespace where ArgoCD Applications live; pre-check uses this to detect mixed-deployment (default: argocd). Set to empty string to disable the check.
--clear-tolerations Drop the data plane's pod tolerations instead of carrying them forward on a re-run over an existing release. Omitting --toleration preserves whatever that release holds, so this is the only way to remove them; the pods it moves may not be schedulable anywhere else. No effect on a fresh install. Conflicts with --toleration.
--enable-metrics-server Install a Kubernetes metrics-server (off by default). Enable only on clusters that lack one — managed Kubernetes (GKE/EKS/AKS) ships its own, and a second instance fights over the cluster-singleton metrics API. Gives tare doctor live CPU/RAM; without it the doctor falls back to pod requests/limits.
--enable-semantic-router Enable the semantic-router guardrail provider (off by default; heavyweight — PVC, multi-Gi memory, model downloads). Renders the semanticrouter + semanticrouter-aux workloads. Per-workload nodeSelector/tolerations/affinity are set via the dashboard "Build install values" form; the global --toleration flag also applies to these pods.
--force-gateway-api-crds Apply the Gateway API CRDs bundled with this chart even when the cluster already serves them, overriding the Gateway API version-floor check (also TARE_FORCE_GATEWAY_API_CRDS=1). Use only where tare manages the Gateway API CRDs on this cluster: where a managed addon owns them (GKE, EKS, AKS), the apply takes field ownership that the addon's reconciler will take back. It applies the bundled CRDs only when the cluster is at or below the version this build requires; it will not downgrade a cluster that is ahead.
--ignore-argocd Proceed even when ArgoCD manages the system namespace.
--ignore-flux Proceed even when a Flux HelmRelease manages the system namespace (mixed-deployment override).
--smoke-api-key string Inference API key for the post-apply data plane smoke tests. Prefer TARS_API_KEY — a key passed here lands in shell history and the process list. Mint one from the management-plane dashboard. Without it, only the credential-free auth check runs.
--smoke-mcp-route string MCP route path to establish a post-apply session against (e.g. /mcp/<profile-id>). Omit to skip.
--smoke-model string Model to send a real post-apply request to (e.g. gpt-4o-mini). Requires --smoke-api-key. Spends a few tokens on the named model to prove inference and streaming work end to end. Omit to skip.
--smoke-timeout duration Per-request timeout for the post-apply data plane smoke tests. (default 30s)
--toleration helm upgrade --install Pod toleration applied to every data-plane component that schedules on tainted nodes: egress envoy, redis, ratelimit, the label-namespace Job, tareDoctor CronJob, and the configMonitor CronJob (when enabled). Repeatable. Format: key[=value]:effect[:tolerationSeconds]. Examples: --toleration nodepool:NoSchedule (Exists operator), --toleration nodepool=workload:NoSchedule (Equal operator). effect ∈ NoSchedule|PreferNoSchedule|NoExecute. Default: empty (no toleration rendered). On a re-run over an existing release (install is helm upgrade --install), omitting this flag carries the release's existing tolerations forward; pass --clear-tolerations to drop them. Per-component overrides are dashboard-only — use the "Build install values" form to taint a single component differently from the rest.