4、K8s核心概念:Pod、Deployment、Service、ConfigMap、Secret、Namespace、持久卷(PV/PVC)的基本概念与关系

说实话,刚接触K8s的时候,我也被这一堆名词搞得头大。Pod、Deployment、Service……它们到底谁管谁?别急,我带你捋一遍。这些概念搞清楚了,后面部署vLLM才会顺手。

4.1 Pod:最小的调度单元

Pod是K8s里你能直接操作的最小单位。你可以把它理解成「一组容器的集合」。这些容器共享网络、存储,以及一些生命周期管理。

我习惯把Pod比作「豆荚」——里面可以有一颗豆子(一个容器),也可以有多颗豆子(多个容器)。但实际生产中,我建议一个Pod里只跑一个主容器。除非你有边车模式(Sidecar)的需求,比如日志收集、网络代理等。

💡 我的经验: 在部署vLLM时,每个推理实例就是一个Pod。我遇到过Pod因为资源限制被OOM Kill的情况,所以记得给Pod设置合理的requests和limits。

4.2 Deployment:声明式管理Pod

你不可能手动一个个创建Pod吧?Deployment就是用来管理Pod的「控制器」。你告诉它「我要3个Pod,镜像用vllm:v0.4.0」,它就会帮你搞定。

Deployment的核心能力包括:

  • 滚动更新:新版本上线,逐个替换Pod,不影响服务
  • 回滚:出问题了?一键回到上一个版本
  • 扩缩容:流量大了,把Pod从3个变成10个
  • 自愈:Pod挂了?Deployment会自动再起一个

我曾经在生产环境遇到过一个问题:Deployment的滚动更新策略没配好,导致新Pod还没就绪,旧Pod就被删了,服务中断了几秒。嗯,这里要注意——minReadySecondsmaxSurge这两个参数一定要调好。

4.3 Service:稳定的网络入口

Pod是动态的,随时可能被重建,IP也会变。那客户端怎么访问?Service就是干这个的——它提供一个固定的虚拟IP和DNS名称,把请求转发到后端的Pod上。

Service的类型有几种:

类型 说明 适用场景
ClusterIP 集群内部可访问 内部服务调用
NodePort 通过节点IP+端口访问 开发测试环境
LoadBalancer 云厂商提供负载均衡器 生产环境对外暴露

部署vLLM时,我一般用ClusterIP让内部服务调用,再用Ingress对外暴露API。这样更安全,也更好管理。

4.4 ConfigMap & Secret:配置与敏感信息

应用需要配置吧?比如模型路径、日志级别。这些可以放在ConfigMap里。那API密钥、数据库密码呢?这些敏感信息放Secret里。

两者的区别很简单:

  • ConfigMap:明文存储,适合非敏感配置
  • Secret:Base64编码(注意不是加密),适合敏感信息
⚠️ 避坑指南: 我曾经直接把数据库密码写在ConfigMap里,结果被安全审计发现了……记住,Secret虽然只是Base64编码,但至少比明文强。生产环境建议用外部密钥管理服务,比如Vault。

4.5 Namespace:逻辑隔离

一个K8s集群可以给多个团队用。怎么隔离?Namespace就是干这个的。每个Namespace里的资源是独立的,比如dev、test、prod三个环境各一个Namespace。

我个人的习惯是:每个项目一个Namespace,资源配额(ResourceQuota)也配上,防止某个项目把集群资源吃光。

4.6 持久卷(PV/PVC):数据不丢失

Pod是临时的,但数据不能丢。比如vLLM的模型文件、推理日志。这时候就需要持久化存储。

K8s用PV(PersistentVolume)和PVC(PersistentVolumeClaim)来管理存储:

  • PV:集群管理员提供的存储资源,比如NFS、Ceph、云硬盘
  • PVC:用户对存储的请求,比如「我要10GB,读写一次」

PVC绑定到PV后,Pod就可以挂载使用了。Pod删了,数据还在。

4.7 它们之间的关系

说了这么多,它们到底怎么配合?我画了一张图,你看一眼就明白了:

K8s核心概念关系图 Namespace(逻辑隔离边界) Deployment 管理Pod的声明式控制器 Pod 最小调度单元(容器组) Service 稳定的网络访问入口 ConfigMap 非敏感配置(明文) Secret 敏感信息(Base64编码) PV / PVC 持久化存储 管理 转发流量 注入配置 注入密钥 挂载

你看,Deployment管理Pod的创建和更新,Service为Pod提供稳定的访问入口,ConfigMap和Secret给Pod注入配置和密钥,PV/PVC为Pod提供持久化存储。所有这些资源都运行在Namespace的逻辑隔离边界内。

说白了,K8s就是一套「声明式」的资源编排系统。你告诉它你想要什么状态,它自己会想办法达到。这个思想贯穿始终,后面部署vLLM的时候你会深有体会。

📌 一句话总结: Pod是干活的人,Deployment是项目经理,Service是前台接待,ConfigMap/Secret是资料库,PV/PVC是仓库,Namespace是办公区。各司其职,配合默契。

公众号:蓝海资料掘金营,微信deep3321