上一篇 下一篇 分享链接 返回 返回顶部

把智能体放进集群:AI Agent 与 Kubernetes 的架构对照笔记

发布人:慈云数据-客服中心 发布时间:15小时前 阅读量:1

AI Agent 和 Kubernetes 对比|附源码

在过去几年里,AI AgentKubernetes 分别成为两个技术领域中的高频关键词。

一个属于人工智能应用架构,强调“让 AI 具备规划、调用工具、执行任务和反馈迭代的能力”;另一个属于云原生基础设施,强调“让应用能够被自动化部署、调度、扩缩容和自愈”。

表面上看,AI Agent 和 Kubernetes 似乎属于完全不同的技术栈:

  • AI Agent 面向智能任务执行;
  • Kubernetes 面向容器编排和基础设施管理。

但如果从系统设计角度观察,它们其实有不少相似之处:都在解决“复杂任务如何被拆解、调度、执行、监控和恢复”的问题。

本文将从概念、架构、核心组件、工作流程、相似点、差异点以及源码示例等角度,对 AI Agent 和 Kubernetes 做一次系统化对比。


一、什么是 AI Agent?

AI Agent,通常翻译为“智能体”,是指一种能够基于目标自主进行推理、规划、调用工具并完成任务的软件系统。

一个典型的 AI Agent 不只是简单地调用一次大语言模型,而是具备如下能力:

  1. 理解目标
  2. 拆解任务
  3. 制定计划
  4. 调用工具
  5. 观察结果
  6. 根据反馈继续行动
  7. 直到任务完成或失败

例如,你给一个 AI Agent 下达任务:

帮我分析最近三个月某只股票的走势,并生成一份投资风险报告。

一个普通聊天机器人可能只是根据已有知识给出泛泛回答,而 AI Agent 可能会:

  1. 判断需要实时数据;
  2. 调用金融数据 API;
  3. 获取近三个月价格;
  4. 计算涨跌幅、波动率、成交量变化;
  5. 调用绘图工具生成趋势图;
  6. 总结风险点;
  7. 输出完整报告。

这就是 AI Agent 相比普通 LLM 应用更强的地方。


二、什么是 Kubernetes?

Kubernetes,简称 K8s,是一个开源的容器编排平台,最初由 Google 设计并开源,现在由 CNCF 维护。

Kubernetes 的核心目标是:

帮助开发者自动化部署、扩展和管理容器化应用。

在没有 Kubernetes 之前,如果我们要部署一个应用,通常需要手动做很多事情:

  • 登录服务器;
  • 拉取代码或镜像;
  • 启动进程;
  • 配置端口;
  • 设置负载均衡;
  • 处理服务宕机;
  • 监控资源使用;
  • 手动扩容或缩容。

而 Kubernetes 把这些能力抽象成标准资源,例如:

  • Pod
  • Deployment
  • Service
  • ConfigMap
  • Secret
  • Ingress
  • Job
  • CronJob
  • StatefulSet

开发者只需要声明“我期望系统是什么状态”,Kubernetes 就会不断通过控制循环让真实状态趋近于期望状态。

例如,你声明:

我希望 nginx 应用始终有 3 个副本运行。

Kubernetes 就会自动保证:

  • 少了就创建;
  • 多了就删除;
  • 某个 Pod 崩溃了就重新拉起;
  • 节点故障了就调度到其他节点。

三、AI Agent 和 Kubernetes 的核心思想对比

虽然 AI Agent 和 Kubernetes 属于不同领域,但二者都有一个非常重要的共同点:

它们都不是简单执行一次命令,而是围绕目标进行持续调度和反馈控制。

可以这样理解:

对比维度 AI Agent Kubernetes
主要目标 完成智能任务 管理容器化应用
核心输入 用户目标、上下文、工具描述 YAML 声明式配置
核心能力 推理、规划、工具调用、记忆 调度、编排、扩缩容、自愈
执行单位 Action、Tool Call、Step Pod、Container、Job
控制方式 Agent Loop Reconcile Loop
状态管理 Memory、Observation、History etcd、API Server、Resource Status
失败处理 重新规划、换工具、重试 重新调度、重启、回滚
典型场景 自动写代码、数据分析、客服、运维助手 微服务部署、弹性伸缩、服务治理

