Skip to main content
Version: STS 2026.11.0

On k3d (Locally)

Install the Agent Manager on a local Kubernetes cluster using k3d — a lightweight tool that runs Kubernetes inside Docker.

Just want it running?

Use the Run One Command tab under Install: one script creates the cluster and installs everything. Use the Guided Install tab when you want to understand the full setup or need to customize it.

Short-term support (STS) release

2026.11.0 is a short-term support (STS) release available for evaluation. Agent Manager's charts and images, including the API Platform gateway, are hosted on registry.wso2.com and require registry credentials. To obtain these credentials, download Agent Manager from the WSO2 website to receive them by email, or use the credentials provided with your WSO2 subscription. Other components, such as OpenChoreo and the Gateway Operator chart, are hosted on public registries such as ghcr.io. See About the STS Release for more information.

Stronger agent isolation tiers

Agents run sandboxed under the standard runc runtime by default. Agent Manager also supports stronger per-environment isolation tiers — gVisor (userspace kernel) and Kata Containers (per-agent VM) — but they have hardware/OS requirements and need a dedicated node. For more information, see the gVisor and Kata Containers setup guides.

What You Will Get​

Agent Manager is a two-layer system installed in two phases:

  • Phase 1 — OpenChoreo (base layer): OpenChoreo is an open-source platform that provides the Kubernetes infrastructure Agent Manager runs on. It consists of four planes: a Control Plane for API and configuration, a Data Plane for running workloads and gateways, a Workflow Plane for builds and CI pipelines, and an Observability Plane for traces, logs, and metrics via OpenSearch.

  • Phase 2 — Agent Manager : The AI agent management platform installed on top of OpenChoreo. It includes Thunder (identity provider — installed with OpenChoreo since it provides JWT validation for all planes), the Console (web UI), AMP API (backend), AI Gateway, PostgreSQL (database), Secrets Extension (OpenBao for runtime secret injection), Agent Manager Observer (traces, logs, and metrics), and Evaluation Engine (automated agent evaluations).

This guide installs both layers on a single-node k3d cluster on your local machine.

Not for production

This k3d setup is for local development and evaluation only, and is not supported for production. For a production deployment, follow On Your Environment, then check it against the production recommendations.

Its secret store, OpenBao, runs in dev mode and keeps secrets in memory only, so restarting Docker, Colima or your machine loses them. Troubleshooting covers what fails and how to recover.

Prerequisites​

Hardware​

ResourceMinimum
RAM8 GB
CPU4 cores
Disk~10 GB free

Required Tools​

ToolVersionPurpose
Dockerv26.0+Container runtime
kubectlv1.32+Kubernetes CLI
Helmv3.12+Kubernetes package manager
k3dv5.8+Local Kubernetes clusters

Verify all tools:

docker --version && kubectl version --client && helm version && k3d version
macOS with Colima

If you use Colima instead of Docker Desktop, start a dedicated agent-manager profile so the install does not interfere with your default Colima instance:

colima start --profile agent-manager \
--vm-type=vz --vz-rosetta --network-address \
--cpu 4 --memory 8

--network-address assigns the VM a stable IP so the cluster keeps working after network changes.

Choose --cpu and --memory now rather than adjusting them later. Changing either requires restarting the VM, which can leave an already-created k3d cluster unable to start. Troubleshooting covers the recovery if you hit this.

Whenever you restart Colima, start the cluster through k3d afterwards (k3d cluster stop amp-local && k3d cluster start amp-local) rather than relying on Docker to bring its containers back. Troubleshooting explains why.

On Apple silicon, install Rosetta 2 first (softwareupdate --install-rosetta). Without it, Colima runs amd64 images, including the images built for platform-hosted agents, under QEMU emulation, and a Python agent can take longer to start than its startup probe allows.

For the guided install, prefix the cluster creation command in Step 1 with K3D_FIX_DNS=0. The one-command installer sets it for you.

Required Ports​

The following host ports must be free before installation. The Agent Manager services do not need host ports of their own: the Console and API are served through the Control Plane gateway (8080), the Agent Manager Observer through the Observability Plane gateway (11080), and trace ingestion through the Data Plane gateway (19080).

PortPurpose
6550Kubernetes API
8080Control Plane Gateway (HTTP) — Console, API, Thunder, OpenChoreo API, external AI gateway control plane
8443Control Plane Gateway (HTTPS)
19080Data Plane Gateway (HTTP) — deployed agents, OTLP /otel ingest
19443Data Plane Gateway (HTTPS)
10082Container Registry (Workflow Plane)
11080Observability Plane Gateway (HTTP) — Agent Manager Observer, Observer API
11082OpenSearch API
11085OpenSearch HTTPS

Install​

