一、基础概念
1. 为什么需要资源限制?
- 防止资源饥饿:避免单个容器耗尽节点资源
- 提高调度效率:帮助调度器做出合理决策
- 保障应用性能:为关键应用预留资源
- 成本控制:优化资源利用率,降低云成本
- 增强稳定性:减少节点故障率
2.资源请求(Requests) vs 限制(Limits)
- Requests:调度器分配资源的依据(节点必须满足)
- Limits:容器运行时强制执行的资源上限

3.工作原理
- CPU限制:通过Linux Cgroups的cpu.shares实现请求量,cpu.cfs_quota_us实现限制。
- 内存限制:通过OOM Killer实现,当容器内存超过限制时,触发OOM终止进程。

二、配置实践
1.pod配置资源限制
apiVersion: v1
kind: Pod
metadata:name: web-app
spec:containers:- name: nginximage: nginx:1.22.1resources:requests:cpu: "250m" # 0.25核心 1指1核心memory: "128Mi" # 128 Mebibyteslimits:cpu: "500m" # 0.5核心memory: "256Mi" # 256 Mebibytes
2.命名空间资源配额(ResourceQuota)
apiVersion: v1
kind: ResourceQuota
metadata:name: team-a-quotanamespace: dev # 作用于 dev 命名空间
spec:hard:requests.cpu: "10" # 命名空间CPU请求总量上限requests.memory: 20Gilimits.cpu: "20" # 命名空间CPU限额20Glimits.memory: 40Gipods: "50" # 最大Pod数量