从这个表可以看到,AI Agent 更偏“认知层”和“任务执行层”,Kubernetes 更偏“基础设施层”和“资源调度层”。


四、AI Agent 的典型架构

一个简单的 AI Agent 通常包含以下模块:

User Goal
   |
   v
Planner / LLM
   |
   v
Tool Selector
   |
   v
Tool Execution
   |
   v
Observation
   |
   v
Memory
   |
   v
Next Action or Final Answer

可以拆成几个核心组件。

1. Planner:规划器

Planner 负责理解用户目标,并决定下一步该做什么。

例如:

用户目标:查询北京明天天气,并给出穿衣建议。

Planner 可能拆解为:
1. 调用天气 API 查询北京天气;
2. 根据温度、降雨、风力判断穿衣建议;
3. 返回自然语言结果。

2. Tool:工具

工具是 Agent 能力的扩展。

常见工具包括:

  • 搜索引擎;
  • 数据库查询;
  • 文件读写;
  • 代码执行器;
  • HTTP API;
  • 浏览器;
  • Shell 命令;
  • 各类业务系统接口。

如果没有工具,Agent 基本只能依赖模型自身知识;而有了工具之后,Agent 就可以和真实世界交互。

3. Memory:记忆

Memory 用来保存上下文和历史信息。

包括:

  • 对话历史;
  • 用户偏好;
  • 工具调用结果;
  • 中间推理步骤;
  • 长期知识库。

4. Agent Loop:智能体循环

Agent 的关键不是一次性回答,而是循环执行:

思考 -> 行动 -> 观察 -> 再思考 -> 再行动 -> 完成

这与 Kubernetes 中的 Reconcile Loop 有明显相似性。


五、Kubernetes 的典型架构

Kubernetes 的整体架构可以分成控制平面和工作节点。

用户 / kubectl / CI/CD
        |
        v
   API Server
        |
        v
      etcd
        |
        v
Controller Manager  Scheduler
        |
        v
      Kubelet
        |
        v
   Container Runtime
        |
        v
      Pod

核心组件如下。

1. API Server

API Server 是 Kubernetes 的统一入口。

所有资源操作都要经过 API Server,比如:

  • 创建 Deployment;
  • 查询 Pod;
  • 删除 Service;
  • 更新 ConfigMap。

2. etcd

etcd 是 Kubernetes 的分布式键值存储,用于保存集群状态。

例如:

  • 当前有哪些 Pod;
  • Deployment 期望副本数是多少;
  • Service 配置是什么;
  • Secret 数据是什么。

3. Scheduler

Scheduler 负责调度 Pod 到合适节点。

它会考虑:

  • CPU;
  • 内存;
  • 节点标签;
  • 污点和容忍;
  • 亲和性;
  • 资源限制。

4. Controller Manager

Controller Manager 负责各种控制器,例如:

  • Deployment Controller;
  • ReplicaSet Controller;
  • Node Controller;
  • Job Controller;
  • Endpoint Controller。

这些控制器会不断检查:

期望状态 == 实际状态?

如果不一致,就采取行动修正。

5. Kubelet

Kubelet 运行在每个工作节点上,负责真正拉起容器并汇报状态。


六、核心机制对比:Agent Loop vs Reconcile Loop

AI Agent 的核心循环可以表示为:

Goal -> Think -> Act -> Observe -> Think -> Act -> ... -> Finish

Kubernetes 的核心循环可以表示为:

Desired State -> Observe Current State -> Diff -> Act -> Observe Again

二者都体现了反馈控制思想。

AI Agent 示例

目标:生成一份销售分析报告

第 1 步:判断需要销售数据
第 2 步:调用数据库查询工具
第 3 步:观察查询结果
第 4 步:发现缺少同比数据
第 5 步:再次查询去年同期数据
第 6 步:生成图表和分析结论

Kubernetes 示例

