指定CPU请求和CPU限制

要为容器指定CPU请求,在容器资源清单中使用resources:requests字段。要指定CPU限制,使用resources:limits。

cpu-request-limit.yaml

 apiVersion: v1
kind: Pod
metadata:
name: cpu-demo
namespace: cpu-example
spec:
containers:
- name: cpu-demo-ctr
image: vish/stress
resources:
limits:
cpu: ""
requests:
cpu: "0.5"
args:
- -cpus
- ""

配置文件的args部分在容器启动时为其提供参数。-cpus“2”参数告诉容器尝试使用2个cpu。

创建Pod:

kubectl apply -f cpu-request-limit.yaml --namespace=cpu-example

确认POD正在运行:

kubectl get pod cpu-demo --namespace=cpu-example

查看有关POD的详细信息:

kubectl get pod cpu-demo --output=yaml --namespace=cpu-example

输出显示Pod中的一个容器具有500 milliCPU的CPU请求和1 CPU的CPU限制。

resources:
limits:
cpu: ""
requests:
cpu: 500m

使用kubectl top获取Pod的度量:

kubectl top pod cpu-demo --namespace=cpu-example

这个示例输出显示pod正在使用974milliCPU,这只是比Pod配置中指定的1CPU的限制少了一点。

NAME                        CPU(cores)   MEMORY(bytes)
cpu-demo 974m <something>

回想一下,通过设置-cpu“2”,将容器配置为尝试使用2个CPU,但容器只允许使用大约1个CPU。容器的CPU使用正在被限制,因为容器正在尝试使用超过其限制的CPU资源。

注意:CPU使用低于1.0的另一个可能的解释是节点可能没有足够的可用CPU资源。回想一下,这个练习的先决条件要求每个节点至少有一个cpu。如果容器在只有1个CPU的节点上运行,则无论为容器指定的CPU限制如何,容器都不能使用超过1个CPU。

CPU单元

CPU资源是以CPU单位度量的。在kubernetes中,一个CPU相当于:

- 1 AWS VCPU

- 1 GCP核心

- 1个azure vcore

- 1个带超线程的裸机Intel处理器上的超线程

允许使用小数。一个请求0.5CPU的容器的cpu保证是请求1CPU的容器的一半。你可以用后缀m来表示milli。例如100M CPU、100毫CPU和0.1 CPU都是相同的。不允许精度小于1m。

CPU总是作为绝对数量请求,而不是作为相对数量;0.1是单核、双核或48核计算机上相同数量的CPU。

删除Pod

kubectl delete pod cpu-demo --namespace=cpu-example

指定对节点来说太大的CPU请求

CPU请求和限制与容器相关,但将Pod视为具有CPU请求和限制是有用的。Pod的CPU请求是Pod中所有容器的CPU请求的总和。同样,Pod的CPU限制是Pod中所有容器的CPU限制之和。

Pod调度基于请求。只有当节点有足够的CPU资源来满足Pod CPU请求时,Pod才会被安排在节点上运行。

如下将创建一个Pod,它的CPU请求太大,超过集群中任何节点的容量。这是一个有一个容器的Pod的配置文件。容器请求100个CPU,这可能会超过集群中任何节点的容量。

cpu-request-limit-2.yaml

apiVersion: v1
kind: Pod
metadata:
name: cpu-demo-
namespace: cpu-example
spec:
containers:
- name: cpu-demo-ctr-
image: vish/stress
resources:
limits:
cpu: ""
requests:
cpu: ""
args:
- -cpus
- ""

创建Pod:

kubectl apply -f cpu-request-limit-.yaml --namespace=cpu-example

查看POD状态:

kubectl get pod cpu-demo- --namespace=cpu-example

输出显示POD状态为挂起。也就是说,pod没有被安排在任何节点上运行,它将无限期地保持在挂起状态:

kubectl get pod cpu-demo- --namespace=cpu-example
NAME         READY     STATUS    RESTARTS   AGE
cpu-demo- / Pending 7m

查看有关POD的详细信息,包括事件:

kubectl describe pod cpu-demo- --namespace=cpu-example

输出显示,由于节点上的CPU资源不足,无法计划容器:

Events:
Reason Message
------ -------
FailedScheduling No nodes are available that match all of the following predicates:: Insufficient cpu ().

删除Pod:

kubectl delete pod cpu-demo- --namespace=cpu-example

如果未指定CPU限制

如果未指定容器的CPU限制,则以下情况之一适用:

- 容器对它可以使用的CPU资源没有上限。容器可以使用其运行所在节点上可用的所有CPU资源。

- 容器正在具有默认CPU限制的命名空间中运行,容器将自动分配默认限制。群集管理员可以使用LimitRange指定CPU限制的默认值。

CPU请求和限制的动机

通过配置集群中运行的容器的CPU请求和限制,可以有效地利用集群节点上可用的CPU资源。通过保持Pod CPU请求低,可以给Pod很好的被调度的机会。通过CPU限制大于CPU请求,您可以完成两件事:

- pod可以有突发的活动,在那里它可以利用cpu资源碰巧是可用的。

- pod在突发期间可以使用的cpu资源量被限制在某个合理的数量。

最新文章

  1. SSIS 文件系统任务无法使用变量配置目标路径
  2. vscode配置
  3. GCC选项
  4. Python For Data Analysis -- IPython
  5. MySQL常用配置
  6. Microsoft Office Excel 不能访问文件“XXXXXXXXXXXXX.xls”。 可能的原因有:
  7. Enhancing the Scalability of Memcached
  8. 第一天CSS实战培训及笔记及感想
  9. 手机端overflow scroll卡顿的情况
  10. Adatper中获取宽高为0的问题
  11. B - 楼下水题(扩展欧几里德)
  12. instanceof 变量是否属于某一类 class 的实例
  13. “简密”App Store处女作开发总结
  14. Boxes in a Line(移动盒子)
  15. 老李推荐: 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述
  16. 在公网上的Linux,我的一些配置分享
  17. jq封装
  18. nginx-web身份验证
  19. pandas dataframe的合并(append, merge, concat)
  20. adversarial example研究

热门文章

  1. pandas知识点脑图汇总
  2. python中pop()与split()的用法
  3. vue全家桶面试
  4. java.lang.IllegalArgumentException: An invalid character [34] was present in the Cookie value
  5. 几种访问HDFS文件的客户端的总结
  6. Ajax无法访问回调函数seccess问题
  7. bytes与网络通信
  8. ZOJ3261-Connections in Galaxy War-(逆向并查集+离线处理)
  9. 项目(1-1)ES32获取mpu9250数据网页交互显示
  10. 11.2Test