【问题标题】:Kubernetes: Pods and cpu limitsKubernetes:Pod 和 CPU 限制
【发布时间】:2020-05-21 14:31:40
【问题描述】:

为了这个问题,让我们假设以下内容:

  • 我的 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 资源,而不是内存。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    每个节点对每种资源类型都有最大容量:它可以为 Pod 提供的 CPU 和内存量,因此如果超过主机限制,它肯定会被终止。

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

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

    2) Container 运行在具有默认 CPU 限制的命名空间中,并且自动为 Container 分配了默认限制。集群管理员可以使用 LimitRange 来指定 CPU 限制的默认值。

    Describe 命令将为您提供有关工作节点的所有详细信息

    $ 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 容量?
    • 只有当 Node 有足够的 CPU 资源来满足 Pod CPU 请求时,才会安排 Pod 在 Node 上运行。
    • 添加了更多来回答希望这就是你想知道的.. cpu 限制是每个节点的,所以它不会从集群中的其他节点占用 cpu
    • @JasonGenX 和 DT,资源限制可以使用容器或 pod 或两者兼而有之吗?
    猜你喜欢
    • 2020-03-30
    • 2021-09-03
    • 1970-01-01
    • 2017-11-20
    • 2016-12-01
    • 2012-07-21
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多