管理 Namespace 中的资源配额

当多个团队或用户共享同一个 Kubernetes 集群时,资源竞争问题不可避免。为了确保资源的合理分配和使用,需要对不同团队或用户的资源使用配额进行限制。

资源配额控制策略

Kubernetes 提供了两种主要的资源分配管理控制策略:

ResourceQuota

用于限制 namespace 中所有 Pod 占用的总资源 request 和 limit,包括:

  • 计算资源配额:CPU、内存等
  • 存储资源配额:持久化卷声明等
  • 对象数量配额:Pod、Service、ConfigMap 等 Kubernetes 对象的数量

LimitRange

用于设置 namespace 中 Pod 的默认资源 request 和 limit 值,以及单个资源对象的使用范围限制。

启用资源配额功能

在现代 Kubernetes 集群中,ResourceQuota 和 LimitRange 准入控制器通常默认启用。如果需要手动启用,可以在 API Server 的启动参数中添加:

--enable-admission-plugins=ResourceQuota,LimitRange

实战示例

以下示例展示如何为 spark-cluster namespace 配置资源配额和限制。

计算资源配额配置

创建 spark-compute-resources.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
  namespace: spark-cluster
spec:
  hard:
    pods: "20"                    # 最多创建 20 个 Pod
    requests.cpu: "20"            # CPU 请求总量不超过 20 核
    requests.memory: 100Gi        # 内存请求总量不超过 100Gi
    limits.cpu: "40"              # CPU 限制总量不超过 40 核
    limits.memory: 200Gi          # 内存限制总量不超过 200Gi

应用配置:

kubectl apply -f spark-compute-resources.yaml

查看资源配额状态:

kubectl -n spark-cluster describe resourcequota compute-resources

对象数量限制配置

创建 spark-object-counts.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: object-counts
  namespace: spark-cluster
spec:
  hard:
    configmaps: "10"                    # 最多 10 个 ConfigMap
    persistentvolumeclaims: "4"         # 最多 4 个 PVC
    replicationcontrollers: "20"        # 最多 20 个 RC
    secrets: "10"                       # 最多 10 个 Secret
    services: "10"                      # 最多 10 个 Service
    services.loadbalancers: "2"         # 最多 2 个 LoadBalancer 类型的 Service

LimitRange 配置

创建 spark-limit-range.yaml

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
  namespace: spark-cluster
spec:
  limits:
  - default:          # 默认限制值(Pod 中容器的 limit)
      memory: 50Gi
      cpu: 5
    defaultRequest:   # 默认请求值(Pod 中容器的 request)
      memory: 1Gi
      cpu: 1
    type: Container

应用所有配置:

kubectl apply -f spark-object-counts.yaml
kubectl apply -f spark-limit-range.yaml

验证配置效果

查看 namespace 的资源配额使用情况:

# 查看所有资源配额
kubectl -n spark-cluster get resourcequota

# 查看 LimitRange
kubectl -n spark-cluster get limitrange

# 详细信息
kubectl -n spark-cluster describe namespace spark-cluster

最佳实践

  1. 合理规划资源配额:根据团队实际需求和集群总容量合理分配
  2. 设置合适的默认值:通过 LimitRange 为容器设置合理的默认 request 和 limit
  3. 监控资源使用:定期检查资源配额使用情况,及时调整
  4. 逐步实施:在生产环境中逐步引入资源限制,避免影响现有工作负载

参考资料

文章导航

章节完成

恭喜完成本章节!下一章节即将开始。下一章节:命令使用

章节概览

评论区