在Kubernetes中设置Pod资源配额和限制需通过ResourceQuota和LimitRange实现,并结合Requests/Limits配置。以下为实践经验:
-
资源定义:
- Requests/Limits:在Pod容器中定义
resources.requests
(基准资源)和resources.limits
(硬性上限),例如CPU为100m-1核,内存为256Mi-2Gi。 - LimitRange:通过创建LimitRange对象为命名空间设置默认值及约束,避免遗漏配置。
- ResourceQuota:使用ResourceQuota限制命名空间级别的总资源量,防止单个团队过度占用。
- Requests/Limits:在Pod容器中定义
-
实践经验:
- 监控与调优:通过Prometheus+Grafana监控资源利用率,定期调整Requests/Limits以匹配实际负载。
- QoS分级:基于Requests配置自动划分Pod的QoS等级(Guaranteed/Burstable),保障关键服务稳定性。
- HPA协同:结合HorizontalPodAutoscaler实现动态扩缩容,需确保Metrics Server采集资源指标。
-
挑战与解决方案:
- 资源碎片:节点资源分配不均导致调度失败,通过动态伸缩(Cluster Autoscaler)或调整Pod优先级缓解。
- OOM问题:内存Limits设置过低引发容器被杀,需结合历史峰值及监控数据合理设定。
- 突发流量:过度依赖Limits可能限制应用弹性,采用Burstable QoS并预留缓冲资源。
注:需定期审计资源配置,避免因静态阈值导致资源利用率低下或稳定性风险。