为命名空间配置CPU最小和最大限制

    你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 如果你还没有集群,你可以通过 Minikube 构建一 个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:

    要获知版本信息,请输入 .

    你的集群中每个节点至少要有1个CPU。

    创建命名空间

    创建一个命名空间,以便本练习中创建的资源和集群的其余资源相隔离。

    创建 LimitRange 和 Pod

    这里给出了 LimitRange 的配置文件:

    创建 LimitRange:

    1. kubectl create -f https://k8s.io/examples/admin/resource/cpu-constraints.yaml --namespace=constraints-cpu-example

    查看 LimitRange 详情:

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

    输出结果显示 CPU 的最小和最大限制符合预期。但需要注意的是,尽管你在 LimitRange 的配置文件中你没有声明默认值,默认值也会被自动创建。

    1. limits:
    2. - default:
    3. cpu: 800m
    4. defaultRequest:
    5. cpu: 800m
    6. max:
    7. cpu: 800m
    8. cpu: 200m
    9. type: Container

    现在不管什么时候在 constraints-cpu-example 命名空间中创建容器,Kubernetes 都会执行下面这些步骤:

    • 如果容器没有声明自己的 CPU 请求和限制,将为容器指定默认 CPU 请求和限制。

    • 核查容器声明的 CPU 请求确保其大于或者等于200 millicpu。

    • 核查容器声明的 CPU 限制确保其小于或者等于800 millicpu。

    这里给出了包含一个容器的 Pod 的配置文件。该容器声明了500 millicpu的 CPU 请求和800 millicpu的 CPU 限制。这些参数满足了 LimitRange 对象规定的 CPU 最小和最大限制。

    1. kubectl create -f https://k8s.io/examples/admin/resource/cpu-constraints-pod.yaml --namespace=constraints-cpu-example

    确认一下 Pod 中的容器在运行:

    查看 Pod 的详情:

    1. kubectl get pod constraints-cpu-demo --output=yaml --namespace=constraints-cpu-example

    输出结果表明容器的 CPU 请求为500 millicpu,CPU限制为800 millicpu。这些参数满足 LimitRange 规定的限制范围。

    1. resources:
    2. limits:
    3. cpu: 800m
    4. requests:
    5. cpu: 500m
    1. kubectl delete pod constraints-cpu-demo --namespace=constraints-cpu-example

    尝试创建一个超过最大 CPU 限制的 Pod

    这里给出了包含一个容器的 Pod 的配置文件。容器声明了500 millicpu的CPU请求和1.5 cpu的 CPU 限制。

    尝试创建 Pod:

    1. kubectl create -f https://k8s.io/examples/admin/resource/cpu-constraints-pod-2.yaml --namespace=constraints-cpu-example

    输出结果表明 Pod 没有创建成功,因为容器声明的 CPU 限制太大了:

    1. Error from server (Forbidden): error when creating "examples/admin/resource/cpu-constraints-pod-2.yaml":
    2. pods "constraints-cpu-demo-2" is forbidden: maximum cpu usage per Container is 800m, but limit is 1500m.

    尝试创建一个不满足最小 CPU 请求的 Pod

    这里给出了包含一个容器的 Pod 的配置文件。该容器声明了100 millicpu的 CPU 请求和800 millicpu的 CPU 限制。

    尝试创建 Pod:

    1. kubectl create -f https://k8s.io/examples/admin/resource/cpu-constraints-pod-3.yaml --namespace=constraints-cpu-example

    输出结果显示 Pod 没有创建成功,因为容器声明的 CPU 请求太小了:

    1. Error from server (Forbidden): error when creating "examples/admin/resource/cpu-constraints-pod-3.yaml":
    2. pods "constraints-cpu-demo-4" is forbidden: minimum cpu usage per Container is 200m, but request is 100m.

    这里给出了包含一个容器的Pod的配置文件。该容器没有声明CPU请求和CPU限制。

    创建 Pod:

    1. kubectl create -f https://k8s.io/examples/admin/resource/cpu-constraints-pod-4.yaml --namespace=constraints-cpu-example

    查看 Pod 的详情:

    1. kubectl get pod constraints-cpu-demo-4 --namespace=constraints-cpu-example --output=yaml

    输出结果显示 Pod 的容器有个800 millicpu的 CPU 请求和800 millicpu的 CPU 限制。容器时怎样得到那些值的呢?

    1. resources:
    2. limits:
    3. cpu: 800m
    4. requests:
    5. cpu: 800m

    因为你的容器没有声明自己的 CPU 请求和限制,LimitRange 给它指定了

    CPU 最小和最大限制的强制执行

    只有当Pod创建或者更新时,LimitRange为命名空间规定的CPU最小和最大限制才会被强制执行。如果你对LimitRange进行修改,那不会影响此前创建的Pod。

    最小和最大 CPU 限制范围的动机

    作为集群管理员,你可能想设定 Pod 可以使用的 CPU 资源限制。例如:

    • 集群中的每个节点有两个 CPU。你不想接受任何请求超过2个 CPU 的 Pod,因为集群中没有节点可以支持这种请求。

    • 你的生产和开发部门共享一个集群。你想允许生产工作负载消耗3个 CPU,而开发工作负载的消耗限制为1个 CPU。你为生产和开发创建不同的命名空间,并且你为每个命名空间都应用了 CPU 限制。

    删除你的命名空间:

    接下来

    应用开发者参考: