Resource Quota
资源配额(Resource Quotas)是用来限制用户资源用量的一种机制。
它的工作原理为
资源配额应用在 Namespace 上,并且每个 Namespace 最多只能有一个
ResourceQuota对象开启计算资源配额后,创建容器时必须配置计算资源请求或限制(也可以用 LimitRange 设置默认值)
用户超额后禁止创建新的资源
开启资源配额功能
首先,在 API Server 启动时配置准入控制
--admission-control=ResourceQuota然后,在 namespace 中创建一个
ResourceQuota对象
资源配额的类型
计算资源,包括 cpu 和 memory
cpu, limits.cpu, requests.cpu
memory, limits.memory, requests.memory
存储资源,包括存储资源的总量以及指定 storage class 的总量
requests.storage:存储资源总量,如 500Gi
persistentvolumeclaims:pvc 的个数
.storageclass.storage.k8s.io/requests.storage
.storageclass.storage.k8s.io/persistentvolumeclaims
requests.ephemeral-storage 和 limits.ephemeral-storage (需要 v1.8+)
对象数,即可创建的对象的个数
pods, replicationcontrollers, configmaps, secrets
resourcequotas, persistentvolumeclaims
services, services.loadbalancers, services.nodeports
计算资源示例
对象个数示例
LimitRange
默认情况下,Kubernetes 中所有容器都没有任何 CPU 和内存限制。LimitRange 用来给 Namespace 增加一个资源限制,包括最小、最大和默认资源。比如
配额范围
每个配额在创建时可以指定一系列的范围
Terminating
podSpec.ActiveDeadlineSeconds>=0 的 Pod
NotTerminating
podSpec.activeDeadlineSeconds=nil 的 Pod
BestEffort
所有容器的 requests 和 limits 都没有设置的 Pod(Best-Effort)
NotBestEffort
与 BestEffort 相反
原地 Pod 资源调整与配额管理
从 Kubernetes v1.33 开始,原地 Pod 资源调整功能升级为 Beta 版本,这给资源配额管理带来了新的考量因素。
配额验证机制
当执行原地资源调整时,Kubernetes 会验证调整后的资源是否超出命名空间的配额限制:
配额检查时机
原地资源调整时的配额验证流程:
调整前验证:检查目标资源是否会超出配额
原子性操作:确保配额更新与资源调整的原子性
回滚机制:调整失败时自动恢复配额计数
动态配额管理示例
弹性配额配置
配额监控和告警
监控原地调整对配额的影响:
配额最佳实践
1. 预留缓冲区
为原地调整预留配额缓冲区:
2. 分层配额管理
针对不同优先级的工作负载设置分层配额:
3. 配额使用情况查看
监控配额使用和原地调整的影响:
故障排查
配额相关的调整失败
常见问题和解决方案:
配额不足导致调整失败
配额计算错误
配额策略冲突
与其他功能的集成
与 VPA 集成
配置支持 VPA 原地调整的配额:
与多租户环境集成
在多租户环境中合理分配原地调整能力:
最后更新于