目标:运行 3 个 nginx Pod

第 1 步:Controller 发现当前只有 1 个 Pod
第 2 步:创建 2 个新 Pod
第 3 步:Scheduler 分配节点
第 4 步:Kubelet 拉起容器
第 5 步:Controller 再次检查状态
第 6 步:确认当前有 3 个 Pod

二者区别在于:

  • AI Agent 的“目标”通常是语义化、开放式、不确定的;
  • Kubernetes 的“目标”通常是结构化、声明式、确定性的。

七、源码示例一:一个极简 AI Agent

下面用 Python 实现一个非常简单的 AI Agent。它不依赖复杂框架,只模拟 Agent 的基本结构:规划、工具调用、观察和输出。

1. 项目结构

simple-agent/
├── agent.py
└── tools.py

2. tools.py

# tools.py

import datetime
import random


def get_current_time(city: str) -> str:
    """
    模拟查询城市当前时间。
    实际项目中可以调用真实 API。
    """
    now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    return f"{city} 当前时间是 {now}"


def get_weather(city: str) -> str:
    """
    模拟查询天气。
    实际项目中可以接入高德、和风天气、OpenWeather 等 API。
    """
    weather_list = ["晴", "多云", "小雨", "阴", "大风"]
    temperature = random.randint(5, 32)
    weather = random.choice(weather_list)
    return f"{city} 明天天气:{weather},气温 {temperature}℃"


def calculate(expression: str) -> str:
    """
    一个简单计算工具。
    注意:真实项目不要直接 eval 用户输入,存在安全风险。
    """
    try:
        result = eval(expression)
        return f"计算结果:{result}"
    except Exception as e:
        return f"计算失败:{str(e)}"

3. agent.py

# agent.py

from tools import get_current_time, get_weather, calculate


class SimpleAgent:
    def __init__(self):
        self.tools = {
            "time": get_current_time,
            "weather": get_weather,
            "calculate": calculate
        }
        self.memory = []

    def plan(self, user_input: str):
        """
        一个非常简化的规划器。
        真实 Agent 通常会使用 LLM 来判断应该调用哪个工具。
        """
        if "天气" in user_input:
            return {
                "tool": "weather",
                "args": self.extract_city(user_input)
            }

        if "时间" in user_input:
            return {
                "tool": "time",
                "args": self.extract_city(user_input)
            }

        if "计算" in user_input:
            expression = user_input.replace("计算", "").strip()
            return {
                "tool": "calculate",
                "args": expression
            }

        return {
            "tool": None,
            "args": None
        }

    def extract_city(self, text: str) -> str:
        """
        简单城市识别。
        实际项目应使用 NER、LLM 或结构化参数提取。
        """
        cities = ["北京", "上海", "广州", "深圳", "杭州", "成都"]
        for city in cities:
            if city in text:
                return city
        return "北京"

    def run(self, user_input: str):
        self.memory.append({
            "role": "user",
            "content": user_input
        })

        action = self.plan(user_input)

        if action["tool"] is None:
            answer = "我暂时无法处理这个任务,请尝试询问天气、时间或计算问题。"
            self.memory.append({
                "role": "assistant",
                "content": answer
            })
            return answer

        tool_name = action["tool"]
        tool_args = action["args"]

        observation = self.tools[tool_name](tool_args)

        final_answer = f"我调用了工具 `{tool_name}`,得到结果:{observation}"

        self.memory.append({
            "role": "tool",
            "content": observation
        })
        self.memory.append({
            "role": "assistant",
            "content": final_answer
        })

        return final_answer


if __name__ == "__main__":
    agent = SimpleAgent()

    print(agent.run("帮我查一下北京明天天气"))
    print(agent.run("现在上海时间是多少"))
    print(agent.run("计算 1024 * 8"))

运行效果类似:

我调用了工具 `weather`,得到结果:北京 明天天气:多云,气温 23℃
我调用了工具 `time`,得到结果:上海 当前时间是 2026-06-02 10:30:00
我调用了工具 `calculate`,得到结果:计算结果:8192

