华为云 CCE 部署 Python FastAPI 服务:镜像构建、探针调优与弹性伸缩实战
把本地跑通的 Python FastAPI 工单查询服务搬到华为云 CCE,是我这个月最值的一次改造。目标很明确:滚动发布不中断、实例故障自愈、早高峰自动扩容。下面按落地顺序记录配置和踩坑。
第一步,构建镜像推 SWR。Dockerfile 用 python:3.11-slim,先 COPY requirements.txt 再 pip install,最后才拷业务代码,改业务不会重建依赖层,构建时间从 90 秒降到 12 秒。docker login 后把 tag 打成 swr.cn-north-4.myhuaweicloud.com/demo/fastapi-ticket:v1 再 push。仓库与集群同区域走内网,省掉大量网络排障。
第二步,编排 Deployment。三个配置项必须给对:readinessProbe 指向 /healthz,只检查依赖是否就绪,未就绪不接流量;livenessProbe 只查进程存活,别把数据库连通性写进去,否则数据库抖动会让整批 Pod 一起重启;resources.requests 必须填,cpu 200m、memory 256Mi,limits 给 500m 和 512Mi,因为 HPA 的 CPU 利用率以 requests 为分母。
第三步,暴露服务。Service 用 ClusterIP,前面挂 Ingress 绑 ELB,健康检查路径同样填 /healthz,超时 3 秒。ELB 健康检查间隔默认 10 秒,缩容时流量可能短暂打到正在退出的 Pod。
第四步,配 HPA。执行 kubectl autoscale deployment fastapi-ticket --cpu-percent=60 --min=2 --max=6。实测早高峰 CPU 到 58% 时副本扩到 5 个,晚高峰回落后缩回 2 个。
踩过三个坑。一是探针路径写成 /health,服务实际是 /healthz,Pod 长期 Not Ready,滚动发布卡在中途,用 kubectl describe pod 看到 Unhealthy 才定位。二是最初忘了写 resources.requests,HPA 目标值显示 unknown/60%,扩缩容完全不生效。三是缩容瞬间出现零散 502,uvicorn 收到 SIGTERM 直接断连,在 preStop 加 sleep 15 秒并让服务优雅退出后消失。
效果:首屏接口 P95 从 480ms 降到 160ms,副本自动从 2 扩到 5,CPU 稳定在 55% 左右,日常基本不用盯。CCE 的价值不在省机器,而在于把发布、自愈、扩容变成可版本化的声明式配置。
- 点赞
- 收藏
- 关注作者
评论(0)