第一章:K8s与vLLM初识
大家好,我是你们的老朋友,一个在SRE和AI推理部署领域摸爬滚打多年的工程师。今天咱们开始聊一个非常实际的话题——K8s健康检查vLLM服务。
说实话,我刚开始接触大模型推理部署那会儿,踩了不少坑。模型跑起来了,但服务动不动就挂,客户投诉电话一个接一个。后来我意识到,问题出在健康检查上。嗯,这节课我们就从最基础的东西讲起。
1.1 K8s核心概念:Pod、Service、Deployment
先说说K8s。很多人觉得它复杂,其实说白了,它就是一套帮你管理容器的工具。你想想看,我们部署一个vLLM服务,总不能手动去启动、停止、扩容吧?K8s就是干这个的。
三个核心概念,我一个个讲。
Pod:最小的部署单元
Pod是K8s里最小的计算单元。一个Pod可以包含一个或多个容器。我个人习惯,一个Pod里只放一个主容器,最多加个sidecar做辅助。
举个例子,你部署vLLM,模型推理进程跑在一个容器里,日志收集的sidecar跑在另一个容器里。它们共享网络和存储,配合得很默契。
关键点:Pod是短暂的,随时可能被销毁重建。所以别把数据直接存在Pod里,除非你用Volume。
Service:稳定的访问入口
Pod会变,IP会变,那客户端怎么访问?Service就是来解决这个问题的。它提供一个固定的IP和DNS名称,背后代理一组Pod。
我在项目中遇到过,vLLM服务刚上线时,客户端直接连Pod IP,结果Pod一重启就全连不上了。后来加了Service,世界清净了。
小技巧:Service的类型有ClusterIP、NodePort、LoadBalancer。对内服务用ClusterIP,对外暴露用NodePort或LoadBalancer。
Deployment:声明式的更新管理
Deployment负责管理Pod的副本数、更新策略、回滚等。你只需要告诉它「我要3个副本,镜像版本是v0.1」,它就会帮你搞定。
我记得有一次,模型版本升级,我直接改了Deployment的镜像版本,K8s自动滚动更新,一个都没断。嗯,这种感觉很爽。
| 概念 | 作用 | 类比 |
|---|---|---|
| Pod | 运行容器的实例 | 一台虚拟机 |
| Service | 稳定的网络入口 | 负载均衡器 |
| Deployment | 管理Pod的生命周期 | 运维脚本 |
1.2 vLLM简介与架构
vLLM是什么?它是一个高性能的大模型推理引擎。说白了,就是让LLM跑得更快、更省显存。
它的核心优势在于PagedAttention技术。传统推理引擎把整个KV Cache存在连续内存里,容易产生碎片。vLLM把它分页管理,像操作系统的虚拟内存一样,利用率高得多。
我刚开始用vLLM时,对比过HuggingFace的Transformers,同样一个70B模型,vLLM的吞吐量能高出3-5倍。这不是吹的,是实测数据。
vLLM架构简图
下面这张图是我自己画的,展示了vLLM的核心组件和请求流程。
流程很简单:客户端发请求,API Server接收并路由,Scheduler负责调度和批处理,最后交给推理引擎执行。PagedAttention管理器在背后管理显存,让推理更高效。
1.3 为什么需要健康检查?
这个问题我问过很多新人。他们的第一反应是「K8s自带的liveness probe和readiness probe不是标配吗?」
对,但vLLM服务有其特殊性。
我举个例子。vLLM启动时,需要加载模型权重到显存。一个70B的模型,加载时间可能长达5-10分钟。如果K8s在这段时间内认为Pod「不健康」而不断重启它,那就陷入死循环了。
我曾经遇到过,模型加载到一半,K8s觉得没响应,直接杀了Pod重建。结果就是永远启动不起来。后来我加了startupProbe,给了模型加载足够的缓冲时间,问题才解决。
避坑指南:我曾经因为没配readiness probe,导致Service把流量转发到还在加载模型的Pod上,客户端全部超时。记住,readiness probe告诉K8s「我准备好了,可以接客了」。
健康检查的核心作用有三个:
- 自动恢复:Pod挂了,K8s自动重启,不用你半夜爬起来。
- 流量管理:不健康的Pod不接收流量,保证服务质量。
- 滚动更新:新版本上线时,只有健康检查通过后才替换旧Pod。
说白了,健康检查就是K8s的「眼睛」和「手」。眼睛看Pod是否活着,手去执行重启或摘除流量的操作。
个人建议:对于vLLM服务,至少配置三种探针:startupProbe(启动检查)、livenessProbe(存活检查)、readinessProbe(就绪检查)。后面我们会详细讲每种探针的配置方法。
好了,这一章我们认识了K8s的核心概念,了解了vLLM的架构,也明白了健康检查为什么重要。下一章,我们会动手配置第一个健康检查探针。嗯,到时候见。