这个例子非常简单,但它已经包含了 Agent 的几个基本要素:

  • 用户目标;
  • 规划器;
  • 工具选择;
  • 工具执行;
  • 观察结果;
  • 记忆记录;
  • 最终回答。

八、源码示例二:Kubernetes 部署一个 Web 应用

下面我们用 Kubernetes YAML 部署一个 nginx 服务。

1. deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-demo
  labels:
    app: nginx-demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-demo
  template:
    metadata:
      labels:
        app: nginx-demo
    spec:
      containers:
        - name: nginx
          image: nginx:1.25
          ports:
            - containerPort: 80
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "500m"
              memory: "256Mi"

2. service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-demo-service
spec:
  selector:
    app: nginx-demo
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: ClusterIP

3. 应用配置

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

4. 查看运行状态

kubectl get deployment
kubectl get pods
kubectl get svc

你会看到 Kubernetes 创建了 3 个 nginx Pod。

如果手动删除其中一个 Pod:

kubectl delete pod 

Kubernetes 会自动重新创建一个新的 Pod,使副本数恢复到 3。

这就是 Kubernetes 的自愈能力。


九、AI Agent 和 Kubernetes 的相似之处

1. 都强调“目标驱动”

AI Agent 接收的是用户目标,例如:

帮我写一份竞品分析报告。

Kubernetes 接收的是期望状态,例如:

replicas: 3

虽然输入形式不同,但本质都是目标驱动。

AI Agent 的目标更偏自然语言;Kubernetes 的目标更偏结构化配置。


2. 都有调度能力

AI Agent 需要调度工具。

例如:

  • 什么时候调用搜索;
  • 什么时候调用数据库;
  • 什么时候调用代码解释器;
  • 什么时候调用业务 API。

Kubernetes 需要调度 Pod。

例如:

  • Pod 应该运行在哪个节点;
  • 哪个节点资源足够;
  • 哪些节点满足亲和性规则;
  • 哪些节点不可用。

因此,二者都有“根据当前状态选择执行资源”的过程。


3. 都依赖状态和反馈

AI Agent 会根据工具返回结果继续推理。

Kubernetes 会根据集群实际状态继续调整。

如果 AI Agent 查询数据库失败,它可能会:

  • 重试;
  • 换一个工具;
  • 请求用户补充信息;
  • 降级回答。

如果 Kubernetes 创建 Pod 失败,它可能会:

  • 重新调度;
  • 拉取镜像;
  • 重启容器;
  • 标记异常状态。

4. 都需要可观测性

AI Agent 需要记录:

  • 每一步思考;
  • 每次工具调用;
  • 工具返回结果;
  • token 消耗;
  • 错误原因;
  • 最终输出质量。

Kubernetes 需要观察:

  • Pod 状态;
  • 容器日志;
  • CPU 和内存;
  • 网络流量;
  • 节点健康度;
  • 事件信息。

如果没有可观测性,AI Agent 很容易变成不可调试的黑盒;Kubernetes 集群也会变成难以维护的复杂系统。


5. 都面临安全问题

AI Agent 的安全风险包括:

  • Prompt Injection;
  • 工具滥用;
  • 数据泄露;
  • 越权调用 API;
  • 生成错误内容;
  • 执行危险命令。

Kubernetes 的安全风险包括:

  • RBAC 配置不当;
  • Secret 泄露;
  • 镜像漏洞;
  • 容器逃逸;
  • 网络策略缺失;
  • 集群权限过大。

因此,在生产环境中,两者都必须严肃考虑权限边界和安全控制。


十、AI Agent 和 Kubernetes 的关键差异

1. 输入不同

AI Agent 通常接受自然语言输入。

例如:

帮我把今天的销售数据做成日报,并发到企业微信。

Kubernetes 通常接受结构化声明。

例如:

replicas: 5
image: my-app:v1.2.0

自然语言输入具有模糊性,而 YAML 配置更精确。


2. 执行结果确定性不同

Kubernetes 的行为相对确定。

如果 Deployment 配置正确,它通常会按照规则创建对应数量的 Pod。

