values.yaml. Use oc in place of kubectl on OpenShift.
Install
Use one namespace per installation. For an existing installation, follow Upgrade or Move from the CLI.1
Download the build
Get
2501-<build>.tgz and values.example.yaml from installation releases. Verify the files.2
Prepare image access
Configure access to 2501’s registry, or copy the build’s images into your registry.
3
Prepare the namespace
Set
NS=ai-2501 in your shell, then run kubectl create namespace "$NS".4
Configure the installation
Write your values and create the required secrets below.
5
Apply and verify
Choose the kubectl, Helm or ArgoCD path below, then complete Check.
Write your values.yaml
Copyvalues.example.yaml to values.yaml. This minimal example uses Kubernetes, a supplied PostgreSQL database and a certificate secret:
Without LLM settings, add the model in Command Center after installation. Identity and LLM settings initialize the first installation; change them in Command Center afterwards. See the configuration reference for all values.
Create the secrets
Print the commands for your chosen values without installing anything:commandCenter.host when using tls.mode: secret. Your secret manager can create the same names and keys instead. Pods wait for missing secrets.
Apply
Render, review and apply the complete file. The same pruning flags make removed resources visible in the diff:With Helm or ArgoCD
The chart is also available atoci://ghcr.io/2501-ai/charts/2501. Verify the chart before installing it.
- Helm
- ArgoCD
Use the same namespace, values and pre-created secrets:To install the verified build from the registry instead:
Your site’s values
Apply changes throughvalues.yaml so they survive upgrades. Expand the relevant recipe; the configuration reference lists the remaining options.
HTTPS to the engine
HTTPS to the engine
Your PostgreSQL
Your PostgreSQL
Your Elasticsearch
Your Elasticsearch
Create Trust a corporate certificate with
es-credentials with ELASTICSEARCH_USERNAME and ELASTICSEARCH_PASSWORD:caBundle. For an existing installation, also enable Elasticsearch in Command Center as described in Operations.Storage and sizing
Storage and sizing
Set
storageClass, database.size and elasticsearch.size before creating volumes. Bound claims cannot change storage class or shrink. Choose sizing.preset for the installation’s capacity; reserve additional namespace capacity for task and plugin containers.Executors in another namespace
Create the namespace and its image pull secrets, then setexecutors.namespace. The chart places executor permissions and the hosted MCP policy there. With this setting, rendered objects name their namespaces: omit -n "$NS" from the file’s diff and apply commands.
Additional installation settings
Put non-secret settings inengine.extraEnv. For secret values, create an engine-extra-env Secret and restart the engine after changing it. For example, MCP_OAUTH_ALLOW_PRIVATE_PROVIDERS: "true" allows OAuth identity providers on private addresses, still over HTTPS.
Check
https://<your host>.
The bootstrap Job has backoffLimit: 10. After it reaches that limit, fix the cause shown in the logs and delete the failed Job:
Command Center keeps previous pods serving during the rollout until new pods become ready. Readiness stays successful after the first successful check; it is not an ongoing database health test. The engine is replaced during upgrades, so allow running work to finish first.
Hosted MCP servers
Hosted plugins run as non-root pods without a service account token. The chart supplies namespace-scoped permissions and a policy allowing DNS and public destinations, while blocking private and link-local destinations. Your network plugin must enforce NetworkPolicy. Add an explicit policy exception for required internal services or NodeLocal DNSCache. Review the network plugin’s startup enforcement before using untrusted images. Ensure image pull secrets and namespace quotas cover these pods.Centrals
For local Central execution, prepare a dedicated namespace with restricted pod security, image access, scoped pod/attach permissions and network policies. Setengine.extraEnv.CENTRAL_LOCAL_K8S_NAMESPACE to that namespace. The chart does not prepare this separate Central environment for you.
Leave Cluster (optional) at No cluster (default) to use this local environment, or select a registered cluster. Run the Central’s dry run before assigning work; a successful check does not validate task credentials.
Prepare local Central execution
Prepare local Central execution
This example uses The service account also needs permission to read its own pod in the installation namespace. Check this especially if executors use a separate namespace. Allow only the internal destinations your Central tools require; the example permits cluster DNS and public destinations.
ai-2501 for the installation and central for task containers. Replace ai-2501 in the binding if your installation uses another namespace. Save the following as central.yaml:1
Apply isolation and permissions
Run
kubectl apply -f central.yaml. Confirm your network plugin enforces the policy; other policies must not grant broader access to these pods.2
Prepare registry access
Create the configured executor image pull secret in
central too. It must allow both the release image and your Central images.3
Select the namespace
Add the values below and reapply the chart. Keep the Central manifest’s namespace unset to use this default.
4
Verify execution
Run the Central’s Test in Dry run and confirm command success and container removal.

