Kubernetes 实操:创建 CPU 约束的 LimitRange 与 Pod

Kubernetes 实操:创建 CPU 约束的 LimitRange 与 Pod

一、核心目标

在独立命名空间 constraints-cpu-example 中创建 LimitRange,为容器设置 CPU 资源的最小限制 (200m)和最大限制(800m),确保容器 CPU 使用在合理范围,避免单个容器过度占用 CPU 资源或请求过小导致资源碎片化。

二、前提条件

  1. 已安装并配置 kubectl 命令行工具,能连接到 Kubernetes 集群。

  2. 集群节点需满足:至少有一个节点的可用 CPU ≥ 200m(用于运行符合约束的 Pod)。

  3. 已创建命名空间 constraints-cpu-example(若未创建,执行 kubectl create namespace constraints-cpu-example)。

三、步骤 1:创建 CPU 约束的 LimitRange

1. LimitRange 配置文件(cpu-constraints.yaml)

该配置指定容器 CPU 的最小、最大值,K8s 会自动生成默认请求 / 限额(与最大值一致):

复制代码
apiVersion: v1

kind: LimitRange

metadata:

name: cpu-min-max-demo-lr  # LimitRange 名称

spec:

limits:

- max:

    cpu: "800m"  # 容器 CPU 最大限制(不可超,1CPU=1000m)

  min:

    cpu: "200m"  # 容器 CPU 最小限制(不可低)

  type: Container  # 规则作用对象:容器
2. 执行创建命令
复制代码
kubectl create -f https://k8s.io/docs/tasks/administer-cluster/cpu-constraints.yaml --namespace=constraints-cpu-example
3. 验证 LimitRange 配置
复制代码
kubectl get limitrange cpu-min-max-demo-lr --namespace=constraints-cpu-example --output=yaml
4. 预期输出(关键部分)

K8s 自动补充默认 CPU 请求 / 限额(默认值 = 最大值 800m):

复制代码
limits:

\- default:

  cpu: 800m  # 自动生成的默认 CPU 限额

defaultRequest:

  cpu: 800m  # 自动生成的默认 CPU 请求

max:

  cpu: 800m  # 手动配置的最大 CPU 限制

min:

  cpu: 200m  # 手动配置的最小 CPU 限制

type: Container

四、场景 1:创建符合 CPU 约束的 Pod

1. Pod 配置文件(cpu-constraints-pod.yaml)

容器 CPU 请求 500m、限额 800m(均在 200m~800m 范围内):

复制代码
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"  # 大于最小限制
2. 执行创建命令
复制代码
kubectl create -f https://k8s.io/docs/tasks/administer-cluster/cpu-constraints-pod.yaml --namespace=constraints-cpu-example
3. 验证 Pod 状态
复制代码
kubectl get pod constraints-cpu-demo --namespace=constraints-cpu-example
  • 预期状态:Running(符合 CPU 约束,创建成功)。
4. 查看详细配置
复制代码
kubectl get pod constraints-cpu-demo --output=yaml --namespace=constraints-cpu-example
  • 关键输出(资源配置符合预期):

    resources:

    limits:

    复制代码
    cpu: 800m

    requests:

    复制代码
    cpu: 500m
5. 清理资源
复制代码
kubectl delete pod constraints-cpu-demo --namespace=constraints-cpu-example

五、场景 2:创建超出最大 CPU 限制的 Pod(验证失败)

1. Pod 配置文件(cpu-constraints-pod-2.yaml)

容器 CPU 限额 1.5 核(1500m),超出 LimitRange 最大值 800m:

复制代码
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"  # 超出最大限制 800m

    requests:

      cpu: "500m"
2. 执行创建命令
复制代码
kubectl create -f https://k8s.io/docs/tasks/administer-cluster/cpu-constraints-pod-2.yaml --namespace=constraints-cpu-example
3. 预期结果(创建失败)
复制代码
Error from server (Forbidden): error when creating "xxx/cpu-constraints-pod-2.yaml":

pods "constraints-cpu-demo-2" is forbidden: maximum cpu usage per Container is 800m, but limit is 1500m.
  • 原因:容器 CPU 限额超出 LimitRange 定义的最大值,K8s 拒绝创建。

六、场景 3:创建低于最小 CPU 限制的 Pod(验证失败)

1. Pod 配置文件(cpu-constraints-pod-3.yaml)

容器 CPU 请求 100m,低于 LimitRange 最小值 200m:

复制代码
apiVersion: v1

kind: Pod

metadata:

name: constraints-cpu-demo-3

spec:

containers:

- name: constraints-cpu-demo-4-ctr

  image: nginx

  resources:

    limits:

      cpu: "800m"

    requests:

      cpu: "100m"  # 低于最小限制 200m
2. 执行创建命令
复制代码
kubectl create -f https://k8s.io/docs/tasks/administer-cluster/cpu-constraints-pod-3.yaml --namespace=constraints-cpu-example
3. 预期结果(创建失败)
复制代码
Error from server (Forbidden): error when creating "xxx/cpu-constraints-pod-3.yaml":

pods "constraints-cpu-demo-3" is forbidden: minimum cpu usage per Container is 200m, but request is 100m.
  • 原因:容器 CPU 请求低于 LimitRange 定义的最小值,K8s 拒绝创建。

七、场景 4:创建无 CPU 配置的 Pod(继承默认值)

1. Pod 配置文件(cpu-constraints-pod-4.yaml)

容器未指定任何 CPU 请求 / 限额:

复制代码
apiVersion: v1

kind: Pod

metadata:

name: constraints-cpu-demo-4

spec:

containers:

- name: constraints-cpu-demo-4-ctr

  image: vish/stress  # 压力测试镜像,用于验证 CPU 限制
2. 执行创建命令
复制代码
kubectl create -f https://k8s.io/docs/tasks/administer-cluster/cpu-constraints-pod-4.yaml --namespace=constraints-cpu-example
3. 验证默认值生效
复制代码
kubectl get pod constraints-cpu-demo-4 --output=yaml --namespace=constraints-cpu-example
  • 关键输出(继承 LimitRange 自动生成的默认值):

    resources:

    limits:

    复制代码
    cpu: 800m

    requests:

    复制代码
    cpu: 800m
4. 注意事项
  • 若节点可用 CPU ,Pod 状态会变为 Pending(资源不足),需更换 CPU 配置更高的节点。

  • 镜像 vish/stress 会自动消耗 CPU 资源,可通过 kubectl top pod constraints-cpu-demo-4 --namespace=constraints-cpu-example 查看 CPU 使用率(不会超过 800m)。

5. 清理资源
复制代码
kubectl delete pod constraints-cpu-demo-4 --namespace=constraints-cpu-example

八、核心规则与注意事项

1. 约束生效时机
  • LimitRange 的 CPU 最小 / 最大限制仅在 Pod 创建或更新时 校验,修改 LimitRange 不会影响已创建的 Pod。
2. CPU 单位说明
  • Kubernetes 中 CPU 支持毫核(m)和核(CPU)两种单位,1CPU = 1000m(如 800m = 0.8 核)。

  • 最小 CPU 限制 200m 表示容器至少需要 0.2 核 CPU 才能运行,避免资源分配不足导致服务异常。

3. 适用场景
  • 多服务共享节点:限制单个容器的 CPU 最大使用量,避免某服务占用过多 CPU 导致其他服务卡顿;

  • 资源规划:通过最小 CPU 限制确保容器获得足够资源运行,避免因请求过小被调度到资源不足的节点。

九、清理命名空间(可选)

若无需保留练习资源,可删除整个命名空间(会删除该空间下所有资源):

复制代码
kubectl delete namespace constraints-cpu-example
相关推荐
草木红2 小时前
Docker常用命令
运维·docker·容器
姜太小白2 小时前
【Ollama】Docker部署Ollama完整指南
运维·docker·容器
IT从业者张某某2 小时前
Docker部署伪分布Hadoop
hadoop·docker·容器
一叶飘零_sweeeet2 小时前
Spring Boot 4.0:云原生 Java 开发的范式革命
java·spring boot·云原生
笨手笨脚の2 小时前
云原生部署常见服务
redis·docker·云原生·kubernetes·redis-cluster
youyudehexie2 小时前
云原生与边缘计算融合驱动下一代互联网架构创新探索实践
云原生·架构·边缘计算
上海云盾第一敬业销售2 小时前
云原生时代的安全困境:容器化应用如何正确部署WAF防护?
安全·云原生
zhoupenghui1682 小时前
搭建VictoriaLogs集中式日志管理系统来解决 微服务 “请求跨越多个服务”时报错的全链路追踪与快速排查 问题
微服务·云原生·架构·链路追踪·victorialogs·logs explorer
晨旭缘2 小时前
kubectl、kubelet、kubeadm命令详解
docker·kubernetes·kubelet