Retinaface+CurricularFace 人脸识别服务 Kubernetes StatefulSet 部署实战
在将 Retinaface+CurricularFace 等人脸识别模型部署到线上服务时,单机部署往往难以应对流量压力,而普通的 Kubernetes Deployment 又可能因 Pod 重启导致状态丢失。针对这类有状态服务,Kubernetes 的 StatefulSet 提供了更稳定的网络标识和持久化存储方案。
为什么选择 StatefulSet 部署人脸识别服务?
人脸识别模型服务通常具备以下特点:
- 模型文件大:Retinaface 和 CurricularFace 模型文件合计数百 MB
- 加载时间长:初始化耗时,频繁重启影响可用性
- 需要持久化存储:日志、临时缓存需独立保存
- 服务发现需稳定:实例需固定网络标识
普通 Deployment 每次重启 Pod 可能被调度至不同节点,导致存储丢失和网络名称变更。StatefulSet 则通过以下特性解决这些问题:
- 稳定的网络标识:Pod 名称固定(如 face-recognition-0)
- 有序的部署和扩展:按顺序创建、删除,避免脑裂
- 持久化存储:每个 Pod 绑定独立 PVC
- 优雅的滚动更新:支持金丝雀发布等策略
StatefulSet 与 Deployment 的核心区别如下:
graph TD A[人脸识别服务需求] --> B{选择部署方式}
B --> C[Deployment]
B --> D[StatefulSet]
C --> C1[无状态服务]
C --> C2[Pod 名称随机]
C --> C3[存储随 Pod 删除]
C --> C4[适合 Web 前端]
D --> D1[有状态服务]
D --> D2[Pod 名称固定]
D --> D3[存储持久化]
D --> D4[适合数据库/模型服务]
E[Retinaface+CurricularFace] --> F[模型文件大]
E --> G[加载时间长]
E --> H[需要持久存储]
F --> D
G --> D
H --> D
环境准备与镜像说明
镜像环境配置
使用的镜像已预置完整推理环境,基础配置如下:
# 镜像环境概览
基础镜像:Ubuntu 20.04
Python 版本:3.11.14
深度学习框架:PyTorch 2.5.0 + CUDA 12.1
人脸识别算法:RetinaFace(检测) + CurricularFace(识别)
工作目录:/root/Retinaface_CurricularFace

