# 限定Pod的计算资源

参考文档:Limit Ranges (opens new window)

本文讨论了如何使用 LimitRange 在 Pod 级别限定资源的使用。下面是一个用于限定 Pod 资源使用的 LimitRange 对象。

apiVersion: v1
kind: LimitRange
metadata:
  name: limit-mem-cpu-per-pod
spec:
  limits:
  - max:
      cpu: "2"
      memory: "2Gi"
    type: Pod
1
2
3
4
5
6
7
8
9
10

TIP

在您开始本教程之前,请您先完成 限定容器的计算资源,并确保该教程中的 LimitRange limit-mem-cpu-per-container 和 Pod busybox1 都已经创建。

  • 执行如下命令,创建 limit-mem-cpu-pod 上面 yaml 中的 LimitRange,该 LimitRange 限定了每一个 Pod 的CPU使用不超过 2 核,内存不超过 2Gi。

    kubectl apply -f https://kuboard.cn/statics/learning/policy/lr-pod-limit-range.yaml -n limitrange-demo
    
    1

    执行命令查看 limit-mem-cpu-per-pod 的创建结果:

    kubectl describe limitrange/limit-mem-cpu-per-pod -n limitrange-demo
    
    1

    输出结果如下所示

    Name:       limit-mem-cpu-per-pod
    Namespace:  limitrange-demo
    Type        Resource  Min  Max  Default Request  Default Limit  Max Limit/Request Ratio
    ----        --------  ---  ---  ---------------  -------------  -----------------------
    Pod         cpu       -    2    -                -              -
    Pod         memory    -    2Gi  -                -              -
    
    1
    2
    3
    4
    5
    6
  • 创建第二个 Pod,yaml 文件如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: busybox2
    spec:
      containers:
      - name: busybox-cnt01
        image: busybox
        command: ["/bin/sh"]
        args: ["-c", "while true; do echo hello from cnt01; sleep 10;done"]
        resources:
          requests:
            memory: "100Mi"
            cpu: "100m"
          limits:
            memory: "200Mi"
            cpu: "500m"
      - name: busybox-cnt02
        image: busybox
        command: ["/bin/sh"]
        args: ["-c", "while true; do echo hello from cnt02; sleep 10;done"]
        resources:
          requests:
            memory: "100Mi"
            cpu: "100m"
      - name: busybox-cnt03
        image: busybox
        command: ["/bin/sh"]
        args: ["-c", "while true; do echo hello from cnt03; sleep 10;done"]
        resources:
          limits:
            memory: "200Mi"
            cpu: "500m"
      - name: busybox-cnt04
        image: busybox
        command: ["/bin/sh"]
        args: ["-c", "while true; do echo hello from cnt04; sleep 10;done"]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37

    执行如下命令可创建该 Pod

    kubectl apply -f https://kuboard.cn/statics/learning/policy/lr-pod-pod.yaml -n limitrange-demo
    
    1

    Pod busybox2 的定义与 busybox1 的定义玩去哪相同,但是执行该创建命令时将碰到如下错误,因为Pod可使用的资源现在受到了限制:

    Error from server (Forbidden): error when creating "limit-range-pod-2.yaml": pods "busybox2" is forbidden: [maximum cpu usage per Pod is 2, but limit is 2400m., maximum memory usage per Pod is 2Gi, but limit is 2306867200.]
    
    1

    执行命令查看 busybox1 的资源使用

    kubectl get  po/busybox1  -n limitrange-demo -o json | jq ".spec.containers[].resources.limits.memory" 
    
    1

    输出结果如下所示:

    "200Mi"
    "900Mi"
    "200Mi"
    "900Mi"
    
    1
    2
    3
    4

    Pod busybox2 将不能在集群中创建,因为其中所有容器的内存限制的总和超过了 LimitRange limit-mem-cpu-per-pod 中的限定。 busybox1 将不会被驱逐,因为该 Pod 在创建 LimitRange limit-mem-cpu-per-pod 就已经创建好了。

🎉 🎉 🎉

更新时间: 2019-10-20 23:33:25