这是一篇深入解析云原生AI应用全栈架构的实战指南,文中包含了多个Mermaid图表,以直观展示Kubernetes调度、Istio网格、Knative事件驱动及Prometheus监控的内在逻辑。
深入解析云原生AI应用全栈架构:从Kubernetes智能调度与Istio服务网格到Knative事件驱动与Prometheus可观测性实战指南
1. 架构全景:构建云原生AI的四座基石
随着大模型(LLM)和生成式AI的普及,AI应用的部署模式正从“裸机/虚拟机”向“云原生”全面迁移。云原生不仅解决了资源利用率问题,更提供了弹性伸缩、服务治理和可观测性能力,这是AI应用在线服务化的关键。 一个典型的云原生AI全栈架构由以下四层核心组件构成:
#mermaid-svg-FovbJ2gTEGdq5hdX{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-FovbJ2gTEGdq5hdX .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-FovbJ2gTEGdq5hdX .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-FovbJ2gTEGdq5hdX .error-icon{fill:#552222;}#mermaid-svg-FovbJ2gTEGdq5hdX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-FovbJ2gTEGdq5hdX .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-FovbJ2gTEGdq5hdX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-FovbJ2gTEGdq5hdX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-FovbJ2gTEGdq5hdX .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-FovbJ2gTEGdq5hdX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-FovbJ2gTEGdq5hdX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-FovbJ2gTEGdq5hdX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-FovbJ2gTEGdq5hdX .marker.cross{stroke:#333333;}#mermaid-svg-FovbJ2gTEGdq5hdX svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-FovbJ2gTEGdq5hdX p{margin:0;}#mermaid-svg-FovbJ2gTEGdq5hdX .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-FovbJ2gTEGdq5hdX .cluster-label text{fill:#333;}#mermaid-svg-FovbJ2gTEGdq5hdX .cluster-label span{color:#333;}#mermaid-svg-FovbJ2gTEGdq5hdX .cluster-label span p{background-color:transparent;}#mermaid-svg-FovbJ2gTEGdq5hdX .label text,#mermaid-svg-FovbJ2gTEGdq5hdX span{fill:#333;color:#333;}#mermaid-svg-FovbJ2gTEGdq5hdX .node rect,#mermaid-svg-FovbJ2gTEGdq5hdX .node circle,#mermaid-svg-FovbJ2gTEGdq5hdX .node ellipse,#mermaid-svg-FovbJ2gTEGdq5hdX .node polygon,#mermaid-svg-FovbJ2gTEGdq5hdX .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-FovbJ2gTEGdq5hdX .rough-node .label text,#mermaid-svg-FovbJ2gTEGdq5hdX .node .label text,#mermaid-svg-FovbJ2gTEGdq5hdX .image-shape .label,#mermaid-svg-FovbJ2gTEGdq5hdX .icon-shape .label{text-anchor:middle;}#mermaid-svg-FovbJ2gTEGdq5hdX .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-FovbJ2gTEGdq5hdX .rough-node .label,#mermaid-svg-FovbJ2gTEGdq5hdX .node .label,#mermaid-svg-FovbJ2gTEGdq5hdX .image-shape .label,#mermaid-svg-FovbJ2gTEGdq5hdX .icon-shape .label{text-align:center;}#mermaid-svg-FovbJ2gTEGdq5hdX .node.clickable{cursor:pointer;}#mermaid-svg-FovbJ2gTEGdq5hdX .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-FovbJ2gTEGdq5hdX .arrowheadPath{fill:#333333;}#mermaid-svg-FovbJ2gTEGdq5hdX .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-FovbJ2gTEGdq5hdX .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-FovbJ2gTEGdq5hdX .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-FovbJ2gTEGdq5hdX .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-FovbJ2gTEGdq5hdX .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-FovbJ2gTEGdq5hdX .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-FovbJ2gTEGdq5hdX .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-FovbJ2gTEGdq5hdX .cluster text{fill:#333;}#mermaid-svg-FovbJ2gTEGdq5hdX .cluster span{color:#333;}#mermaid-svg-FovbJ2gTEGdq5hdX div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-FovbJ2gTEGdq5hdX .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-FovbJ2gTEGdq5hdX rect.text{fill:none;stroke-width:0;}#mermaid-svg-FovbJ2gTEGdq5hdX .icon-shape,#mermaid-svg-FovbJ2gTEGdq5hdX .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-FovbJ2gTEGdq5hdX .icon-shape p,#mermaid-svg-FovbJ2gTEGdq5hdX .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-FovbJ2gTEGdq5hdX .icon-shape rect,#mermaid-svg-FovbJ2gTEGdq5hdX .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-FovbJ2gTEGdq5hdX .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-FovbJ2gTEGdq5hdX .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-FovbJ2gTEGdq5hdX :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
可观测性平台 (Prometheus Stack)
服务治理层 (Istio Mesh)
应用运行层 (Knative Serverless)
接入与流量层
Exposing Metrics
Envoy Metrics
调度与资源层 (Kubernetes)
K8s 调度器
GPU Worker节点
CPU Worker节点
用户/设备
网关/Gateway
Knative Service: AI推理服务
AI Pod含GPU/模型
Envoy Sidecar代理
Istio Pilot 流量管控
Prometheus 抓取指标
Grafana 可视化大屏
AlertManager 告警
2. Kubernetes智能调度:让AI算力“物尽其用”
AI应用(尤其是模型训练和推理)对硬件资源极度敏感。如何在一个混合了CPU和GPU的集群中,高效、公平地调度任务,是云原生AI的第一大挑战。
2.1 GPU资源声明与共享调度
Kubernetes通过设备插件(NVIDIA GPU Operator)将GPU作为扩展资源上报。在AI场景中,我们通常使用nvidia.com/gpu资源类型。
#mermaid-svg-bp4g7WRrGR5NibVE{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-bp4g7WRrGR5NibVE .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-bp4g7WRrGR5NibVE .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-bp4g7WRrGR5NibVE .error-icon{fill:#552222;}#mermaid-svg-bp4g7WRrGR5NibVE .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bp4g7WRrGR5NibVE .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-bp4g7WRrGR5NibVE .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bp4g7WRrGR5NibVE .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bp4g7WRrGR5NibVE .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-bp4g7WRrGR5NibVE .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bp4g7WRrGR5NibVE .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bp4g7WRrGR5NibVE .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bp4g7WRrGR5NibVE .marker.cross{stroke:#333333;}#mermaid-svg-bp4g7WRrGR5NibVE svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bp4g7WRrGR5NibVE p{margin:0;}#mermaid-svg-bp4g7WRrGR5NibVE .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-bp4g7WRrGR5NibVE .cluster-label text{fill:#333;}#mermaid-svg-bp4g7WRrGR5NibVE .cluster-label span{color:#333;}#mermaid-svg-bp4g7WRrGR5NibVE .cluster-label span p{background-color:transparent;}#mermaid-svg-bp4g7WRrGR5NibVE .label text,#mermaid-svg-bp4g7WRrGR5NibVE span{fill:#333;color:#333;}#mermaid-svg-bp4g7WRrGR5NibVE .node rect,#mermaid-svg-bp4g7WRrGR5NibVE .node circle,#mermaid-svg-bp4g7WRrGR5NibVE .node ellipse,#mermaid-svg-bp4g7WRrGR5NibVE .node polygon,#mermaid-svg-bp4g7WRrGR5NibVE .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bp4g7WRrGR5NibVE .rough-node .label text,#mermaid-svg-bp4g7WRrGR5NibVE .node .label text,#mermaid-svg-bp4g7WRrGR5NibVE .image-shape .label,#mermaid-svg-bp4g7WRrGR5NibVE .icon-shape .label{text-anchor:middle;}#mermaid-svg-bp4g7WRrGR5NibVE .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-bp4g7WRrGR5NibVE .rough-node .label,#mermaid-svg-bp4g7WRrGR5NibVE .node .label,#mermaid-svg-bp4g7WRrGR5NibVE .image-shape .label,#mermaid-svg-bp4g7WRrGR5NibVE .icon-shape .label{text-align:center;}#mermaid-svg-bp4g7WRrGR5NibVE .node.clickable{cursor:pointer;}#mermaid-svg-bp4g7WRrGR5NibVE .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-bp4g7WRrGR5NibVE .arrowheadPath{fill:#333333;}#mermaid-svg-bp4g7WRrGR5NibVE .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bp4g7WRrGR5NibVE .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bp4g7WRrGR5NibVE .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bp4g7WRrGR5NibVE .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-bp4g7WRrGR5NibVE .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bp4g7WRrGR5NibVE .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-bp4g7WRrGR5NibVE .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bp4g7WRrGR5NibVE .cluster text{fill:#333;}#mermaid-svg-bp4g7WRrGR5NibVE .cluster span{color:#333;}#mermaid-svg-bp4g7WRrGR5NibVE div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-bp4g7WRrGR5NibVE .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-bp4g7WRrGR5NibVE rect.text{fill:none;stroke-width:0;}#mermaid-svg-bp4g7WRrGR5NibVE .icon-shape,#mermaid-svg-bp4g7WRrGR5NibVE .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bp4g7WRrGR5NibVE .icon-shape p,#mermaid-svg-bp4g7WRrGR5NibVE .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-bp4g7WRrGR5NibVE .icon-shape rect,#mermaid-svg-bp4g7WRrGR5NibVE .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bp4g7WRrGR5NibVE .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-bp4g7WRrGR5NibVE .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-bp4g7WRrGR5NibVE :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
提交YAML
资源检查
过滤节点
打分排序
绑定节点
分配设备
容器启动
开发者
K8s API Server
K8s Scheduler
Filter: GPU Predicate
Priority: GPU Topology/NUMA
GPU Worker Node
Kubelet
AI Training Container
实战关键点:
- 共享GPU(MIG):利用NVIDIA MIG(多实例GPU)技术,将一张A100切分为多个实例,通过K8s调度分配给不同的推理Pod,大幅降低小模型推理成本。
- 拓扑感知调度:在分布式训练(如PyTorch DDP)中,确保Pod被调度到同一个物理机或同一个RDMA网络域下,减少通信延迟。
2.2 优先级与抢占机制
AI训练任务通常耗时较长,而在线推理任务对延迟敏感。通过K8s的PriorityClass,我们可以实现“离线训练让路在线推理”的策略。
离线训练Pod (低优)
在线推理Pod (高优)
集群资源池 (满载)
离线训练Pod (低优)
在线推理Pod (高优)
集群资源池 (满载)
#mermaid-svg-D7HFaxbyhx70DpyX{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-D7HFaxbyhx70DpyX .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-D7HFaxbyhx70DpyX .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-D7HFaxbyhx70DpyX .error-icon{fill:#552222;}#mermaid-svg-D7HFaxbyhx70DpyX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-D7HFaxbyhx70DpyX .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-D7HFaxbyhx70DpyX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-D7HFaxbyhx70DpyX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-D7HFaxbyhx70DpyX .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-D7HFaxbyhx70DpyX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-D7HFaxbyhx70DpyX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-D7HFaxbyhx70DpyX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-D7HFaxbyhx70DpyX .marker.cross{stroke:#333333;}#mermaid-svg-D7HFaxbyhx70DpyX svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-D7HFaxbyhx70DpyX p{margin:0;}#mermaid-svg-D7HFaxbyhx70DpyX .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-D7HFaxbyhx70DpyX text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-D7HFaxbyhx70DpyX .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-D7HFaxbyhx70DpyX .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-D7HFaxbyhx70DpyX .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-D7HFaxbyhx70DpyX .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-D7HFaxbyhx70DpyX #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-D7HFaxbyhx70DpyX .sequenceNumber{fill:white;}#mermaid-svg-D7HFaxbyhx70DpyX #sequencenumber{fill:#333;}#mermaid-svg-D7HFaxbyhx70DpyX #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-D7HFaxbyhx70DpyX .messageText{fill:#333;stroke:none;}#mermaid-svg-D7HFaxbyhx70DpyX .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-D7HFaxbyhx70DpyX .labelText,#mermaid-svg-D7HFaxbyhx70DpyX .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-D7HFaxbyhx70DpyX .loopText,#mermaid-svg-D7HFaxbyhx70DpyX .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-D7HFaxbyhx70DpyX .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-D7HFaxbyhx70DpyX .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-D7HFaxbyhx70DpyX .noteText,#mermaid-svg-D7HFaxbyhx70DpyX .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-D7HFaxbyhx70DpyX .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-D7HFaxbyhx70DpyX .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-D7HFaxbyhx70DpyX .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-D7HFaxbyhx70DpyX .actorPopupMenu{position:absolute;}#mermaid-svg-D7HFaxbyhx70DpyX .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-D7HFaxbyhx70DpyX .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-D7HFaxbyhx70DpyX .actor-man circle,#mermaid-svg-D7HFaxbyhx70DpyX line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-D7HFaxbyhx70DpyX :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
集群资源已耗尽
请求扩容 (PriorityClass: High)
发送Preemption信号 (优雅终止)
Checkpoint模型保存
释放GPU资源
调度成功并启动
3. Istio服务网格:AI微服务的“交通大脑”
当AI应用拆分为多个微服务(如:预处理服务、模型推理服务、后处理服务)时,服务间的通信管理变得极其复杂。Istio通过Sidecar代理模式接管流量,提供了灰度发布、故障注入和熔断降级能力。
3.1 灰度发布(金丝雀部署)实战
在上线新版本的LLM模型时,我们通常先让5%的流量由新模型处理,观察效果无误后再全量上线。Istio的VirtualService可以轻松实现这一点。
#mermaid-svg-O6b7E9mtkm4aPv74{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-O6b7E9mtkm4aPv74 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-O6b7E9mtkm4aPv74 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-O6b7E9mtkm4aPv74 .error-icon{fill:#552222;}#mermaid-svg-O6b7E9mtkm4aPv74 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-O6b7E9mtkm4aPv74 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-O6b7E9mtkm4aPv74 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-O6b7E9mtkm4aPv74 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-O6b7E9mtkm4aPv74 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-O6b7E9mtkm4aPv74 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-O6b7E9mtkm4aPv74 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-O6b7E9mtkm4aPv74 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-O6b7E9mtkm4aPv74 .marker.cross{stroke:#333333;}#mermaid-svg-O6b7E9mtkm4aPv74 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-O6b7E9mtkm4aPv74 p{margin:0;}#mermaid-svg-O6b7E9mtkm4aPv74 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-O6b7E9mtkm4aPv74 .cluster-label text{fill:#333;}#mermaid-svg-O6b7E9mtkm4aPv74 .cluster-label span{color:#333;}#mermaid-svg-O6b7E9mtkm4aPv74 .cluster-label span p{background-color:transparent;}#mermaid-svg-O6b7E9mtkm4aPv74 .label text,#mermaid-svg-O6b7E9mtkm4aPv74 span{fill:#333;color:#333;}#mermaid-svg-O6b7E9mtkm4aPv74 .node rect,#mermaid-svg-O6b7E9mtkm4aPv74 .node circle,#mermaid-svg-O6b7E9mtkm4aPv74 .node ellipse,#mermaid-svg-O6b7E9mtkm4aPv74 .node polygon,#mermaid-svg-O6b7E9mtkm4aPv74 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-O6b7E9mtkm4aPv74 .rough-node .label text,#mermaid-svg-O6b7E9mtkm4aPv74 .node .label text,#mermaid-svg-O6b7E9mtkm4aPv74 .image-shape .label,#mermaid-svg-O6b7E9mtkm4aPv74 .icon-shape .label{text-anchor:middle;}#mermaid-svg-O6b7E9mtkm4aPv74 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-O6b7E9mtkm4aPv74 .rough-node .label,#mermaid-svg-O6b7E9mtkm4aPv74 .node .label,#mermaid-svg-O6b7E9mtkm4aPv74 .image-shape .label,#mermaid-svg-O6b7E9mtkm4aPv74 .icon-shape .label{text-align:center;}#mermaid-svg-O6b7E9mtkm4aPv74 .node.clickable{cursor:pointer;}#mermaid-svg-O6b7E9mtkm4aPv74 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-O6b7E9mtkm4aPv74 .arrowheadPath{fill:#333333;}#mermaid-svg-O6b7E9mtkm4aPv74 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-O6b7E9mtkm4aPv74 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-O6b7E9mtkm4aPv74 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-O6b7E9mtkm4aPv74 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-O6b7E9mtkm4aPv74 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-O6b7E9mtkm4aPv74 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-O6b7E9mtkm4aPv74 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-O6b7E9mtkm4aPv74 .cluster text{fill:#333;}#mermaid-svg-O6b7E9mtkm4aPv74 .cluster span{color:#333;}#mermaid-svg-O6b7E9mtkm4aPv74 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-O6b7E9mtkm4aPv74 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-O6b7E9mtkm4aPv74 rect.text{fill:none;stroke-width:0;}#mermaid-svg-O6b7E9mtkm4aPv74 .icon-shape,#mermaid-svg-O6b7E9mtkm4aPv74 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-O6b7E9mtkm4aPv74 .icon-shape p,#mermaid-svg-O6b7E9mtkm4aPv74 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-O6b7E9mtkm4aPv74 .icon-shape rect,#mermaid-svg-O6b7E9mtkm4aPv74 .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-O6b7E9mtkm4aPv74 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-O6b7E9mtkm4aPv74 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-O6b7E9mtkm4aPv74 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
100% 流量
95%
5%
Ingress Gateway
VirtualService: 路由规则
v1 subset: 权重95
v2 subset: 权重5
ai-inference.svc.cluster.local
Pod: Llama-v1
Pod: Llama-v2
配置逻辑:
3.2 流量熔断与保护
AI推理服务在高并发下可能出现显存溢出(OOM)或响应超时。Istio的Circuit Breaker可以保护后端服务不被压垮。
#mermaid-svg-JErg9jjeqzC3xUUs{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-JErg9jjeqzC3xUUs .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-JErg9jjeqzC3xUUs .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-JErg9jjeqzC3xUUs .error-icon{fill:#552222;}#mermaid-svg-JErg9jjeqzC3xUUs .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-JErg9jjeqzC3xUUs .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-JErg9jjeqzC3xUUs .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-JErg9jjeqzC3xUUs .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-JErg9jjeqzC3xUUs .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-JErg9jjeqzC3xUUs .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-JErg9jjeqzC3xUUs .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-JErg9jjeqzC3xUUs .marker{fill:#333333;stroke:#333333;}#mermaid-svg-JErg9jjeqzC3xUUs .marker.cross{stroke:#333333;}#mermaid-svg-JErg9jjeqzC3xUUs svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-JErg9jjeqzC3xUUs p{margin:0;}#mermaid-svg-JErg9jjeqzC3xUUs .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-JErg9jjeqzC3xUUs .cluster-label text{fill:#333;}#mermaid-svg-JErg9jjeqzC3xUUs .cluster-label span{color:#333;}#mermaid-svg-JErg9jjeqzC3xUUs .cluster-label span p{background-color:transparent;}#mermaid-svg-JErg9jjeqzC3xUUs .label text,#mermaid-svg-JErg9jjeqzC3xUUs span{fill:#333;color:#333;}#mermaid-svg-JErg9jjeqzC3xUUs .node rect,#mermaid-svg-JErg9jjeqzC3xUUs .node circle,#mermaid-svg-JErg9jjeqzC3xUUs .node ellipse,#mermaid-svg-JErg9jjeqzC3xUUs .node polygon,#mermaid-svg-JErg9jjeqzC3xUUs .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-JErg9jjeqzC3xUUs .rough-node .label text,#mermaid-svg-JErg9jjeqzC3xUUs .node .label text,#mermaid-svg-JErg9jjeqzC3xUUs .image-shape .label,#mermaid-svg-JErg9jjeqzC3xUUs .icon-shape .label{text-anchor:middle;}#mermaid-svg-JErg9jjeqzC3xUUs .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-JErg9jjeqzC3xUUs .rough-node .label,#mermaid-svg-JErg9jjeqzC3xUUs .node .label,#mermaid-svg-JErg9jjeqzC3xUUs .image-shape .label,#mermaid-svg-JErg9jjeqzC3xUUs .icon-shape .label{text-align:center;}#mermaid-svg-JErg9jjeqzC3xUUs .node.clickable{cursor:pointer;}#mermaid-svg-JErg9jjeqzC3xUUs .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-JErg9jjeqzC3xUUs .arrowheadPath{fill:#333333;}#mermaid-svg-JErg9jjeqzC3xUUs .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-JErg9jjeqzC3xUUs .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-JErg9jjeqzC3xUUs .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JErg9jjeqzC3xUUs .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-JErg9jjeqzC3xUUs .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JErg9jjeqzC3xUUs .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-JErg9jjeqzC3xUUs .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-JErg9jjeqzC3xUUs .cluster text{fill:#333;}#mermaid-svg-JErg9jjeqzC3xUUs .cluster span{color:#333;}#mermaid-svg-JErg9jjeqzC3xUUs div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-JErg9jjeqzC3xUUs .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-JErg9jjeqzC3xUUs rect.text{fill:none;stroke-width:0;}#mermaid-svg-JErg9jjeqzC3xUUs .icon-shape,#mermaid-svg-JErg9jjeqzC3xUUs .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JErg9jjeqzC3xUUs .icon-shape p,#mermaid-svg-JErg9jjeqzC3xUUs .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-JErg9jjeqzC3xUUs .icon-shape rect,#mermaid-svg-JErg9jjeqzC3xUUs .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JErg9jjeqzC3xUUs .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-JErg9jjeqzC3xUUs .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-JErg9jjeqzC3xUUs :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
并发数>100
开启
触发
客户端
Envoy Sidecar
熔断器检查
直连后端Pod
快速失败/降级响应
AI推理Pod集群
4. Knative事件驱动:AI推理的“按需唤醒”
对于波峰波谷明显的AI应用(如夜间推理请求极少),保持Pod常驻会造成巨大的资源浪费。Knative建立在K8s之上,引入了“事件驱动”和“缩容到零”的能力,非常适合构建Serverless AI服务。
4.1 Knative核心组件:从请求到Pod
Knative Serving定义了Kubernetes资源(KPA – Pod Autoscaler),根据并发请求数自动调整副本数。
KPA Autoscaler
Pod
QueueProxy
Activator
User
KPA Autoscaler
Pod
QueueProxy
Activator
User
#mermaid-svg-DxQd4ZRK7NLQbNYX{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-DxQd4ZRK7NLQbNYX .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DxQd4ZRK7NLQbNYX .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DxQd4ZRK7NLQbNYX .error-icon{fill:#552222;}#mermaid-svg-DxQd4ZRK7NLQbNYX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DxQd4ZRK7NLQbNYX .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DxQd4ZRK7NLQbNYX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DxQd4ZRK7NLQbNYX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DxQd4ZRK7NLQbNYX .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DxQd4ZRK7NLQbNYX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DxQd4ZRK7NLQbNYX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DxQd4ZRK7NLQbNYX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DxQd4ZRK7NLQbNYX .marker.cross{stroke:#333333;}#mermaid-svg-DxQd4ZRK7NLQbNYX svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DxQd4ZRK7NLQbNYX p{margin:0;}#mermaid-svg-DxQd4ZRK7NLQbNYX .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-DxQd4ZRK7NLQbNYX text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-DxQd4ZRK7NLQbNYX .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-DxQd4ZRK7NLQbNYX .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-DxQd4ZRK7NLQbNYX .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-DxQd4ZRK7NLQbNYX .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-DxQd4ZRK7NLQbNYX #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-DxQd4ZRK7NLQbNYX .sequenceNumber{fill:white;}#mermaid-svg-DxQd4ZRK7NLQbNYX #sequencenumber{fill:#333;}#mermaid-svg-DxQd4ZRK7NLQbNYX #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-DxQd4ZRK7NLQbNYX .messageText{fill:#333;stroke:none;}#mermaid-svg-DxQd4ZRK7NLQbNYX .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-DxQd4ZRK7NLQbNYX .labelText,#mermaid-svg-DxQd4ZRK7NLQbNYX .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-DxQd4ZRK7NLQbNYX .loopText,#mermaid-svg-DxQd4ZRK7NLQbNYX .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-DxQd4ZRK7NLQbNYX .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-DxQd4ZRK7NLQbNYX .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-DxQd4ZRK7NLQbNYX .noteText,#mermaid-svg-DxQd4ZRK7NLQbNYX .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-DxQd4ZRK7NLQbNYX .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-DxQd4ZRK7NLQbNYX .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-DxQd4ZRK7NLQbNYX .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-DxQd4ZRK7NLQbNYX .actorPopupMenu{position:absolute;}#mermaid-svg-DxQd4ZRK7NLQbNYX .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-DxQd4ZRK7NLQbNYX .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-DxQd4ZRK7NLQbNYX .actor-man circle,#mermaid-svg-DxQd4ZRK7NLQbNYX line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-DxQd4ZRK7NLQbNYX :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
Pod当前为0 (缩容状态)
窗口期内无请求
发起HTTP请求
转发请求
检测到Pending请求
扩容 Pod 从 0 ->> 1
拉取镜像/加载模型 (冷启动)
就绪 Ready
返回推理结果
缩容 Pod 到 0
实战痛点:冷启动优化 AI模型的冷启动(加载模型权重到显存)通常需要几十秒。为了优化体验:
4.2 事件驱动架构
Knative Eventing允许我们将AI推理处理逻辑解耦。例如,用户上传图片到对象存储(OSS),自动触发事件进行AI内容审核。
#mermaid-svg-JR1blzmcBVoho74v{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-JR1blzmcBVoho74v .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-JR1blzmcBVoho74v .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-JR1blzmcBVoho74v .error-icon{fill:#552222;}#mermaid-svg-JR1blzmcBVoho74v .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-JR1blzmcBVoho74v .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-JR1blzmcBVoho74v .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-JR1blzmcBVoho74v .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-JR1blzmcBVoho74v .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-JR1blzmcBVoho74v .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-JR1blzmcBVoho74v .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-JR1blzmcBVoho74v .marker{fill:#333333;stroke:#333333;}#mermaid-svg-JR1blzmcBVoho74v .marker.cross{stroke:#333333;}#mermaid-svg-JR1blzmcBVoho74v svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-JR1blzmcBVoho74v p{margin:0;}#mermaid-svg-JR1blzmcBVoho74v .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-JR1blzmcBVoho74v .cluster-label text{fill:#333;}#mermaid-svg-JR1blzmcBVoho74v .cluster-label span{color:#333;}#mermaid-svg-JR1blzmcBVoho74v .cluster-label span p{background-color:transparent;}#mermaid-svg-JR1blzmcBVoho74v .label text,#mermaid-svg-JR1blzmcBVoho74v span{fill:#333;color:#333;}#mermaid-svg-JR1blzmcBVoho74v .node rect,#mermaid-svg-JR1blzmcBVoho74v .node circle,#mermaid-svg-JR1blzmcBVoho74v .node ellipse,#mermaid-svg-JR1blzmcBVoho74v .node polygon,#mermaid-svg-JR1blzmcBVoho74v .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-JR1blzmcBVoho74v .rough-node .label text,#mermaid-svg-JR1blzmcBVoho74v .node .label text,#mermaid-svg-JR1blzmcBVoho74v .image-shape .label,#mermaid-svg-JR1blzmcBVoho74v .icon-shape .label{text-anchor:middle;}#mermaid-svg-JR1blzmcBVoho74v .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-JR1blzmcBVoho74v .rough-node .label,#mermaid-svg-JR1blzmcBVoho74v .node .label,#mermaid-svg-JR1blzmcBVoho74v .image-shape .label,#mermaid-svg-JR1blzmcBVoho74v .icon-shape .label{text-align:center;}#mermaid-svg-JR1blzmcBVoho74v .node.clickable{cursor:pointer;}#mermaid-svg-JR1blzmcBVoho74v .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-JR1blzmcBVoho74v .arrowheadPath{fill:#333333;}#mermaid-svg-JR1blzmcBVoho74v .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-JR1blzmcBVoho74v .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-JR1blzmcBVoho74v .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JR1blzmcBVoho74v .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-JR1blzmcBVoho74v .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JR1blzmcBVoho74v .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-JR1blzmcBVoho74v .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-JR1blzmcBVoho74v .cluster text{fill:#333;}#mermaid-svg-JR1blzmcBVoho74v .cluster span{color:#333;}#mermaid-svg-JR1blzmcBVoho74v div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-JR1blzmcBVoho74v .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-JR1blzmcBVoho74v rect.text{fill:none;stroke-width:0;}#mermaid-svg-JR1blzmcBVoho74v .icon-shape,#mermaid-svg-JR1blzmcBVoho74v .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JR1blzmcBVoho74v .icon-shape p,#mermaid-svg-JR1blzmcBVoho74v .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-JR1blzmcBVoho74v .icon-shape rect,#mermaid-svg-JR1blzmcBVoho74v .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JR1blzmcBVoho74v .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-JR1blzmcBVoho74v .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-JR1blzmcBVoho74v :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
文件上传事件
过滤事件
审核通过
违规
OSS Storage事件源
Knative Broker
Trigger: image/jpg
AI审核服务
入库/回调
告警中心
5. Prometheus可观测性:透视AI应用的黑盒
在云原生架构中,你不能登录到服务器上去看日志。必须依赖指标来监控系统健康度。Prometheus是云原生监控的事实标准,而AI应用需要关注特定的指标。
5.1 指标采集架构
Prometheus采用“拉取”模式采集指标。在AI场景中,我们主要采集三类指标:
#mermaid-svg-agdATvvuj4x6hJla{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-agdATvvuj4x6hJla .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-agdATvvuj4x6hJla .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-agdATvvuj4x6hJla .error-icon{fill:#552222;}#mermaid-svg-agdATvvuj4x6hJla .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-agdATvvuj4x6hJla .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-agdATvvuj4x6hJla .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-agdATvvuj4x6hJla .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-agdATvvuj4x6hJla .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-agdATvvuj4x6hJla .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-agdATvvuj4x6hJla .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-agdATvvuj4x6hJla .marker{fill:#333333;stroke:#333333;}#mermaid-svg-agdATvvuj4x6hJla .marker.cross{stroke:#333333;}#mermaid-svg-agdATvvuj4x6hJla svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-agdATvvuj4x6hJla p{margin:0;}#mermaid-svg-agdATvvuj4x6hJla .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-agdATvvuj4x6hJla .cluster-label text{fill:#333;}#mermaid-svg-agdATvvuj4x6hJla .cluster-label span{color:#333;}#mermaid-svg-agdATvvuj4x6hJla .cluster-label span p{background-color:transparent;}#mermaid-svg-agdATvvuj4x6hJla .label text,#mermaid-svg-agdATvvuj4x6hJla span{fill:#333;color:#333;}#mermaid-svg-agdATvvuj4x6hJla .node rect,#mermaid-svg-agdATvvuj4x6hJla .node circle,#mermaid-svg-agdATvvuj4x6hJla .node ellipse,#mermaid-svg-agdATvvuj4x6hJla .node polygon,#mermaid-svg-agdATvvuj4x6hJla .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-agdATvvuj4x6hJla .rough-node .label text,#mermaid-svg-agdATvvuj4x6hJla .node .label text,#mermaid-svg-agdATvvuj4x6hJla .image-shape .label,#mermaid-svg-agdATvvuj4x6hJla .icon-shape .label{text-anchor:middle;}#mermaid-svg-agdATvvuj4x6hJla .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-agdATvvuj4x6hJla .rough-node .label,#mermaid-svg-agdATvvuj4x6hJla .node .label,#mermaid-svg-agdATvvuj4x6hJla .image-shape .label,#mermaid-svg-agdATvvuj4x6hJla .icon-shape .label{text-align:center;}#mermaid-svg-agdATvvuj4x6hJla .node.clickable{cursor:pointer;}#mermaid-svg-agdATvvuj4x6hJla .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-agdATvvuj4x6hJla .arrowheadPath{fill:#333333;}#mermaid-svg-agdATvvuj4x6hJla .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-agdATvvuj4x6hJla .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-agdATvvuj4x6hJla .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-agdATvvuj4x6hJla .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-agdATvvuj4x6hJla .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-agdATvvuj4x6hJla .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-agdATvvuj4x6hJla .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-agdATvvuj4x6hJla .cluster text{fill:#333;}#mermaid-svg-agdATvvuj4x6hJla .cluster span{color:#333;}#mermaid-svg-agdATvvuj4x6hJla div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-agdATvvuj4x6hJla .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-agdATvvuj4x6hJla rect.text{fill:none;stroke-width:0;}#mermaid-svg-agdATvvuj4x6hJla .icon-shape,#mermaid-svg-agdATvvuj4x6hJla .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-agdATvvuj4x6hJla .icon-shape p,#mermaid-svg-agdATvvuj4x6hJla .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-agdATvvuj4x6hJla .icon-shape rect,#mermaid-svg-agdATvvuj4x6hJla .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-agdATvvuj4x6hJla .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-agdATvvuj4x6hJla .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-agdATvvuj4x6hJla :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
可视化与告警
采集层
数据源层
/metrics
GPU Metrics
Node Metrics
Grid Metrics
存储数据
查询
触发告警
发送邮件/钉钉
AI App Pods
NVIDIA DCGM Exporter
K8s Kubelet
Envoy Sidecars
Prometheus Server
Grafana UI
AlertManager
Time Series DB
运维人员
5.2 实战:构建GPU监控仪表盘
一个合格的AI运维仪表盘应该包含以下关键面板:
#mermaid-svg-nZfdEoKTK9mZF4A4{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-nZfdEoKTK9mZF4A4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-nZfdEoKTK9mZF4A4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-nZfdEoKTK9mZF4A4 .error-icon{fill:#552222;}#mermaid-svg-nZfdEoKTK9mZF4A4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-nZfdEoKTK9mZF4A4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-nZfdEoKTK9mZF4A4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-nZfdEoKTK9mZF4A4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-nZfdEoKTK9mZF4A4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-nZfdEoKTK9mZF4A4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-nZfdEoKTK9mZF4A4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-nZfdEoKTK9mZF4A4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-nZfdEoKTK9mZF4A4 .marker.cross{stroke:#333333;}#mermaid-svg-nZfdEoKTK9mZF4A4 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-nZfdEoKTK9mZF4A4 p{margin:0;}#mermaid-svg-nZfdEoKTK9mZF4A4 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-nZfdEoKTK9mZF4A4 .cluster-label text{fill:#333;}#mermaid-svg-nZfdEoKTK9mZF4A4 .cluster-label span{color:#333;}#mermaid-svg-nZfdEoKTK9mZF4A4 .cluster-label span p{background-color:transparent;}#mermaid-svg-nZfdEoKTK9mZF4A4 .label text,#mermaid-svg-nZfdEoKTK9mZF4A4 span{fill:#333;color:#333;}#mermaid-svg-nZfdEoKTK9mZF4A4 .node rect,#mermaid-svg-nZfdEoKTK9mZF4A4 .node circle,#mermaid-svg-nZfdEoKTK9mZF4A4 .node ellipse,#mermaid-svg-nZfdEoKTK9mZF4A4 .node polygon,#mermaid-svg-nZfdEoKTK9mZF4A4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-nZfdEoKTK9mZF4A4 .rough-node .label text,#mermaid-svg-nZfdEoKTK9mZF4A4 .node .label text,#mermaid-svg-nZfdEoKTK9mZF4A4 .image-shape .label,#mermaid-svg-nZfdEoKTK9mZF4A4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-nZfdEoKTK9mZF4A4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-nZfdEoKTK9mZF4A4 .rough-node .label,#mermaid-svg-nZfdEoKTK9mZF4A4 .node .label,#mermaid-svg-nZfdEoKTK9mZF4A4 .image-shape .label,#mermaid-svg-nZfdEoKTK9mZF4A4 .icon-shape .label{text-align:center;}#mermaid-svg-nZfdEoKTK9mZF4A4 .node.clickable{cursor:pointer;}#mermaid-svg-nZfdEoKTK9mZF4A4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-nZfdEoKTK9mZF4A4 .arrowheadPath{fill:#333333;}#mermaid-svg-nZfdEoKTK9mZF4A4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-nZfdEoKTK9mZF4A4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-nZfdEoKTK9mZF4A4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nZfdEoKTK9mZF4A4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-nZfdEoKTK9mZF4A4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nZfdEoKTK9mZF4A4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-nZfdEoKTK9mZF4A4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-nZfdEoKTK9mZF4A4 .cluster text{fill:#333;}#mermaid-svg-nZfdEoKTK9mZF4A4 .cluster span{color:#333;}#mermaid-svg-nZfdEoKTK9mZF4A4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-nZfdEoKTK9mZF4A4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-nZfdEoKTK9mZF4A4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-nZfdEoKTK9mZF4A4 .icon-shape,#mermaid-svg-nZfdEoKTK9mZF4A4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nZfdEoKTK9mZF4A4 .icon-shape p,#mermaid-svg-nZfdEoKTK9mZF4A4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-nZfdEoKTK9mZF4A4 .icon-shape rect,#mermaid-svg-nZfdEoKTK9mZF4A4 .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nZfdEoKTK9mZF4A4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-nZfdEoKTK9mZF4A4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-nZfdEoKTK9mZF4A4 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
异常
Yes
No
GPU Monitoring Dashboard
面板1: GPU SM 利用率
面板2: 显存 使用量
面板3: PCIe 带宽
面板4: 温度与功耗
面板5: 推理请求延迟 P99
显存泄漏?
自动扩容/重启
持续观测
核心指标解释:
- DCGM_FI_DEV_GPU_UTIL:GPU计算核心利用率。若低但显存占用高,可能是模型受限于I/O或CPU预处理。
- DCGM_FI_DEV_FB_USED:显存使用量。接近100%时,极易触发OOM Killer。
- knative_serving_requests_total:Knative服务的总请求数,用于计算QPS。
6. 结语:融合与进化
云原生AI不仅仅是把AI应用部署到Kubernetes上那么简单。它要求我们在调度层理解硬件特性,在网络层治理复杂流量,在运行层实现极致的弹性,在观测层建立敏锐的感知。 通过Kubernetes的智能调度,我们最大化了昂贵的GPU算力价值;通过Istio,我们让AI服务的迭代更加平滑安全;通过Knative,我们将AI算力变成了随取随用的水电煤;通过Prometheus,我们确保了这套复杂系统的稳健运行。 未来,随着AI芯片的异构化和网络协议(RDMA/GPUDirect)的演进,云原生AI架构还将继续演化,但掌握这四大核心组件的协同工作原理,将是每一位架构师应对未来挑战的基石。