AI Agent 的行为更不确定,因为它依赖 LLM 推理。即使输入相同,也可能因为模型采样、上下文变化、工具返回变化而产生不同结果。


3. 错误类型不同

Kubernetes 常见错误包括:

  • 镜像拉取失败;
  • 资源不足;
  • 探针失败;
  • 配置错误;
  • 节点不可用;
  • 网络异常。

AI Agent 常见错误包括:

  • 理解错目标;
  • 调错工具;
  • 参数提取错误;
  • 幻觉;
  • 无限循环;
  • 忽略关键约束;
  • 生成不可执行计划。

4. 评估方式不同

Kubernetes 的评估指标较明确:

  • Pod 是否 Ready;
  • 服务是否可访问;
  • 延迟是否可接受;
  • CPU/内存是否稳定;
  • 副本数是否符合预期。

AI Agent 的评估更复杂:

  • 任务是否真正完成;
  • 输出是否准确;
  • 推理过程是否合理;
  • 工具调用是否高效;
  • 是否遵守安全边界;
  • 用户是否满意。

十一、如果把 AI Agent 类比成 Kubernetes

为了更直观理解,我们可以做一个类比:

Kubernetes AI Agent
API Server Agent 接收用户任务的入口
YAML 资源声明 用户目标或任务描述
Controller Agent Planner
Scheduler Tool Selector
Pod Tool Call / Action
Kubelet Tool Executor
etcd Memory / State Store
Event Observation
Reconcile Loop Agent Loop
RBAC Tool Permission
Namespace Agent Workspace / Tenant
HPA 动态调整任务执行策略

这个类比并不完全严格,但有助于理解 AI Agent 系统也需要“工程化治理”。

尤其是在复杂企业场景中,一个 AI Agent 平台往往需要具备类似 Kubernetes 的能力:

  • 多租户隔离;
  • 权限控制;
  • 工具注册;
  • 执行沙箱;
  • 状态持久化;
  • 任务队列;
  • 失败重试;
  • 运行日志;
  • 资源配额;
  • 审计追踪。

十二、进一步源码:用 Kubernetes Job 运行 Agent 任务

在真实场景中,我们甚至可以把 AI Agent 部署到 Kubernetes 上,让 Kubernetes 负责运行 Agent 任务。

例如,一个 Agent 任务可以被封装成容器镜像,然后通过 Kubernetes Job 执行。

1. agent_job.py

# agent_job.py

import os
import time


def run_agent_task(task: str):
    print(f"开始执行 Agent 任务:{task}")

    # 模拟任务执行
    steps = [
        "理解用户目标",
        "拆解任务步骤",
        "调用外部工具",
        "分析工具返回结果",
        "生成最终报告"
    ]

    for step in steps:
        print(f"执行步骤:{step}")
        time.sleep(1)

    print("Agent 任务执行完成")


if __name__ == "__main__":
    task = os.getenv("AGENT_TASK", "默认任务:生成日报")
    run_agent_task(task)

2. Dockerfile

FROM python:3.11-slim

WORKDIR /app

COPY agent_job.py /app/agent_job.py

CMD ["python", "agent_job.py"]

构建镜像:

docker build -t agent-job-demo:1.0 .

如果使用本地 minikube,可以执行:

minikube image load agent-job-demo:1.0

3. Kubernetes Job YAML

apiVersion: batch/v1
kind: Job
metadata:
  name: agent-report-job
spec:
  backoffLimit: 2
  template:
    metadata:
      labels:
        app: agent-report-job
    spec:
      restartPolicy: Never
      containers:
        - name: agent
          image: agent-job-demo:1.0
          imagePullPolicy: IfNotPresent
          env:
            - name: AGENT_TASK
              value: "分析昨天销售数据,并生成日报"

执行:

kubectl apply -f agent-job.yaml
kubectl get jobs
kubectl get pods
kubectl logs 

这样,AI Agent 负责任务智能执行,Kubernetes 负责运行环境、调度、重试和资源管理。

这其实是一个非常常见的落地模式:

