dynamo/docs/kubernetes
Anant Sharma f2fd3a16e7
fix: update broken links to deleted dgd_integration.go (#7526)
Signed-off-by: Anant Sharma <anants@nvidia.com>
2026-03-19 14:00:12 -04:00
..
deployment refactor: move MPI SSH key generation from Helm hook Job into operator reconciliation (#6940) 2026-03-06 18:25:00 +00:00
observability refactor: replace kube-rbac-proxy sidecar with controller-runtime WithAuthenticationAndAuthorization (#7045) 2026-03-07 08:01:03 -08:00
README.md docs: add docs for DGDR usage -- golden path (#6946) 2026-03-12 17:18:09 +00:00
api-reference.md fix: update broken links to deleted dgd_integration.go (#7526) 2026-03-19 14:00:12 -04:00
autoscaling.md docs: restructure docs directory and move fern config to fern/ (#6700) 2026-03-01 19:58:22 -08:00
dgdr.md docs: add docs for DGDR usage -- golden path (#6946) 2026-03-12 17:18:09 +00:00
dynamo-operator.md fix: Fix kubernetes-operator container image name in docs (#7312) 2026-03-12 22:33:29 -04:00
fluxcd.md docs: restructure docs directory and move fern config to fern/ (#6700) 2026-03-01 19:58:22 -08:00
grove.md docs: restructure docs directory and move fern config to fern/ (#6700) 2026-03-01 19:58:22 -08:00
inference-gateway.md test: GAIE integration Unit and e2e tests (#7257) 2026-03-19 09:51:34 -07:00
installation-guide.md fix: Fix kubernetes-operator container image name in docs (#7312) 2026-03-12 22:33:29 -04:00
model-caching-with-fluid.md docs: restructure docs directory and move fern config to fern/ (#6700) 2026-03-01 19:58:22 -08:00
model-caching.md docs: 1.0 documentation improvements (#7168) 2026-03-10 17:08:31 -05:00
rolling-update.md docs: restructure docs directory and move fern config to fern/ (#6700) 2026-03-01 19:58:22 -08:00
service-discovery.md docs: restructure docs directory and move fern config to fern/ (#6700) 2026-03-01 19:58:22 -08:00
snapshot.md refactor: clean up checkpoint orchestration (#7309) 2026-03-18 09:44:38 -07:00
webhooks.md docs: 1.0 documentation improvements (#7168) 2026-03-10 17:08:31 -05:00

README.md

title
Deployment Guide

High-level guide to Dynamo Kubernetes deployments. Start here, then dive into specific guides.

Important Terminology

Kubernetes Namespace: The K8s namespace where your DynamoGraphDeployment resource is created.

  • Used for: Resource isolation, RBAC, organizing deployments
  • Example: dynamo-system, team-a-namespace

Dynamo Namespace: The logical namespace used by Dynamo components for service discovery.

  • Used for: Runtime component communication, service discovery
  • Specified in: .spec.services.<ServiceName>.dynamoNamespace field
  • Example: my-llm, production-model, dynamo-dev

These are independent. A single Kubernetes namespace can host multiple Dynamo namespaces, and vice versa.

Prerequisites

Before you begin, ensure you have the following tools installed:

Tool Minimum Version Installation Guide
kubectl v1.24+ Install kubectl
Helm v3.0+ Install Helm

Verify your installation:

kubectl version --client  # Should show v1.24+
helm version              # Should show v3.0+

For detailed installation instructions, see the Prerequisites section in the Installation Guide.

Pre-deployment Checks

Before deploying the platform, run the pre-deployment checks to ensure the cluster is ready:

./deploy/pre-deployment/pre-deployment-check.sh

This validates kubectl connectivity, StorageClass configuration, and GPU availability. See pre-deployment checks for more details.

1. Install Platform First

# 1. Set environment
export NAMESPACE=dynamo-system
export RELEASE_VERSION=0.x.x # any version of Dynamo 0.3.2+ listed at https://github.com/ai-dynamo/dynamo/releases

# 2. Install Platform (CRDs are automatically installed by the chart)
helm fetch https://helm.ngc.nvidia.com/nvidia/ai-dynamo/charts/dynamo-platform-${RELEASE_VERSION}.tgz
helm install dynamo-platform dynamo-platform-${RELEASE_VERSION}.tgz --namespace ${NAMESPACE} --create-namespace

[!WARNING] v0.9.0 Helm Chart Issue: The initial v0.9.0 dynamo-platform Helm chart sets the operator image to v0.7.1 instead of v0.9.0. Use RELEASE_VERSION=0.9.0-post1 or add --set dynamo-operator.controllerManager.manager.image.tag=0.9.0 to your helm install command.

For Shared/Multi-Tenant Clusters:

If your cluster has namespace-restricted Dynamo operators, add this flag to step 2:

--set dynamo-operator.namespaceRestriction.enabled=true

For more details or customization options (including multinode deployments), see Installation Guide for Dynamo Kubernetes Platform.

2. Choose Your Backend

Each backend has deployment examples and configuration options:

Backend Aggregated Aggregated + Router Disaggregated Disaggregated + Router Disaggregated + Planner Disaggregated Multi-node
SGLang
TensorRT-LLM 🚧
vLLM

3. Deploy Your First Model

Follow the Deploying Your First Model guide for a complete end-to-end walkthrough using DynamoGraphDeploymentRequest (DGDR) — Dynamo's recommended path that handles profiling and configuration automatically.

The tutorial deploys Qwen/Qwen3-0.6B with vLLM and walks you through every step: creating the DGDR, watching the profiling lifecycle, and sending your first inference request.

For SLA-based autoscaling, see SLA Planner Guide.

Understanding Dynamo's Custom Resources

Dynamo provides two main Kubernetes Custom Resources for deploying models:

DynamoGraphDeploymentRequest (DGDR) - Simplified SLA-Driven Configuration

The recommended approach for generating optimal configurations. DGDR provides a high-level interface where you specify:

  • Model name and backend framework
  • SLA targets (latency requirements)
  • GPU type (optional)

Dynamo automatically handles profiling and generates an optimized DGD spec in the status. Perfect for:

  • SLA-driven configuration generation
  • Automated resource optimization
  • Users who want simplicity over control

Note: DGDR generates a DGD spec which you can then use to deploy.

DynamoGraphDeployment (DGD) - Direct Configuration

A lower-level interface that defines your complete inference pipeline:

  • Model configuration
  • Resource allocation (GPUs, memory)
  • Scaling policies
  • Frontend/backend connections

Use this when you need fine-grained control or have already completed profiling.

Refer to the API Reference and Documentation for more details.

📖 API Reference & Documentation

For detailed technical specifications of Dynamo's Kubernetes resources:

Choosing Your Architecture Pattern

When creating a deployment, select the architecture pattern that best fits your use case:

  • Development / Testing - Use agg.yaml as the base configuration
  • Production with Load Balancing - Use agg_router.yaml to enable scalable, load-balanced inference
  • High Performance / Disaggregated - Use disagg_router.yaml for maximum throughput and modular scalability

Frontend and Worker Components

You can run the Frontend on one machine (e.g., a CPU node) and workers on different machines (GPU nodes). The Frontend serves as a framework-agnostic HTTP entry point that:

  • Provides OpenAI-compatible /v1/chat/completions endpoint
  • Auto-discovers backend workers via service discovery (Kubernetes-native by default)
  • Routes requests and handles load balancing
  • Validates and preprocesses requests

Customizing Your Deployment

Example structure:

apiVersion: nvidia.com/v1alpha1
kind: DynamoGraphDeployment
metadata:
  name: my-llm
spec:
  services:
    Frontend:
      dynamoNamespace: my-llm
      componentType: frontend
      replicas: 1
      extraPodSpec:
        mainContainer:
          image: your-image
    VllmDecodeWorker:  # or SGLangDecodeWorker, TrtllmDecodeWorker
      dynamoNamespace: dynamo-dev
      componentType: worker
      replicas: 1
      envFromSecret: hf-token-secret  # for HuggingFace models
      resources:
        limits:
          gpu: "1"
      extraPodSpec:
        mainContainer:
          image: your-image
          command: ["/bin/sh", "-c"]
          args:
            - python3 -m dynamo.vllm --model YOUR_MODEL [--your-flags]

Worker command examples per backend:

# vLLM worker
args:
  - python3 -m dynamo.vllm --model Qwen/Qwen3-0.6B

# SGLang worker
args:
  - >-
    python3 -m dynamo.sglang
    --model-path deepseek-ai/DeepSeek-R1-Distill-Llama-8B
    --tp 1
    --trust-remote-code    

# TensorRT-LLM worker
args:
  - python3 -m dynamo.trtllm
    --model-path deepseek-ai/DeepSeek-R1-Distill-Llama-8B
    --served-model-name deepseek-ai/DeepSeek-R1-Distill-Llama-8B
    --extra-engine-args /workspace/examples/backends/trtllm/engine_configs/deepseek-r1-distill-llama-8b/agg.yaml

Key customization points include:

  • Model Configuration: Specify model in the args command
  • Resource Allocation: Configure GPU requirements under resources.limits
  • Scaling: Set replicas for number of worker instances
  • Routing Mode: Enable KV-cache routing by setting DYN_ROUTER_MODE=kv in Frontend envs
  • Worker Specialization: Add --disaggregation-mode prefill flag for disaggregated prefill workers

Additional Resources