Перейти к основному содержимому

For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://docs.nvidia.com/dynamo/llms.txt. For full content including API reference and SDK examples, see https://docs.nvidia.com/dynamo/llms-full.txt.

Обнаружение сервисов

Компоненты Dynamo (frontend, worker, planner) должны уметь обнаруживать друг друга и их возможности во время выполнения. Мы называем это обнаружением сервисов. В Kubernetes поддерживаются 2 типа backend'ов для discovery.

Backend'ы обнаружения

BackendDefaultDependenciesUse Case
Kubernetes✅ ДаНет (нативный K8s)Рекомендуется для всех развёртываний Kubernetes
KV Store (etcd)Неткластер etcdУстаревшие развёртывания

Kubernetes Discovery (по умолчанию)

Kubernetes discovery - это backend по умолчанию и рекомендуемый вариант при работе в Kubernetes. Для обнаружения компонентов он использует нативные примитивы Kubernetes:

  • DynamoWorkerMetadata CRD: каждый worker хранит зарегистрированные endpoint'ы и model cards в Custom Resource
  • EndpointSlices: EndpointSlices сигнализируют о статусе готовности каждого компонента

Детали реализации

В каждом pod'е работает discovery daemon, который отслеживает и EndpointSlices, и CR DynamoWorkerMetadata. Pod становится доступен для обнаружения только тогда, когда он отмечен как "ready" в EndpointSlice И имеет соответствующий CR DynamoWorkerMetadata. Такая связка гарантирует, что pod'ы не будут обнаруживаться до готовности, метаданные будут сразу доступны, а устаревшие записи будут очищаться при завершении pod'ов.

DynamoWorkerMetadata CRD

Каждый worker pod создаёт CR DynamoWorkerMetadata, в котором хранит свои метаданные для discovery:

apiVersion: nvidia.com/v1alpha1
kind: DynamoWorkerMetadata
metadata:
name: my-worker-pod-abc123
namespace: dynamo-system
ownerReferences:
- apiVersion: v1
kind: Pod
name: my-worker-pod-abc123
uid: <pod-uid>
controller: true
spec:
data:
endpoints:
"dynamo/backend/generate":
type: Endpoint
namespace: dynamo
component: backend
endpoint: generate
instance_id: 12345678901234567890
transport:
nats_tcp: "dynamo_backend.generate-abc123"
model_cards: {}

CR называется по имени pod'а и включает owner reference для автоматической сборки мусора при удалении pod'а.

EndpointSlices

Если ресурсы DynamoWorkerMetadata дают актуальный снимок возможностей компонента, то EndpointSlices дают снимок состояния здоровья разных компонентов Dynamo.

Оператор создаёт Kubernetes Service, нацеленный на компоненты Dynamo. Затем Kubernetes controller создаёт и поддерживает ресурсы EndpointSlice, которые отслеживают готовность pod'ов, попадающих под Service. Наблюдение за этими slices даёт нам актуальный снимок того, какие компоненты Dynamo готовы обслуживать трафик.

Readiness Probes

Pod помечается как ready, если readiness probe проходит успешно. Для worker'ов Dynamo это означает, что endpoint generate доступен и здоров. Эти probes настраиваются оператором Dynamo для каждого pod'а/компонента.

RBAC

Каждому pod'у компонента Dynamo автоматически назначается ServiceAccount, который позволяет ему наблюдать за ресурсами EndpointSlice и DynamoWorkerMetadata в пределах своего namespace.

Environment Variables

Оператор автоматически внедряет в pod'ы следующие переменные окружения, чтобы упростить discovery:

VariableDescription
DYN_DISCOVERY_BACKENDУстанавливается в kubernetes
POD_NAMEИмя pod'а (через downward API)
POD_NAMESPACENamespace pod'а (через downward API)
POD_UIDUID pod'а (через downward API)

Instance ID pod'а детерминированно генерируется путём хеширования имени pod'а, что обеспечивает стабильную идентичность и корреляцию между EndpointSlices и CR.

KV Store Discovery (etcd)

Чтобы использовать discovery на базе etcd вместо нативного Kubernetes discovery, добавьте аннотацию в DynamoGraphDeployment:

apiVersion: nvidia.com/v1alpha1
kind: DynamoGraphDeployment
metadata:
name: my-deployment
annotations:
nvidia.com/dynamo-discovery-backend: etcd
spec:
services:
# ...

Для этого должен быть доступен кластер etcd. Подключение к etcd настраивается через Helm chart платформы.