Kubernetes:Pod和CPU限制

3
为了回答这个问题,让我们假设以下情况:
  • 我的Kubernetes集群总共有12个CPU
  • 这12个CPU分布在3个节点上。
  • 我在集群上运行一个单独的Pod,并没有指定任何CPU资源信息。在这种情况下,默认的CPU请求应该是100m(相当于一个CPU的10%)。
  • Pod处于具有硬编码为1个副本和无自动缩放定义的部署中。
据我所知,这意味着单个Pod只会在3个集群节点中的一个上运行,因为单个节点可以轻松满足其请求的CPU。但是,Pod通过开始处理非常耗费CPU的工作“惊喜”了集群。
那么会发生什么?
由于没有为Pod设置“限制”,Kubernetes会允许该Pod在单个主机节点上使用更多的CPU吗?上限是多少?是节点的CPU限制还是某个任意的默认限制?
我的问题只涉及CPU资源,不涉及内存。
1个回答

3
每个节点对于每种资源类型都有最大容量:提供给Pod的CPU和内存数量。如果超过主机限制,它将被终止。

如果您没有为容器指定CPU限制,则存在以下情况之一:

1)容器在CPU资源使用方面没有上限。容器可以使用正在运行它的节点上所有可用的CPU资源。

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

描述命令将为你提供关于工作节点的所有详细信息。
$ kubectl describe nodes k8s-node01
Name:               k8s-node01
Roles:              <none>
Labels:             beta.kubernetes.io/arch=amd64

Taints:             <none>
Unschedulable:      false

Capacity:
  cpu:                4
  ephemeral-storage:  40593708Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             16432224Ki
  pods:               110
Allocatable:
  cpu:                4
  ephemeral-storage:  37411161231
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             16329824Ki
  pods:               110
System Info:
  Machine ID:                 15b4b4728a454166acafff508d4022e8
  System UUID:                15B4B472-8A45-4166-ACAF-FF508D4022E8
  Boot ID:                    bf52803c-9123-49e2-967b-2585401f958f
  Kernel Version:             4.4.0-169-generic
  OS Image:                   Ubuntu 16.04.6 LTS
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  docker://19.3.4
  Kubelet Version:            v1.17.2
  Kube-Proxy Version:         v1.17.2
PodCIDR:                      192.168.1.0/24
PodCIDRs:                     192.168.1.0/24
Non-terminated Pods:          (3 in total)
  Namespace                   Name                 CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE
  ---------                   ----                 ------------  ----------  ---------------  -------------  ---
  kube-system                 calico-node-j45l6    250m (6%)     0 (0%)      0 (0%)           0 (0%)         7h1m
  kube-system                 kube-proxy-7w5fc     0 (0%)        0 (0%)      0 (0%)           0 (0%)         7h1m
  mynamespace                 nginx                0 (0%)        0 (0%)      0 (0%)           0 (0%)         33m
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests   Limits
  --------           --------   ------
  cpu                250m (6%)  0 (0%)
  memory             0 (0%)     0 (0%)
  ephemeral-storage  0 (0%)     0 (0%)
Events:              <none>

我只是在谈论 CPU,不是内存。所以你的意思是说 Pod 将被允许“拉伸”到单个节点的 CPU 容量上? - JasonGenX
只有当节点具有足够的CPU资源来满足Pod的CPU请求时,才会安排Pod在节点上运行。 - DT.
回答中添加了更多内容,希望这就是您想知道的... CPU 限制是每个节点的,因此它不会从集群中的其他节点获取 CPU。 - DT.
@JasonGenX和DT,使用容器或Pod都可以实现资源限制吗? - samshers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接