Kubernetes 的 ResourceQuota 是一种用于限制命名空间(Namespace)中资源使用总量的机制。它可以帮助集群管理员控制每个命名空间能使用的计算资源(如 CPU、内存)、存储以及对象数量(如 Pod、Service、PersistentVolumeClaim 等),防止资源被某个项目或团队过度占用,提升集群的稳定性和多租户管理能力。
ResourceQuota 的作用
ResourceQuota 通过在特定命名空间中创建一个
ResourceQuota对象,来定义该命名空间内所有资源使用的硬性上限。一旦设置了配额,用户在该命名空间中创建资源时,必须遵守这些限制,否则创建请求会被拒绝。
常见可限制的资源包括:
计算资源:cpu、memory、ephemeral-storage 存储资源:requests.storage、persistentvolumeclaims 对象数量:pods、services、replicationcontrollers、deployments、secrets、configmaps 等如何配置 ResourceQuota
以下是一个典型的 ResourceQuota 配置示例:
apiVersion: v1
kind: ResourceQuota
metadata:
name: quota-example
namespace: my-namespace
spec:
hard:
pods: "10"
requests.cpu: "4"
requests.memory: 8Gi
limits.cpu: "6"
limits.memory: 12Gi
persistentvolumeclaims: "5"
requests.storage: 100Gi
services.loadbalancers: "2"
这个配置表示在
my-namespace命名空间中: 最多允许运行 10 个 Pod CPU 请求总量不超过 4 核,限制总量不超过 6 核 内存请求不超过 8GB,限制不超过 12GB 最多创建 5 个 PVC,总存储请求不超过 100GB 最多创建 2 个 LoadBalancer 类型的服务
实际使用建议
要让 ResourceQuota 生效,需确保:
目标命名空间已存在,或提前创建好 为命名空间设置配额前,检查当前资源使用情况,避免立即超限导致无法创建新对象 配合 LimitRange 使用,可以为单个容器设置默认资源请求和限制,便于统一管理 定期监控配额使用情况,可通过命令查看:kubectl -n my-namespace describe resourcequota quota-example
基本上就这些。ResourceQuota 不复杂但容易忽略,合理设置能有效防止资源滥用,提升集群利用率和稳定性。
