From 27ce5a8c8f605e7ef734f3f0501d13591adbf580 Mon Sep 17 00:00:00 2001 From: AdamDang Date: Tue, 20 Nov 2018 11:32:49 +0800 Subject: [PATCH] zh-trans: Add manage-resources/cpu-constraint-namespace.md (#11042) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * zh-trans: Add zh/docs/tasks/administer-cluster/manage-resources/cpu-constraint-namespace.md zh-trans: Add zh/docs/tasks/administer-cluster/manage-resources/cpu-constraint-namespace.md * Fixes due to review. Fixes due to review. * fix due to review 最为-》做为 * Update cpu-constraint-namespace.md * Create cpu-constraints.yaml * Create cpu-constraints-pod.yaml * Create cpu-constraints-pod-2.yaml * Create cpu-constraints-pod-3.yaml * Create cpu-constraints-pod-4.yaml * Update cpu-constraint-namespace.md --- .../cpu-constraint-namespace.md | 462 ++++++++++++++++++ .../admin/resource/cpu-constraints-pod-2.yaml | 13 + .../admin/resource/cpu-constraints-pod-3.yaml | 13 + .../admin/resource/cpu-constraints-pod-4.yaml | 8 + .../admin/resource/cpu-constraints-pod.yaml | 13 + .../admin/resource/cpu-constraints.yaml | 11 + 6 files changed, 520 insertions(+) create mode 100644 content/zh/docs/tasks/administer-cluster/manage-resources/cpu-constraint-namespace.md create mode 100644 content/zh/examples/admin/resource/cpu-constraints-pod-2.yaml create mode 100644 content/zh/examples/admin/resource/cpu-constraints-pod-3.yaml create mode 100644 content/zh/examples/admin/resource/cpu-constraints-pod-4.yaml create mode 100644 content/zh/examples/admin/resource/cpu-constraints-pod.yaml create mode 100644 content/zh/examples/admin/resource/cpu-constraints.yaml diff --git a/content/zh/docs/tasks/administer-cluster/manage-resources/cpu-constraint-namespace.md b/content/zh/docs/tasks/administer-cluster/manage-resources/cpu-constraint-namespace.md new file mode 100644 index 0000000000..41f6af4b29 --- /dev/null +++ b/content/zh/docs/tasks/administer-cluster/manage-resources/cpu-constraint-namespace.md @@ -0,0 +1,462 @@ + + +--- +title: 为命名空间配置CPU最小和最大限制 +content_template: templates/task +weight: 40 +--- + + +{{% capture overview %}} + + + +本章介绍命名空间中可以被容器和Pod使用的CPU资源的最小和最大值。你可以通过 [LimitRange](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#limitrange-v1-core) 对象声明 CPU 的最小和最大值. 如果 Pod 不能满足 LimitRange 的限制,它就不能在命名空间中创建。 + +{{% /capture %}} + + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + + + +你的集群中每个节点至少要有1个CPU。 + +{{% /capture %}} + + +{{% capture steps %}} + + + +## 创建命名空间 + +创建一个命名空间,以便本练习中创建的资源和集群的其余资源相隔离。 + +```shell +kubectl create namespace constraints-cpu-example +``` + + + +## 创建 LimitRange 和 Pod + +这里给出了 LimitRange 的配置文件: + +{{< codenew file="admin/resource/cpu-constraints.yaml" >}} + + + +创建 LimitRange: + +```shell +kubectl create -f https://k8s.io/examples/admin/resource/cpu-constraints.yaml --namespace=constraints-cpu-example +``` + + + +查看 LimitRange 详情: + +```shell +kubectl get limitrange cpu-min-max-demo-lr --output=yaml --namespace=constraints-cpu-example +``` + + + +输出结果显示 CPU 的最小和最大限制符合预期。但需要注意的是,尽管你在 LimitRange 的配置文件中你没有声明默认值,默认值也会被自动创建。 + +```yaml +limits: +- default: + cpu: 800m + defaultRequest: + cpu: 800m + max: + cpu: 800m + min: + cpu: 200m + type: Container +``` + + + +现在不管什么时候在 constraints-cpu-example 命名空间中创建容器,Kubernetes 都会执行下面这些步骤: + +* 如果容器没有声明自己的 CPU 请求和限制,将为容器指定默认 CPU 请求和限制。 + +* 核查容器声明的 CPU 请求确保其大于或者等于200 millicpu。 + +* 核查容器声明的 CPU 限制确保其小于或者等于800 millicpu。 + + +{{< note >}} 当创建 LimitRange 对象时,你也可以声明 huge-page 和 GPU 的限制。当这些资源同时声明了 'default' 和 ‘defaultRequest’ 参数时,两个参数值必须相同。 {{< /note >}} + + + + + + + +这里给出了包含一个容器的 Pod 的配置文件。该容器声明了500 millicpu的 CPU 请求和800 millicpu的 CPU 限制。这些参数满足了 LimitRange 对象规定的 CPU 最小和最大限制。 + +{{< codenew file="admin/resource/cpu-constraints-pod.yaml" >}} + + + +创建Pod: + +```shell +kubectl create -f https://k8s.io/examples/admin/resource/cpu-constraints-pod.yaml --namespace=constraints-cpu-example +``` + + + +确认一下 Pod 中的容器在运行: + +```shell +kubectl get pod constraints-cpu-demo --namespace=constraints-cpu-example +``` + + + +查看 Pod 的详情: + +```shell +kubectl get pod constraints-cpu-demo --output=yaml --namespace=constraints-cpu-example +``` + + + +输出结果表明容器的 CPU 请求为500 millicpu,CPU限制为800 millicpu。这些参数满足 LimitRange 规定的限制范围。 + +```yaml +resources: + limits: + cpu: 800m + requests: + cpu: 500m +``` + + + +## 删除 Pod + +```shell +kubectl delete pod constraints-cpu-demo --namespace=constraints-cpu-example +``` + + + +## 尝试创建一个超过最大 CPU 限制的 Pod + +这里给出了包含一个容器的 Pod 的配置文件。容器声明了500 millicpu的CPU请求和1.5 cpu的 CPU 限制。 + +{{< codenew file="admin/resource/cpu-constraints-pod-2.yaml" >}} + + + +尝试创建 Pod: + +```shell +kubectl create -f https://k8s.io/examples/admin/resource/cpu-constraints-pod-2.yaml --namespace=constraints-cpu-example +``` + + + +输出结果表明 Pod 没有创建成功,因为容器声明的 CPU 限制太大了: + +``` +Error from server (Forbidden): error when creating "examples/admin/resource/cpu-constraints-pod-2.yaml": +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 限制。 + +{{< codenew file="admin/resource/cpu-constraints-pod-3.yaml" >}} + + + +尝试创建 Pod: + +```shell +kubectl create -f https://k8s.io/examples/admin/resource/cpu-constraints-pod-3.yaml --namespace=constraints-cpu-example +``` + + + +输出结果显示 Pod 没有创建成功,因为容器声明的 CPU 请求太小了: + +``` +Error from server (Forbidden): error when creating "examples/admin/resource/cpu-constraints-pod-3.yaml": +pods "constraints-cpu-demo-4" is forbidden: minimum cpu usage per Container is 200m, but request is 100m. +``` + + + +## 创建一个没有声明CPU请求和CPU限制的Pod + +这里给出了包含一个容器的Pod的配置文件。该容器没有声明CPU请求和CPU限制。 + +{{< codenew file="admin/resource/cpu-constraints-pod-4.yaml" >}} + + + +创建 Pod: + +```shell +kubectl create -f https://k8s.io/examples/admin/resource/cpu-constraints-pod-4.yaml --namespace=constraints-cpu-example +``` + + + +查看 Pod 的详情: + +``` +kubectl get pod constraints-cpu-demo-4 --namespace=constraints-cpu-example --output=yaml +``` + + + +输出结果显示 Pod 的容器有个800 millicpu的 CPU 请求和800 millicpu的 CPU 限制。容器时怎样得到那些值的呢? + +```yaml +resources: + limits: + cpu: 800m + requests: + cpu: 800m +``` + + + +因为你的容器没有声明自己的 CPU 请求和限制,LimitRange 给它指定了[默认的CPU请求和限制](/docs/tasks/administer-cluster/cpu-default-namespace/) + + + +此时,你的容器可能运行也可能没有运行。回想一下,本任务的先决条件是你的节点要有1 个 CPU。如果你的每个节点仅有1个 CPU,那么可能没有任何一个节点可以满足800 millicpu的 CPU 请求。如果你在用的节点恰好有两个 CPU,那么你才可能有足够的 CPU来满足800 millicpu的请求。 + +``` +kubectl delete pod constraints-cpu-demo-4 --namespace=constraints-cpu-example +``` + + + +## CPU 最小和最大限制的强制执行 + +只有当Pod创建或者更新时,LimitRange为命名空间规定的CPU最小和最大限制才会被强制执行。如果你对LimitRange进行修改,那不会影响此前创建的Pod。 + + + +## 最小和最大 CPU 限制范围的动机 + + + +作为集群管理员,你可能想设定 Pod 可以使用的 CPU 资源限制。例如: + + + +* 集群中的每个节点有两个 CPU。你不想接受任何请求超过2个 CPU 的 Pod,因为集群中没有节点可以支持这种请求。 + +* 你的生产和开发部门共享一个集群。你想允许生产工作负载消耗3个 CPU,而开发工作负载的消耗限制为1个 CPU。你为生产和开发创建不同的命名空间,并且你为每个命名空间都应用了 CPU 限制。 + + + +## 环境清理 + +删除你的命名空间: + +```shell +kubectl delete namespace constraints-cpu-example +``` + +{{% /capture %}} + +{{% capture whatsnext %}} + + + +### 集群管理员参考: + +* [为命名空间配置默认内存请求和限制](/docs/tasks/administer-cluster/memory-default-namespace/) + +* [为命名空间配置内存限制的最小值和最大值](/docs/tasks/administer-cluster/memory-constraint-namespace/) + +* [为命名空间配置CPU限制的最小值和最大值](/docs/tasks/administer-cluster/cpu-constraint-namespace/) + +* [为命名空间配置内存和CPU配额](/docs/tasks/administer-cluster/quota-memory-cpu-namespace/) + +* [为命名空间配置Pod配额](/docs/tasks/administer-cluster/quota-pod-namespace/) + +* [为API对象配置配额](/docs/tasks/administer-cluster/quota-api-object/) + + + +### 应用开发者参考: + +* [为容器和Pod分配内存资源](/docs/tasks/configure-pod-container/assign-memory-resource/) + +* [为容器和Pod分配CPU资源](/docs/tasks/configure-pod-container/assign-cpu-resource/) + +* [为Pod配置Service数量](/docs/tasks/configure-pod-container/quality-service-pod/) + +{{% /capture %}} + + + + + diff --git a/content/zh/examples/admin/resource/cpu-constraints-pod-2.yaml b/content/zh/examples/admin/resource/cpu-constraints-pod-2.yaml new file mode 100644 index 0000000000..b5c7348f26 --- /dev/null +++ b/content/zh/examples/admin/resource/cpu-constraints-pod-2.yaml @@ -0,0 +1,13 @@ +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" diff --git a/content/zh/examples/admin/resource/cpu-constraints-pod-3.yaml b/content/zh/examples/admin/resource/cpu-constraints-pod-3.yaml new file mode 100644 index 0000000000..896d98ec2f --- /dev/null +++ b/content/zh/examples/admin/resource/cpu-constraints-pod-3.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Pod +metadata: + name: constraints-cpu-demo-4 +spec: + containers: + - name: constraints-cpu-demo-4-ctr + image: nginx + resources: + limits: + cpu: "800m" + requests: + cpu: "100m" diff --git a/content/zh/examples/admin/resource/cpu-constraints-pod-4.yaml b/content/zh/examples/admin/resource/cpu-constraints-pod-4.yaml new file mode 100644 index 0000000000..3c102158db --- /dev/null +++ b/content/zh/examples/admin/resource/cpu-constraints-pod-4.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: Pod +metadata: + name: constraints-cpu-demo-4 +spec: + containers: + - name: constraints-cpu-demo-4-ctr + image: vish/stress diff --git a/content/zh/examples/admin/resource/cpu-constraints-pod.yaml b/content/zh/examples/admin/resource/cpu-constraints-pod.yaml new file mode 100644 index 0000000000..7db23f26c8 --- /dev/null +++ b/content/zh/examples/admin/resource/cpu-constraints-pod.yaml @@ -0,0 +1,13 @@ +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" diff --git a/content/zh/examples/admin/resource/cpu-constraints.yaml b/content/zh/examples/admin/resource/cpu-constraints.yaml new file mode 100644 index 0000000000..6fc4239027 --- /dev/null +++ b/content/zh/examples/admin/resource/cpu-constraints.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: LimitRange +metadata: + name: cpu-min-max-demo-lr +spec: + limits: + - max: + cpu: "800m" + min: + cpu: "200m" + type: Container