K8s Namespace 资源隔离:设置资源配额(ResourceQuota)与 Pod 数量限制
·
Kubernetes Namespace 资源隔离:资源配额(ResourceQuota)与 Pod 数量限制
在 Kubernetes 中,Namespace 是资源隔离的核心机制。通过 ResourceQuota 对象和 Pod 数量限制,可精确控制 Namespace 内资源使用,防止资源耗尽或抢占。以下是实现方法:
一、资源配额(ResourceQuota)的作用
- 限制计算资源总量
控制 Namespace 中所有 Pod 的 CPU、内存 总使用量。 - 限制存储资源
约束 存储卷(PVC) 的数量和容量。 - 限制对象数量
管理 Pod、Service、ConfigMap 等 Kubernetes 对象的数量上限。
二、配置 ResourceQuota 的 YAML 示例
apiVersion: v1
kind: ResourceQuota
metadata:
name: example-quota
namespace: dev-namespace # 指定目标命名空间
spec:
hard:
# 计算资源限制
limits.cpu: "10" # 总 CPU 上限(单位:核)
limits.memory: 20Gi # 总内存上限
requests.cpu: "5" # 总 CPU 请求量下限
requests.memory: 10Gi # 总内存请求量下限
# 对象数量限制
pods: "50" # 最大 Pod 数量
services: "10" # 最大 Service 数量
persistentvolumeclaims: "5" # 最大 PVC 数量
# 存储资源限制
requests.storage: 100Gi # 总存储请求量上限
三、Pod 数量限制的两种方式
-
通过 ResourceQuota 全局限制
如上例中的pods: "50",限制整个 Namespace 的 Pod 总数。 -
通过 LimitRange 单 Pod 限制
控制单个 Pod 的资源请求量,间接影响可运行 Pod 数量:apiVersion: v1 kind: LimitRange metadata: name: pod-limits namespace: dev-namespace spec: limits: - type: Pod max: cpu: "2" # 单 Pod 最大 CPU 用量 memory: 4Gi # 单 Pod 最大内存用量
四、验证与调试
-
检查配额使用情况:
kubectl describe resourcequota example-quota -n dev-namespace -
超限时的错误提示:
当创建新 Pod 超过配额时,Kubernetes 返回错误:Error creating: pods "nginx" is forbidden: exceeded quota
五、最佳实践
- 按环境划分 Namespace
如dev、prod独立配额,避免开发测试占用生产资源。 - 结合 LimitRange 使用
防止单 Pod 资源过大导致资源碎片化。 - 监控与告警
通过 Prometheus 监控配额使用率,及时扩容或清理资源。
注意:ResourceQuota 需提前创建,对已有资源无追溯效力。调整配额可能影响业务连续性,建议在低峰期操作。
更多推荐
所有评论(0)