Kubernetes 命名空间内存与 CPU 配额管理实战指南

Kubernetes 命名空间内存与 CPU 配额管理实战指南

website Kubernetes website and documentation repo: website 项目地址: https://gitcode.com/gh_mirrors/webs/website

前言

在 Kubernetes 集群管理中,资源配额(Resource Quota)是确保多租户环境下资源公平分配的关键机制。本文将深入讲解如何为命名空间配置内存和 CPU 配额,帮助管理员有效控制集群资源使用。

核心概念解析

什么是资源配额?

资源配额是 Kubernetes 提供的一种机制,用于限制命名空间可以使用的计算资源总量。通过 ResourceQuota 对象,管理员可以设置:

  • 内存请求(requests.memory)和限制(limits.memory)
  • CPU 请求(requests.cpu)和限制(limits.cpu)
  • 其他资源类型的配额

为什么需要资源配额?

  1. 防止资源饥饿:避免单个命名空间占用过多资源
  2. 成本控制:在云环境中控制资源使用成本
  3. 多租户隔离:确保不同团队/项目间的资源公平使用
  4. 容量规划:帮助预测集群扩容需求

实战操作指南

环境准备

  1. 确保拥有创建命名空间的权限
  2. 集群节点至少需要 1GiB 内存
  3. 安装并配置好 kubectl 工具

步骤一:创建隔离命名空间

kubectl create namespace quota-mem-cpu-example

这个命名空间将作为我们的实验环境,与集群其他部分隔离。

步骤二:定义资源配额

创建 ResourceQuota 对象配置文件 quota-mem-cpu.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-demo
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi

应用配额配置:

kubectl apply -f quota-mem-cpu.yaml --namespace=quota-mem-cpu-example

配额参数详解

  • requests.cpu: "1":命名空间内所有 Pod 的 CPU 请求总和不超过 1 核
  • requests.memory: 1Gi:内存请求总和不超过 1GiB
  • limits.cpu: "2":CPU 限制总和不超过 2 核
  • limits.memory: 2Gi:内存限制总和不超过 2GiB

注意:Kubernetes 中 1 CPU 通常等于 1 个虚拟核(vCPU)或 1 个超线程

步骤三:创建第一个 Pod

创建示例 Pod 配置文件 quota-mem-cpu-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: quota-mem-cpu-demo
spec:
  containers:
  - name: quota-mem-cpu-demo-ctr
    image: nginx
    resources:
      limits:
        memory: "800Mi"
        cpu: "800m"
      requests:
        memory: "600Mi"
        cpu: "400m"

应用 Pod 配置:

kubectl apply -f quota-mem-cpu-pod.yaml --namespace=quota-mem-cpu-example

步骤四:验证配额使用情况

查看配额详情:

kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml

输出示例:

status:
  hard:
    limits.cpu: "2"
    limits.memory: 2Gi
    requests.cpu: "1"
    requests.memory: 1Gi
  used:
    limits.cpu: 800m
    limits.memory: 800Mi
    requests.cpu: 400m
    requests.memory: 600Mi

步骤五:尝试突破配额限制

创建第二个 Pod 配置文件 quota-mem-cpu-pod-2.yaml

apiVersion: v1
kind: Pod
metadata:
  name: quota-mem-cpu-demo-2
spec:
  containers:
  - name: quota-mem-cpu-demo-2-ctr
    image: redis
    resources:
      limits:
        memory: "1Gi"
        cpu: "800m"
      requests:
        memory: "700Mi"
        cpu: "400m"

尝试创建时会收到错误,因为内存请求总和(600Mi + 700Mi)超过了 1GiB 的配额限制。

高级配置技巧

配额类型扩展

除了内存和 CPU,ResourceQuota 还支持限制:

  • 存储资源(PersistentVolumeClaims)
  • 对象数量(Pods、Services 等)
  • 扩展资源(如 GPU)

配额作用域

可以为配额设置作用域,例如:

  • Terminating:只应用于设置了 activeDeadlineSeconds 的 Pod
  • NotTerminating:只应用于没有设置 activeDeadlineSeconds 的 Pod
  • BestEffort:限制 BestEffort 服务质量级别的 Pod
  • NotBestEffort:限制非 BestEffort 服务质量的 Pod

常见问题解答

Q:如何计算 CPU 的毫核(millicores)?

A:1 CPU = 1000m,因此 500m 表示 0.5 个 CPU 核心。

Q:为什么我的 Pod 创建失败但没有明显的配额错误?

A:可能是因为命名空间达到了其他类型的配额限制,如 Pod 数量限制。检查完整的配额详情。

Q:如何查看集群中所有命名空间的配额情况?

A:使用命令 kubectl get resourcequotas --all-namespaces

最佳实践建议

  1. 渐进式配额设置:初始设置较宽松的配额,根据实际使用情况逐步收紧
  2. 监控与调整:定期检查配额使用情况,及时调整
  3. 结合 LimitRange 使用:为单个容器设置默认值和限制范围
  4. 文档记录:记录各命名空间的配额设置及其业务依据
  5. 预留缓冲空间:不要将配额设置为集群总容量,保留一定缓冲

清理资源

完成实验后,删除命名空间以释放资源:

kubectl delete namespace quota-mem-cpu-example

总结

通过本文的实践,我们学习了如何在 Kubernetes 中为命名空间配置内存和 CPU 配额。资源配额是多租户集群管理的重要工具,合理使用可以确保集群资源的高效利用和公平分配。建议管理员结合业务需求,设计合理的配额策略,并持续监控优化。

website Kubernetes website and documentation repo: website 项目地址: https://gitcode.com/gh_mirrors/webs/website

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

章迅筝Diane

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值