Pick how you want to install it:

One script creates the cluster and installs every plane, plus Agent Manager:

curl -fsSL https://github.com/wso2/agent-manager/releases/download/amp/v2026.11.0/k3d-install-subscription.sh | bash -s -- --project <project>

Replace <project> with wso2-agent-manager for a subscription, or wso2-agent-manager-evaluations for an evaluation. The script asks for your registry credentials and installs the newest published version. To install a particular version, add --version, for example --version 2026.11.0-u2. See About the STS Release for its options.

The script:

  1. Checks that Docker is running and that k3d, kubectl, Helm, curl, tar, and lsof are installed.
  2. Signs in to registry.wso2.com with your registry credentials and finds your version: the one you named with --version, or the newest one published.
  3. Downloads the 2026.11.0 release bundle into ~/.wso2-agent-manager/subscription/<project>/<image tag>/.
  4. Creates the amp-local k3d cluster and installs the four OpenChoreo planes and Agent Manager, pulling the Agent Manager charts and images and the API Platform gateway from the registry. These are the same steps as the Guided Install tab.
  5. Prints the console URL, the admin login, and the version it installed when it finishes.

The install takes about 15-20 minutes, and it is safe to rerun if it stops part way. On Colima, the script sets K3D_FIX_DNS=0 for you.

When it completes, continue with Verify and Access the Platform.


Verify and Access the Platform​

Run a full status check to confirm everything is running:

# All pods across key namespaces
kubectl get pods -n openchoreo-control-plane
kubectl get pods -n openchoreo-data-plane
kubectl get pods -n openchoreo-workflow-plane
kubectl get pods -n openchoreo-observability-plane
kubectl get pods -n wso2-amp
kubectl get pods -n amp-thunder
# Helm releases
helm list -A | grep -E 'openchoreo|amp|gateway'
ServiceURL
Agent Manager Consolehttp://console.amp.localhost:8080
Agent Manager APIhttp://api.amp.localhost:8080
Agent Manager Observerhttp://traces.amp.localhost:11080
OTLP trace ingest (HTTP)http://default-default.gateway.localhost:19080/otel

Console login: the username is admin; the password was generated at install time. Retrieve it with:

kubectl get secret amp-admin-credentials -n amp-thunder -o jsonpath='{.data.password}' | base64 -d
HTTPS ingest is disabled by default on this setup, and enabling it doesn't cover the documented hosts

values-dp.yaml, installed in Step 8 of the guided install (the one-command installer applies the same file), sets gateway.tls.enabled: false even though it already configures httpsPort: 19443 and a certificateRefs entry pointing at the gateway-tls Secret (created earlier by cert-manager). With TLS disabled, the Data Plane's gateway-default Gateway/Service only get an http listener — there is no 19443 listener to connect to, so an HTTPS OTLP endpoint is not reachable on a default install.

Turning gateway.tls.enabled on would not make the OTLP host above reachable over HTTPS anyway: gateway-tls's certificate only covers *.agentmanager.localhost and *.am-gateway.localhost (its configured hostname and SANs), not *.gateway.localhost — the domain default-default.gateway.localhost above actually uses. Reaching HTTPS on that specific host would additionally require reissuing the certificate with *.gateway.localhost in its dnsNames and pointing gateway.tls.hostname at it.

Given that, this setup keeps TLS disabled and uses the HTTP endpoint above for trace ingestion.


Cleanup​

To remove the install, delete the entire k3d cluster and all resources. Do this before you install again:

k3d cluster delete amp-local

If you used the one-command installer, running the uninstall script it left behind with --delete-cluster does the same.

To remove Agent Manager and OpenChoreo but keep the cluster, run the uninstall script without that flag:

bash ~/.wso2-agent-manager/subscription/<project>/<image tag>/deployments/quick-start/uninstall.sh
warning

When it keeps the cluster, the uninstall script currently leaves some components installed, including the gateway, OpenBao, the identity provider's data, the observability modules and the CRDs. If you install again on that cluster, the gateway cannot connect to the new Agent Manager. Delete the cluster before you reinstall.


Troubleshooting​

Pods stuck in Pending

Usually a resource constraint. Check node capacity:

kubectl describe pod <pod-name> -n <namespace>
kubectl top nodes

Increase Colima/Docker Desktop resources if needed.

On Colima, resizing is not a free action

Changing --cpu or --memory requires stopping and restarting the VM, which rebuilds Docker's networks underneath the cluster. An already-created k3d cluster may not come back. Read the next entry before you resize.

k3d server container crash-loops after restarting or resizing Colima

This does not present as a Kubernetes error. kubectl stops responding altogether, because the API server never starts:

kubectl cluster-info --context k3d-amp-local
# Hangs, or reports the connection was refused