Agent 做“大脑”,Kubernetes 做“身体和基础设施”。


十三、生产环境实践建议

1. AI Agent 不应该无限自主

很多人设计 Agent 时喜欢追求“完全自主”,但在生产环境中,这往往非常危险。

建议增加:

  • 最大执行步数;
  • 最大 token 限制;
  • 工具调用白名单;
  • 人工确认节点;
  • 高风险操作拦截;
  • 审计日志。

例如删除数据、发送邮件、转账、执行 Shell 命令等操作,不应完全自动放行。


2. Kubernetes 不应该裸奔

Kubernetes 功能强大,但默认配置不等于生产可用。

生产环境应关注:

  • RBAC 最小权限;
  • NetworkPolicy;
  • 镜像安全扫描;
  • Secret 加密;
  • Pod Security Standards;
  • Resource Requests 和 Limits;
  • Liveness/Readiness Probe;
  • 日志和监控系统;
  • 备份 etcd。

3. Agent 平台可以借鉴 Kubernetes 思想

如果你正在设计一个企业级 Agent 平台,可以借鉴 Kubernetes 的设计理念:

声明式任务

用户不直接指定每一步怎么做,而是声明目标:

{
  "task": "生成本周销售分析报告",
  "output": "pdf",
  "deadline": "2026-06-02 18:00:00"
}

控制循环

系统不断检查:

任务是否完成?
是否失败?
是否需要重试?
是否需要人工介入?
是否超过预算?

插件化工具

类似 Kubernetes 的 CRD 和 Operator,Agent 工具也可以插件化。

例如:

{
  "name": "query_sales_database",
  "description": "查询销售数据库",
  "permission": "read:sales",
  "timeout": 10
}

权限隔离

不同 Agent 只能访问授权工具。

例如:

  • 财务 Agent 可以访问财务系统;
  • HR Agent 可以访问人事系统;
  • 客服 Agent 只能访问工单系统;
  • 运维 Agent 需要受控访问日志和监控。

十四、未来趋势:Agentic Cloud Native

未来,AI Agent 和 Kubernetes 很可能会进一步融合,形成一种新的工程模式:Agentic Cloud Native

也就是说:

  • Agent 帮助人类理解和操作复杂系统;
  • Kubernetes 提供稳定、弹性、可扩展的运行底座;
  • LLM 负责推理和决策;
  • 云原生工具负责执行和治理。

例如,在运维场景中,一个 AI SRE Agent 可以:

  1. 发现某服务错误率升高;
  2. 查询 Prometheus 指标;
  3. 查询 Loki 日志;
  4. 分析最近部署记录;
  5. 判断可能是新版本引入问题;
  6. 建议回滚;
  7. 在人工确认后执行 kubectl rollout undo
  8. 继续观察服务是否恢复。

这类系统并不是让 AI 取代 Kubernetes,而是让 AI Agent 成为 Kubernetes 之上的智能操作层。


十五、总结

AI Agent 和 Kubernetes 看似属于两个世界:

  • 一个是智能应用;
  • 一个是基础设施。

但从系统架构角度看,它们都体现了现代复杂系统的核心思想:

目标驱动、状态反馈、自动调度、持续修正。

AI Agent 的优势在于理解自然语言目标、处理开放式任务、调用工具完成复杂流程;Kubernetes 的优势在于稳定管理容器应用、自动调度资源、保障系统高可用。

二者不是替代关系,而是互补关系:

  • AI Agent 负责智能决策和任务执行;
  • Kubernetes 负责运行环境和资源编排。

如果说 Kubernetes 是云原生时代的操作系统,那么 AI Agent 很可能会成为智能应用时代的自动化执行层。

未来优秀的工程系统,很可能不是单纯依赖 AI,也不是单纯依赖 Kubernetes,而是将二者结合起来:

用户目标
  -> AI Agent 理解和规划
  -> 调用工具或生成任务
  -> Kubernetes 调度和运行
  -> 监控反馈
  -> Agent 再次分析和优化

这正是 AI 与云原生融合的方向。

目录结构
全文