从技术支持工程师的角度,Kubernetes 中通过 Resource Requests 和 Limits 控制资源分配的核心步骤如下:
-
定义资源需求:
- 在 Pod 的容器配置中设置
requests
,声明容器启动所需的最小资源(如 CPU 和内存)。 - 示例片段:
resources: requests: cpu: "100m" # 0.1 核 memory: "256Mi" limits: cpu: "500m" # 0.5 核 memory: "1Gi"
- 在 Pod 的容器配置中设置
-
监控资源使用:
- 部署 Metrics Server,通过
kubectl top nodes/pods
查看节点和 Pod 的实际资源消耗。 - 结合 Prometheus + Grafana 分析历史趋势,避免过量或不足。
- 部署 Metrics Server,通过
-
调整资源策略:
- Pending Pod 处理:若 Pod 因资源不足无法调度,需降低
requests
值或扩容节点。 - OOMKilled 错误:检查容器内存
limits
是否过小,逐步上调并观察应用稳定性。 - CPU 节流:若容器频繁被限流(Throttling),适当提高
limits.cpu
或优化应用性能。
- Pending Pod 处理:若 Pod 因资源不足无法调度,需降低
-
命名空间级约束:
- 使用 ResourceQuota 限制命名空间的总资源使用量,防止资源抢占。
- 通过 LimitRange 设置默认的 Requests/Limits,避免遗漏配置。
最佳实践:
- 生产环境中,建议至少设置
requests
,避免资源争抢;内存limits
不超过节点总内存的 80%。 - 开发环境可通过 LimitRange 强制约束,避免误操作。
- 避免过度分配,防止节点资源碎片化。