Kubernetes 命名空间 CPU 资源约束配置指南

Kubernetes 命名空间 CPU 资源约束配置指南

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

概述

在 Kubernetes 集群管理中,合理分配和限制资源使用是保证集群稳定性的关键。本文将详细介绍如何为 Kubernetes 命名空间配置 CPU 资源的最小和最大约束,确保该命名空间中的所有 Pod 都遵循这些资源限制规则。

核心概念

LimitRange 对象

LimitRange 是 Kubernetes 中用于限制命名空间内资源分配的策略对象。通过定义 LimitRange,管理员可以:

  1. 为容器和 Pod 设置 CPU 和内存资源的最小和最大值
  2. 为没有显式指定资源请求的容器设置默认值
  3. 确保命名空间内的资源使用符合预期

CPU 资源单位

Kubernetes 中 CPU 资源的计量单位:

  • 1 CPU 相当于 1 个虚拟 CPU 核心(vCPU)
  • 也可以使用毫核(millicpu)表示,如 500m 表示 0.5 个 CPU

配置步骤

1. 准备工作

确保你的 Kubernetes 集群满足以下条件:

  • 拥有创建命名空间的权限
  • 每个节点至少有 1.0 CPU 可供 Pod 使用

2. 创建测试命名空间

kubectl create namespace constraints-cpu-example

3. 创建 LimitRange 对象

以下是一个 LimitRange 的示例配置:

apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-min-max-demo-lr
spec:
  limits:
  - max:
      cpu: "800m"
    min:
      cpu: "200m"
    type: Container

这个配置定义了:

  • 每个容器的 CPU 请求最小值:200m (0.2 CPU)
  • 每个容器的 CPU 限制最大值:800m (0.8 CPU)

应用该配置:

kubectl apply -f cpu-constraints.yaml --namespace=constraints-cpu-example

4. 验证 LimitRange

查看 LimitRange 的详细信息:

kubectl get limitrange cpu-min-max-demo-lr --output=yaml --namespace=constraints-cpu-example

输出将显示自动生成的默认值(即使我们没有在配置中指定):

limits:
- default:
    cpu: 800m
  defaultRequest:
    cpu: 800m
  max:
    cpu: 800m
  min:
    cpu: 200m
  type: Container

5. 创建合规的 Pod

创建一个符合约束条件的 Pod:

apiVersion: v1
kind: Pod
metadata:
  name: constraints-cpu-demo
spec:
  containers:
  - name: constraints-cpu-demo-ctr
    image: nginx
    resources:
      limits:
        cpu: "800m"
      requests:
        cpu: "500m"

这个 Pod 满足:

  • CPU 请求(500m) ≥ 最小值(200m)
  • CPU 限制(800m) ≤ 最大值(800m)

6. 测试约束效果

尝试创建超出最大限制的 Pod
apiVersion: v1
kind: Pod
metadata:
  name: constraints-cpu-demo-2
spec:
  containers:
  - name: constraints-cpu-demo-2-ctr
    image: nginx
    resources:
      limits:
        cpu: "1.5"
      requests:
        cpu: "500m"

创建时会收到错误,因为 1.5 CPU 超过了 800m 的限制。

尝试创建低于最小请求的 Pod
apiVersion: v1
kind: Pod
metadata:
  name: constraints-cpu-demo-3
spec:
  containers:
  - name: constraints-cpu-demo-3-ctr
    image: nginx
    resources:
      limits:
        cpu: "800m"
      requests:
        cpu: "100m"

创建时会收到错误,因为 100m CPU 请求低于 200m 的最小值。

7. 默认值应用测试

创建一个不指定任何 CPU 请求和限制的 Pod:

apiVersion: v1
kind: Pod
metadata:
  name: constraints-cpu-demo-4
spec:
  containers:
  - name: constraints-cpu-demo-4-ctr
    image: nginx

Kubernetes 会自动应用 LimitRange 中定义的默认值(800m)。

最佳实践

  1. 生产环境隔离:为不同部门或环境(如生产、开发)创建单独的命名空间,并设置不同的资源约束

  2. 合理设置限制:根据节点实际资源情况设置约束,避免设置过高导致资源碎片化

  3. 监控和调整:定期监控资源使用情况,根据实际需求调整约束值

  4. 与 ResourceQuota 配合使用:LimitRange 控制单个容器的资源使用,ResourceQuota 控制整个命名空间的资源总量

注意事项

  1. LimitRange 约束仅在 Pod 创建或更新时生效,不会影响已存在的 Pod

  2. 默认值设置时,default 和 defaultRequest 应该相同,特别是对于不可压缩资源(如内存)

  3. 确保节点有足够资源满足约束条件,否则 Pod 可能无法调度

清理资源

完成测试后,删除命名空间:

kubectl delete namespace constraints-cpu-example

通过合理配置 CPU 资源约束,可以有效防止资源滥用,确保 Kubernetes 集群的稳定运行。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

柏珂卿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值