Агентная сетка без містыкі: маштабаванне AI-агентаў і LLM у Kubernetes
Маштабаванне AI-агентаў і LLM у Kubernetes праз агентную сетку: kagent як асяроддзе выканання, vLLM для інферэнсу і як усё звязаць.
Крыніцы: Demystifying the Agentic Mesh: Scaling AI Agents & LLMs on Kubernetes
У гэтым керавані зноў ствараецца парадокс ад сыр'ёў да рабочай сістэмы для: Раскрыць таінства агентных сетак: масштабаванне AI-агентаў і LLM-аў на Kubernetes. Акцэнт ставіцца на практычныя крокі, чыстае перакананне і код, які можна проста дадаць у рэпазітарый без неабязковасці здогадвацца пра мету. У стадзіі агледжэння неабходна практычна з'явіць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння прычымоў перад зменай коду. Аператары должны магчымае перадзвігнуць крок з вядомага пункта контролю без неабязковасці здогадвацца пра схованы стан. Неабходна адразу задокументаваць як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней.
Асновныя перашкоды у працэўнай агентной AI
Калі працюеце над раздзелам «The Core Bottlenecks», спачатку запісайце умовы кантракту: неабяжлівыя даны, сігнал успеху і тое, што выходзіць пад частковыя аберанціі. Такі спіс контроля дапамагае залічыць змяны ў кодзе адпаведна. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, аберанцыя должна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Зберагаеце у кэшы стабільныя інструкцыі сістэмы і схемы інструментаў. Перадзесланне ідэнтычных даных — частая прычына зайвага навантажэння.
Пазнайоміцеся з Stack: план агентскага сеткавага структура
Калі працуеце над этапам «Meet the Stack», спачатку запісайце контракт: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс перакладзець пазнейшыя змены коду ў правільны направленні. Спрэцьвуйце да гэтага этапу як да контракту межа данымі і перакананымі выходамі. Дайце назвы артыфактам, задаце крытэрыя успеху і не падзволяйце частковаму завершэнню без паведамлення. Зберагаце ў кэшы стабільныя інструкцыі сістэмы і схемы інструментаў. Перадача таго ж прамэра знову ёсць частым выклікам расходавання рэсурсаў.
1. kagent: Час адработкі агента
Калі працуеце над стадзіяй 1 kagent The Agent, спачатку запісайце умовы кантракту: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс дапамагае заліцьваты пазнейшыя змены коду.
2. agentgateway: Поліцая трафіку
Этап Traffic у агент-гейтвэя працюе найкрашча, калі яго розглядаць як вімерную плошчу. Зафіксавце адзін ідэальны прымер работы, адзін кейс неудачы і запіс працэй па адвярненню, перш чым расшырваць масштабы. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказваць на адзін конкрэтны элемент, а не на заплутаны ланцюг задач. Задаце ліміт токенав на кожны рунг і на кожную сесыю. Агентскія інструменты агрэсывна расшырваюць кантэкст; строгі ліміты не дазволяюць дэм-версіям ператварыцца на неспакоўныя рахункі.
3. llm-d: Раздзелвальнік заваноў
Этап работы з трэйнаванням LLM-модэляў работае наякша, калі яго спрыяваць як мерыемую плошчу. Запісаўце адны ідэальны прыклад працы, адны прыклад неудачы і прыметку па поверненню да пярвінскага стану пры розшырэнні масштаба. Спрыявайце гэты этап як кантракт межа вхіднымі дадзеннямі і паверыцельнымі выходамі. Даўце назвы артыфактам, задаце крытэрыя успеху і адмовіцеся ад мовчанкавага частковага завершэння задачы. Задзеце бюджэт токенаў на кожны раунд і на кожную сесію. Інструменты з агентнымі функцыямі агрэсывна расшырваюць кантэкст; строгі ліміты не дазволяюць дэманстрацыям ператварацца на неспакоючыя рахункі.
4. vLLM: Сіла GPU
У раундзе 4 vLLM з GPU апаратным засобам лучша праця, калі ўваходзіць у расчытны прастор. Перш чым расшырваць масштаб, зафіксавайце адны ідэальны прыклад працы, адны прыклад неудачы і запіс пра вярнэнне да поперадньего стану.
1. Архітэктура сістэмы
У стадыі 1 «Архітэктура сістэмы» неабяцо практычна вказаць інпуты, адміністратара крока і крэтыяры завершэння пры зміне коду. Аперацыйныя працавнікі павінны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшаў, прычына неудачы павінна вказываць на адну адпаведальнасць, а не на заплутаны ланцюг задач. Калі наступны крок — гэта код або вызов інструмента, лепш выбіраць структураваныя выходны даныя з пераканальванням схемы замест вольнага фармата тэксту.
У сутнасці: апрацоўка запыту ў сетцы
Для этапы апрацоўкі падынутых дадзейнаў неабходна перад змянай коду адначыць вхідныя даны, адпаведальнага за крок і крэтырыя завершэння. Аперацыяныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Спрыяйце цій этапы як даговору межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, адначыць перакананні на успех і не прымайце часткова завершаныя рэзультаты без паведамлення. Калі наступны крок — гэта код або вызов інструмента, валідаванне за дапамою схемы лепша, чым вольная форма тэксту, для структураваных выходных дадзейнаў.
2. Установка кантролераў і CRD
Для этапы 2 «Установка кантролераў CRDs» неабходна пазначыць вхідныя даны, адпаведальнага за этап і крэтыры завершэння пры перадзеі коду. Аперацыйныя працавнікі должны магчымае перайсці на гэты этап з вядомага пункта контролю, не спрабоўваючы здагадвацца пра захаваны стан. Запісвайце час выканання і вартасць токена або запыту разам з функцыйнальнымі рэзультатамі. Відразліва візуабільнасць вартасцей запобегае неспакоўным рахункам, калі працэс пераходзіць з дэмовай асяроддзя ў спакульнаныя сераўеры. Калі наступны этап — гэта код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя даны з перакананнем схэмы, чым вольныя тэкстовыя опісы. Для этапы 2 «Установка кантролераў CRDs» неабходна пазначыць вхідныя даны, адпаведальнага за этап і крэтыры завершэння пры перадзеі коду. Аперацыйныя працавнікі должны магчымае перайсці на гэты этап з вядомага пункта контролю, не спрабоўваючы здагадвацца пра захаваны стан. Адначасова задокументавайце шлях успеху і шлях вярнення. Перапрыбуткі, людзкі контроль і обработка некорэктных паведамленняў ёсць часткай продукту, а не елементамі, якія дадаюцца пазней.
# 1. Install Kubernetes Gateway API & Inference Extension CRDs
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.5.0/standard-install.yaml
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/releases/download/v0.1.0/manifests.yaml
# 2. Add Helm Registries
helm repo add agentgateway oci://cr.agentgateway.dev/charts
helm repo add kagent https://charts.kagent.dev
helm repo update
# 3. Install agentgateway (Control & Data Plane)
helm upgrade -i agentgateway-crds agentgateway/agentgateway-crds -n agentgateway-system --create-namespace
helm upgrade -i agentgateway agentgateway/agentgateway -n agentgateway-system
# 4. Install kagent (Agent Runtime)
helm upgrade -i kagent kagent/kagent -n kagent-system --create-namespace
3. Развертанне інфраструктуры для вычыслення на GPU (vLLM & llm-d)
Калі працуеце над 3-й стадзіяю развертання на GPU, спачатку запісайце шаблон: неабяжлівыя даныя, сігнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі спіс контроля дапамагае заліцьварыць пазнейшыя змены ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына нявыполнення павінна вказываць на адзін конкрэтны элемент, а не на заплутаны ланцюг задач. Зберагаеце у кэшы стабільныя інструкцыі сістэмы і схемы інструментаў. Перадзял у тое ж самае прамэру ёсць частым выклікам рэсурсоў.
Падзаполненне і дэкодаванне параметраў развертання (vllm-infrastructure.yaml)
Калі працюеце над стадзіяй Prefill Decode Deployment vllm-infrastructure, спачатку запісайце угоду: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у случае частковага нявыпання. Такі спіс пераконтроўваець дапамагае залічыць змяны ў кодзе пазней. Спрыятліваеце гэтай стадзіяй як угоды межа данымі і перакананымі выходамі. Дайце назву артыфактам, задаце перакананні успеху і адмовіцеся ад тыхоўскага частковага завершэння. Зберагачыце інструкцыі стабільнай сістэмы і схемы інструментаў. Перадача ідэнтычнага прамаргіналу — частая прычына працоўных траблэў.
apiVersion: apps/v1
kind: Deployment
metadata:
name: vllm-prefill
namespace: llm-serving
labels:
app: vllm-prefill
spec:
replicas: 1
selector:
matchLabels:
app: vllm-prefill
template:
metadata:
labels:
app: vllm-prefill
spec:
containers:
- name: vllm
image: vllm/vllm-openai:latest
args:
- "--model"
- "meta-llama/Meta-Llama-3-8B-Instruct"
- "--experimental-prefill-only" # Optimization: Dedicated Prefill role
- "--gpu-memory-utilization"
- "0.90"
- "--port"
- "8000"
ports:
- containerPort: 8000
name: http
resources:
limits:
nvidia.com/gpu: "1" # Schedule on premium compute node
cpu: "4"
memory: 16Gi
volumeMounts:
- mountPath: /root/.cache/huggingface
name: model-cache
- mountPath: /dev/shm
name: dshm
volumes:
- name: model-cache
persistentVolumeClaim:
claimName: vllm-model-cache-pvc
- name: dshm
emptyDir:
medium: Memory
sizeLimit: 4Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: vllm-decode
namespace: llm-serving
labels:
app: vllm-decode
spec:
replicas: 3 # Scale out dynamically based on load
selector:
matchLabels:
app: vllm-decode
template:
metadata:
labels:
app: vllm-decode
spec:
containers:
- name: vllm
image: vllm/vllm-openai:latest
args:
- "--model"
- "meta-llama/Meta-Llama-3-8B-Instruct"
- "--experimental-decode-only" # Optimization: Dedicated token generator role
- "--gpu-memory-utilization"
- "0.90"
- "--port"
- "8000"
ports:
- containerPort: 8000
name: http
resources:
limits:
nvidia.com/gpu: "1" # Schedule on low-cost L4/A10G nodes
cpu: "4"
memory: 16Gi
volumeMounts:
- mountPath: /root/.cache/huggingface
name: model-cache
- mountPath: /dev/shm
name: dshm
volumes:
- name: model-cache
persistentVolumeClaim:
claimName: vllm-model-cache-pvc
- name: dshm
emptyDir:
medium: Memory
sizeLimit: 4Gi
llm-d Канфігурацыя (llmd-routing.yaml)
Калі працуеце над стадзіяй llmd-routing yaml у налаштаваннях llm-d, спачатку запісайце умовы вярбунка: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс дапамагае заліцьваты пазнейшыя змены коду. Запісуйце час выканання і вартась токенаў або запытак праза функцыйнальныя рэзултаты. Відразлівась вартасей з самага пачатку запобегае неспакоўным рахункам, калі працэс пераходзіць з дэмавай версіі ў спяльныя асяроддзя. Зберагаеце у кэшы стабільныя інструкцыі сістэмы і схемы інструментаў. Перадзял у тое ж самае прамэру ёсць частым выклікам вітрачання рэсурсаў. Калі працуеце над стадзіяй llmd-routing yaml у налаштаваннях llm-d, спачатку запісайце умовы вярбунка: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс дапамагае заліцьваты пазнейшыя змены коду. Аддзекументавайце як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка нераспакаваных запытак ёсць часткай продукту, а не пазнейшым дапрацоўкам.
apiVersion: inference.networking.x-k8s.io/v1alpha1
kind: InferencePool
metadata:
name: llama3-decode-pool
namespace: llm-serving
spec:
selector:
matchLabels:
app: vllm-decode
targetPort: 8000
---
apiVersion: inference.networking.x-k8s.io/v1alpha1
kind: InferenceObjective
metadata:
name: llama3-serving-objective
namespace: llm-serving
spec:
modelName: "meta-llama/Meta-Llama-3-8B-Instruct"
prefillService:
name: vllm-prefill
port: 8000
decodePool:
name: llama3-decode-pool
4. Налаштаванне agentgateway
Этап 4 «Налаштаванне agentgateway» працюе найэфектывней, калі яго розглядаць як параметр, які можна змерыць. Зберагчы адны ідэальны прыклад работы, адну сітуацыю абярошчэння і прыметкі па поверненню да пачатковага стану, перш чым расшырваць масштабы. Лепей выбіраць маленькія, тэставальныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына абярошчэння павінна вказываць на адную конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Задаеце ліміт токенав на кожны рунг і на кожную сесыю. Інструменты з агентамі актыўна расшырваюць кантэкст; строгі ліміты не дазволяюць дэманстрацыям ператварыцца на неспакоўныя рахункі.
Апісанне гэтвейу (agent-gateway.yaml)
Агент-шлюз у стадыі yaml з дэфініцыяю Gateway працуе наўсёрэй, калі яго спрыяваць як вімерную паверхню. Зафіксавайце адны ідэальны прымер, адзін кейс неудачы і прыказку па атрыбуцыі назад перш чым расшырваць масштаб. Спрыявайце гэтую стадыю як кантракт межа вхіднымі данымі і пасвярджанымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаць крытэрыя успеху і не падзеўляйцеся частым, некомплектным выкананнем задач. Задаць ліміт токенав на кожны раунд і на кожную сесію. Агентскія інструменты агрэсывна расшырваюць кантэкст; жорсткія ліміты не дазволяюць дэмам ператварыцца на неспакоўныя рахункі.
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: agent-gateway
namespace: agentgateway-system
spec:
gatewayClassName: agentgateway
listeners:
- name: http
protocol: HTTP
port: 8080
allowedRoutes:
namespaces:
from: All
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: llm-inference-route
namespace: llm-serving
spec:
parentRefs:
- name: agent-gateway
namespace: agentgateway-system
rules:
- matches:
- path:
type: PathPrefix
value: /v1/chat/completions
backendRefs:
- name: llama3-serving-objective
kind: InferenceObjective
group: inference.networking.x-k8s.io
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: mcp-tools-route
namespace: agent-tools
spec:
parentRefs:
- name: agent-gateway
namespace: agentgateway-system
rules:
- matches:
- path:
type: PathPrefix
value: /mcp/tools
backendRefs:
- name: mcp-tool-server-service
port: 50051
5. Размешчэнне kagent AI Agent Pod
Стадыя 5 Deploy kagent AI працуе наўсёрэй, калі яе спрыяваць як вімерную паверхню. Зафіксавайце адны ідэальны прымер, адзін кейс неудачы і прыказку па атрыбуцыі назад перш чым расшырваць масштаб. Запісвайце часы віканання і кост токенав або запытаў разам з функцыйнальнымі рэзультатамі. Відразлівае паказанне костаў з самага пачатку запобегае неспакоўным рахункам, калі працэс пераходзіць з дэмы ў спяльныя сераверы.
apiVersion: apps/v1
kind: Deployment
metadata:
name: kagent-orchestrator
namespace: kagent-system
spec:
replicas: 2
selector:
matchLabels:
app: kagent-orchestrator
template:
metadata:
labels:
app: kagent-orchestrator
spec:
containers:
- name: agent-runtime
image: kagent/runtime:latest
env:
# Route all model and tool API calls through agentgateway
- name: OPENAI_API_BASE
value: "http://agent-gateway.agentgateway-system.svc.cluster.local:8080/v1"
- name: MCP_SERVER_URL
value: "http://agent-gateway.agentgateway-system.svc.cluster.local:8080/mcp/tools"
resources:
limits:
cpu: "2"
memory: 4Gi
requests:
cpu: "1"
memory: 2Gi