无需登录 数据私有 本地保存

K8s 资源限制计算器 - 推荐 requests/limits

45
0
0
0
工作负载配置
Web 应用
API 微服务
数据库
缓存服务
消息队列
批处理
AI / 推理
静态服务
MiB
应用稳定运行时的内存占用(不含突发峰值)
QPS
1.5x (保守)2.5x (默认)6x (激进)
推荐资源配置
CPU
-- request -- limit
CPU 使用率预估 (基于 request)
~55% 稳态
内存
-- request -- limit
内存使用率预估 (基于 request)
~65% 稳态
QoS 等级: Burstable request < limit,灵活调配
建议定期根据实际监控数据调整资源配置,避免过度配置或资源不足。
Deployment YAML 片段
resources: requests: cpu: "250m" memory: "512Mi" limits: cpu: "500m" memory: "1Gi"
典型工作负载参考配置
工作负载类型 CPU Request CPU Limit Memory Request Memory Limit 适用场景
Web 应用200m - 500m500m - 2256Mi - 1Gi512Mi - 2GiNginx, Node.js, PHP
API 微服务200m - 500m500m - 2384Mi - 1Gi768Mi - 2GiSpring Boot, Go, FastAPI
数据库500m - 21 - 42Gi - 8Gi3Gi - 12GiMySQL, PostgreSQL
缓存200m - 1500m - 31Gi - 8Gi1.5Gi - 12GiRedis, Memcached
消息队列300m - 21 - 61Gi - 8Gi2Gi - 16GiKafka, RabbitMQ
批处理100m - 500m500m - 4256Mi - 2Gi512Mi - 6GiCronJob, 数据处理
AI / 推理500m - 42 - 82Gi - 16Gi4Gi - 24Gi模型推理, GPU 任务
静态服务50m - 200m200m - 500m64Mi - 256Mi128Mi - 512MiCDN, 静态文件
常见问题 (FAQ)

Requests 是容器调度时保证获得的最小资源量,调度器会根据 request 值来决定将 Pod 调度到哪个节点上。Limits 是容器运行时能使用的最大资源上限。当容器 CPU 使用超过 limit 时会被 throttling(限流);当内存使用超过 limit 时,容器会被 OOMKilled 并重启。合理设置 requests 和 limits 是 K8s 资源管理的核心实践。

这种方式称为 Burstable QoS。设置较低的 request 可以节省调度资源,提高节点利用率;设置较高的 limit 允许应用在流量高峰时弹性使用更多资源。对于大多数应用,这是性价比最高的配置策略。但对于数据库等关键服务,建议 request = limit(Guaranteed QoS)以确保稳定性和避免被驱逐。

OOMKilled 表示容器因内存使用超过 limit 而被 K8s 强制终止(状态码 137)。避免方法:① 设置充足的 memory limit,至少为稳态内存的 1.5-2 倍;② 对于 Java 应用,预留 JVM 堆外内存(建议 limit ≥ request × 1.5);③ 开启应用内存监控和告警;④ 使用 HPA 根据内存指标自动扩容。

CPU throttling 指容器 CPU 使用达到 limit 时,内核会限制其 CPU 时间片,导致应用响应变慢、延迟增加。频繁 throttling 会严重影响用户体验。建议:① CPU limit 设置为 request 的 2-3 倍以应对突发流量;② 监控 CPU throttling 指标;③ 对于延迟敏感型应用,设置更宽松的 CPU limit 或使用 Guaranteed QoS。

Guaranteed(保证级):所有容器都设置了 request == limit(CPU 和内存均相等),最不容易被驱逐,适合数据库等关键服务。Burstable(弹性级):至少一个容器设置了 request 或 limit 且不完全相等,性价比较高,适合大多数 Web/API 服务。BestEffort(尽力级):未设置任何 request 和 limit,最容易被驱逐,仅适合开发测试或低优先级任务。

① 使用 Prometheus + Grafana 监控容器的实际 CPU/内存使用量;② 观察 7-30 天的使用趋势(包含峰值时段);③ CPU request 建议设置为 P75-P90 使用量,limit 设置为 P95-P99 或 request × 2~3;④ Memory request 建议设置为 P90 使用量 + 10% 缓冲,limit 设置为 request × 1.5~2;⑤ 使用 VPA(Vertical Pod Autoscaler)辅助分析,但谨慎在生产环境自动调整。

Java 应用(尤其是 Spring Boot)需要特别注意:① JVM 堆内存只占容器内存的一部分,还有堆外内存、元空间、线程栈等开销;② 建议 JVM 堆大小设置为 memory limit 的 60%-75%,剩余留给堆外;③ 使用 -XX:MaxRAMPercentage=75.0 等参数让 JVM 自动适配容器内存;④ memory limit 至少比 request 高 50% 以避免 OOM;⑤ 建议使用 JDK 11+ 的容器感知特性。

CPU:使用毫核(millicores),如 250m 表示 0.25 核,11000m 表示 1 核。整数核可直接写数字如 2内存:使用二进制单位,Mi(Mebibytes,1Mi=1024Ki)、Gi(Gibibytes,1Gi=1024Mi)。推荐统一使用 Mim 作为标准单位,避免混淆。