docker ps -a --filter name=k3d-amp-local
# k3d-amp-local-server-0 shows STATUS "Restarting", or repeated "Exited"

docker logs k3d-amp-local-server-0

The server node's log ends with:

level=fatal msg="Failed to start networking: unable to initialize network policy controller: error getting node subnet: failed to find interface with specified node ip"

Stopping and starting the Colima VM recreates the k3d-amp-local bridge network, and the containers rejoin it in a different order than before. The load balancer can take the address the server node previously held. k3s still has the old address in its persisted node record, so its network policy controller finds no interface matching it and the process exits. Restarting again does not help, because the mismatch is stored in the node's own state rather than recalculated at boot.

Recreate the cluster. Nothing in this install is persistent across a cluster delete, so recovery is the same work as a fresh install:

k3d cluster delete amp-local
docker network rm k3d-amp-local 2>/dev/null || true

colima stop --profile agent-manager
colima start --profile agent-manager \
--vm-type=vz --vz-rosetta --network-address \
--cpu <cpus> --memory <gb>

Then rerun the one-command installer, or the guided install from Step 1: Create k3d Cluster onward.

Agent logs, traces and monitor-run logs do not load after restarting Docker or Colima

When Docker restarts the cluster's containers on its own, k3s rewrites the CoreDNS NodeHosts entry without host.k3d.internal. This install's CoreDNS rewrites point the platform's *.localhost names, such as api.openchoreo.localhost, at host.k3d.internal, so those names stop resolving inside the cluster. The console then fails to load agent logs, traces and monitor-run logs.

Check whether the entry is missing:

kubectl get configmap coredns -n kube-system -o jsonpath='{.data.NodeHosts}'
# No line ends with host.k3d.internal

Stop and start the cluster through k3d, which adds the entry back:

k3d cluster stop amp-local && k3d cluster start amp-local

The names resolve again about 1-2 minutes after the cluster starts. Do this after every Docker or Colima restart.

Monitor runs and agent builds fail after restarting Docker, Colima or your machine

OpenBao, the secret store in this install, runs in dev mode and keeps its data in memory, so a restart wipes the secrets stored in it. Agents that are already running keep working on the secrets they last synced, but anything that needs to read a secret again fails:

  • Monitor runs do not start. Their pods stay in CreateContainerConfigError with a secret ... not found event.
  • Agent builds cannot push their images.
  • ExternalSecrets report Secret does not exist (kubectl get externalsecrets -A).

The lost secrets cannot be restored. Delete the cluster and install again:

bash ~/.wso2-agent-manager/subscription/<project>/<image tag>/deployments/quick-start/uninstall.sh --delete-cluster

If you used the guided install, run k3d cluster delete amp-local instead. Then rerun the one-command installer, or the guided install from Step 1: Create k3d Cluster onward.

For a deployment whose secrets survive restarts, follow On Your Environment.

Gateway not becoming Programmed
kubectl logs -n openchoreo-data-plane -l app.kubernetes.io/name=gateway-operator
kubectl describe apigateway api-platform-default-default -n openchoreo-data-plane
Plane registration issues
kubectl get clusterdataplane default -n default -o yaml
kubectl logs -n openchoreo-control-plane -l app.kubernetes.io/name=openchoreo-control-plane
OpenSearch connectivity issues
kubectl get pods -n openchoreo-observability-plane -l app=opensearch
kubectl run -it --rm debug --image=curlimages/curl --restart=Never -- \
curl -v http://opensearch.openchoreo-observability-plane.svc.cluster.local:9200
Port already in use

Find the process occupying the port and stop it:

lsof -i :<port>

Reference: Configuration Files​

All Agent Manager-specific configuration files used in this guide:

FilePurpose
k3d-config.yamlk3d cluster with all required port mappings
coredns-amp-custom.yamlCoreDNS rewrites for *.openchoreo.localhost, *.amp.localhost, *.agentmanager.localhost, *.am-gateway.localhost, *.gateway.localhost
add-environment-thunder.shProvisions the per-environment Thunder identity provider
values-cp.yamlControl Plane — Backstage disabled, AMP Thunder OIDC
values-dp.yamlData Plane — gateway ports, Fluent Bit config
values-op.yamlObservability Plane — standalone OpenSearch, AMP Thunder OIDC
values-openbao.yamlOpenBao — dev mode, Kubernetes auth, pre-seeded secrets
oc-collector-configmap.yamlCustom OTel Collector ConfigMap for trace ingestion
wso2-amp-api-platform-gateway-extensionAPI Platform Gateway Helm chart (includes gateway config, bootstrap, CR)
otel-collector-rest-api.yamlOTel Collector REST API resource