{"slug": "triton-control-an-open-source-control-plane-for-nvidia-triton-on-kubernetes", "title": "Triton Control – an open-source control plane for Nvidia Triton on Kubernetes", "summary": "AI Lab Tech released Triton Control v1.2.2, an open-source control plane for NVIDIA Triton on Kubernetes that unifies deployment, model repositories, inference testing, performance analysis, development workspaces, MLflow, and Argo Workflows into a single UI. The tool aims to reduce fragmentation in managing Triton inference server workflows across separate tools.", "body_md": "**Operate NVIDIA Triton on Kubernetes from one open-source control plane.**\n\nTriton Control brings deployment, model repositories, inference testing, performance analysis, development workspaces, MLflow, and Argo Workflows into one open-source UI for NVIDIA Triton on Kubernetes.\n\n[Documentation](https://ai-lab-tech.github.io/triton-control/) ·\n[Quickstart](https://ai-lab-tech.github.io/triton-control/getting-started/) ·\n[Examples](/ai-lab-tech/triton-control/blob/main/examples) ·\n[Roadmap](https://ai-lab-tech.github.io/triton-control/roadmap/)\n\nThe primary deployment target is Kubernetes through the Helm chart in\n`charts/triton-control`\n\n. The same application can also run with Docker Compose\nor Podman Compose for local evaluation, with reduced Kubernetes-specific\nfunctionality such as no self-deployed Triton deployment workflows.\n\nPublished container image:\n`ailabtechtriton/triton-control:v1.2.2`\n\nNVIDIA Triton is a powerful inference server, but the workflow around it is often fragmented. Teams coordinate model repositories, S3 credentials, Kubernetes resources, model configuration, endpoint tests, performance runs, development environments, and access control across separate tools. Triton Control connects those steps without replacing Triton or hiding the underlying model engineering.\n\nCore capabilities include:\n\n- existing Triton instance registration and management\n- self-deployed Triton serving workflows when Triton Control runs in Kubernetes\n- per-user browser-based development workspaces backed by code-server\n- user management and instance access control\n- model inference workflows with model configuration inspection\n- S3-backed model repository integration with reusable S3 profiles and an integrated S3 Browser\n- Perf Analyzer workflows when Triton Control runs in Kubernetes\n- Kubernetes-managed MLflow tracking with persistent storage and an embedded, authenticated MLflow UI\n- embedded Argo Workflows UI and API through an authenticated backend proxy\n\nWith Docker installed, start the published image:\n\n```\ndocker pull ailabtechtriton/triton-control:v1.2.2\ndocker tag ailabtechtriton/triton-control:v1.2.2 triton-control:compose\ndocker compose up --no-build\n```\n\nAfter the stack starts, open `http://localhost:8080`\n\nin your browser.\n\nTo build from source instead:\n\n```\ndocker compose up --build\n```\n\nThe backend API is available at `http://localhost:8000`\n\nand PostgreSQL at\n`127.0.0.1:5433`\n\n.\n\nDocker Compose does not provide Kubernetes. Deployments, Development workspaces, managed MLflow, and Argo Workflows are therefore disabled.\n\nFor Triton running on the host, use\n`http://host.docker.internal:<published-http-port>`\n\ninstead of `127.0.0.1`\n\n.\nBefore a non-development deployment, replace the secrets and database password\ndefined in `compose.yaml`\n\n.\n\nWith Podman and `podman-compose`\n\ninstalled, start the published image:\n\n```\npodman pull docker.io/ailabtechtriton/triton-control:v1.2.2\npodman tag docker.io/ailabtechtriton/triton-control:v1.2.2 \\\n  localhost/triton-control:compose\npodman-compose -f podman-compose.yaml up --no-build\n```\n\nAfter the stack starts, open `http://localhost:8080`\n\nin your browser.\n\nTo build from source instead:\n\n```\npodman-compose -f podman-compose.yaml up --build\n```\n\nThe backend API is available at `http://localhost:8000`\n\nand PostgreSQL at\n`127.0.0.1:5433`\n\n.\n\nPodman Compose does not provide Kubernetes. Deployments, Development workspaces, managed MLflow, and Argo Workflows are therefore disabled.\n\nThe Helm chart deploys:\n\n- one combined app image with Nginx, Angular, and FastAPI\n- one optional PostgreSQL Deployment\n- one optional Argo Workflows installation\n- one Service for frontend and backend ports\n- optional Ingress routes\n\nOIDC login has been tested with Microsoft Entra ID, Keycloak, and Dex. The Kubernetes deployment has also been tested with Argo CD managing the Helm release in a GitOps workflow.\n\nThe Helm deployment can use the published image directly; users do not need to build, pull, or push it on the machine running Helm. Kubernetes pulls the image from Docker Hub when it creates the application pod.\n\nCreate a values file, for example `values-prod.yaml`\n\n:\n\n```\napp:\n  image:\n    repository: ailabtechtriton/triton-control\n    tag: \"v1.2.2\"\n  secretEnv:\n    SESSION_SECRET: \"replace-me\"\n    JWT_SECRET: \"replace-me\"\n    S3_SECRET_ENCRYPTION_KEY: \"replace-me\"\n\npostgresql:\n  enabled: true\n  auth:\n    database: triton_backend\n    username: triton\n    password: \"replace-me\"\n  persistence:\n    enabled: true\n    size: 20Gi\n\ningress:\n  enabled: true\n  className: nginx\n  hosts:\n    - host: triton-control.example.com\n      paths:\n        frontend:\n          - path: /\n            pathType: Prefix\n        backend:\n          - path: /api\n            pathType: Prefix\n          - path: /auth\n            pathType: Prefix\n          - path: /login\n            pathType: Prefix\n          - path: /logout\n            pathType: Prefix\n          - path: /whoami\n            pathType: Prefix\n```\n\nInstall or upgrade:\n\n```\nhelm upgrade --install triton-control ./charts/triton-control \\\n  --namespace triton-control \\\n  --create-namespace \\\n  -f values-prod.yaml\n```\n\nIf `postgresql.enabled=true`\n\n, the chart generates and injects `DATABASE_URL`\n\n.\nFor an external database, set `postgresql.enabled=false`\n\nand provide\n`DATABASE_URL`\n\nthrough `app.existingSecret`\n\n, `app.env`\n\n, or `app.envFrom`\n\n.\n\nWhen you use Triton Control to install a self-deployed Triton instance or Perf Analyzer, namespace behavior depends on backend runtime context:\n\n- Triton Control backend running in Kubernetes (in-cluster detection): self-deployed Triton and Perf Analyzer are created in the same namespace as the Triton Control pod.\n- Triton Control backend running outside Kubernetes (for example local dev with\n`KUBERNETES_KUBECONFIG_PATH`\n\n): self-deployed Triton remains name-based, while Perf Analyzer defaults to the shared`triton-control`\n\nnamespace.\n\nIn-cluster detection is automatic and uses Kubernetes runtime signals (ServiceAccount files and Kubernetes service environment).\n\n`KUBERNETES_KUBECONFIG_PATH`\n\nis intended as a local development/testing\noverride for Triton Control running outside Kubernetes. In-cluster production\ndeployments should use ServiceAccount-based in-cluster configuration.\n\nThis mode is useful when working in VS Code or another IDE.\n\nLocal development prerequisites:\n\n- Python\n`3.12`\n\n. - Node.js and npm for the Angular frontend.\n- Java, Bash, curl, and Python on the frontend host if you run\n`npm run generate:api`\n\n; that command downloads and runs`swagger-codegen-cli.jar`\n\n.\n\nThe backend has a local PostgreSQL Compose file with TLS support:\n\n```\ncd triton-backend/postgresql\ndocker compose up -d\n```\n\nIt exposes PostgreSQL on:\n\n```\n127.0.0.1:5433\ncd triton-backend\ncp .env.example .env\n```\n\nOn Windows PowerShell:\n\n```\ncd triton-backend\nCopy-Item .env.example .env\n```\n\nThe default local database URL is:\n\n```\nDATABASE_URL=postgresql://triton:tritonpw@localhost:5433/triton_backend\n```\n\nmacOS/Linux:\n\n```\ncd triton-backend\npython -m venv .venv\nsource .venv/bin/activate\npip install -e \".[dev]\"\npython main.py\n```\n\nWindows PowerShell:\n\n```\ncd triton-backend\npython -m venv .venv\n.\\.venv\\Scripts\\activate\npip install -e \".[dev]\"\npython main.py\n```\n\nBackend API:\n\n```\nhttps://localhost:8000\nhttps://localhost:8000/docs\n```\n\nIf `SERVER_HTTPS_ENABLED=false`\n\nin `.env`\n\n, use `http://127.0.0.1:8000`\n\ninstead.\n\nOpen a second terminal:\n\n```\ncd triton-frontend\nnpm ci\nnpm run generate:api\nnpm run start:http\n```\n\nFrontend:\n\n```\nhttp://localhost:4200\n```\n\nThe default frontend environment points API calls to:\n\n```\nhttp://127.0.0.1:8000\n```\n\nHTTPS frontend mode is also available:\n\n```\nnpm run start:https\n```\n\nCertificate paths are configured in `triton-frontend/angular.json`\n\n.\n\nThe repository includes `.vscode/launch.json`\n\nwith a generic Python current-file\ndebug configuration. For backend debugging, open `triton-backend/main.py`\n\nand\nstart the Python debugger from VS Code.\n\nFor frontend work, use the integrated terminal:\n\n```\ncd triton-frontend\nnpm run start:http\n```\n\nRun backend and frontend in separate terminals. The backend must be running for most frontend API workflows.\n\nBackend:\n\n```\ndocker run --rm -v \"$PWD:/repo\" -w /repo ghcr.io/gitleaks/gitleaks:latest detect --no-git --source . --redact --verbose\ncd triton-backend\npip install -e \".[dev]\"\npip install pip-audit\npip-audit\ncoverage run -m unittest discover -s tests -p \"test_*.py\" -v\ncoverage report --fail-under=75\nmypy app/ tests/ scripts/ main.py\nruff check app/ main.py\nlint-imports\nbandit -r app/ main.py\n```\n\nFrontend:\n\n```\ncd triton-frontend\nnpm ci\nnpm audit --audit-level=moderate\nnpm run generate:api\nnpm run lint\nnpm run format:check\nnpm test -- --watch=false --browsers=ChromeHeadless --code-coverage\nnpm run test:smoke\n```\n\n`triton-frontend/`\n\n- Angular Material frontend.`triton-backend/`\n\n- Python FastAPI backend.`charts/triton-control/`\n\n- Helm chart for Kubernetes deployment.`compose.yaml`\n\n- Docker Compose stack for Triton Control and PostgreSQL.`podman-compose.yaml`\n\n- Podman Compose equivalent of the Docker Compose stack.`Dockerfile`\n\n- Builds a combined runtime image with frontend, backend, and Nginx.\n\n- Documentation site source:\n`docs/`\n\n- Getting started:\n`docs/getting-started.md`\n\n- User guide:\n`docs/user-guide.md`\n\n- User management:\n`docs/user-management.md`\n\n- API documentation:\n`docs/api.md`\n\n- Architecture overview:\n`docs/architecture-overview.md`\n\n- Architecture backend components:\n`docs/architecture-backend-components.md`\n\n- Deployment:\n`docs/deployment.md`\n\n- Development:\n`docs/development.md`\n\n- Security:\n`docs/security.md`\n\n- Troubleshooting:\n`docs/troubleshooting.md`\n\n- Backend details:\n`triton-backend/README.md`\n\n- Frontend details:\n`triton-frontend/README.md`\n\n- Helm chart details:\n`charts/triton-control/README.md`\n\n- Backend TLS setup:\n`triton-backend/tls/README.md`", "url": "https://wpnews.pro/news/triton-control-an-open-source-control-plane-for-nvidia-triton-on-kubernetes", "canonical_source": "https://github.com/ai-lab-tech/triton-control", "published_at": "2026-07-29 09:20:31+00:00", "updated_at": "2026-07-29 09:53:23.368574+00:00", "lang": "en", "topics": ["ai-infrastructure", "ai-tools", "mlops", "developer-tools"], "entities": ["AI Lab Tech", "NVIDIA Triton", "Triton Control", "Kubernetes", "MLflow", "Argo Workflows", "Helm"], "alternates": {"html": "https://wpnews.pro/news/triton-control-an-open-source-control-plane-for-nvidia-triton-on-kubernetes", "markdown": "https://wpnews.pro/news/triton-control-an-open-source-control-plane-for-nvidia-triton-on-kubernetes.md", "text": "https://wpnews.pro/news/triton-control-an-open-source-control-plane-for-nvidia-triton-on-kubernetes.txt", "jsonld": "https://wpnews.pro/news/triton-control-an-open-source-control-plane-for-nvidia-triton-on-kubernetes.jsonld"}}