Kubernetes中资源管理

Kubernetes的资源管理是一个多层次、由声明式配置驱动的体系,核心目标是在多租户的集群环境中,高效、公平、稳定地分配和隔离计算资源(如CPU、内存)。

默认情况下, Kubernetes 集群上的容器运行使用的计算资源没有限制,因此在使用Kubernetes集群中的容器时,管理员需要考虑如何分配计算资源。

使用 Kubernetes 资源配额, 管理员(也称为集群操作者)可以在一个指定的命名空间内限制集群资源的使用与创建。 在命名空间中,一个 Pod 最多能够使用命名空间的资源配额所定义的 CPU 和内存用量。 作为集群操作者或命名空间级的管理员,你可能也会担心如何确保一个 Pod 不会垄断命名空间内所有可用的资源。

LimitRange 是限制命名空间内可为每个适用的对象类别 (例如 Pod 或 PersistentVolumeClaim) 指定的资源分配量(限制和请求)的策略对象。

在 Kuberentes 中对资源的管理

K8s层面

  • LimitRange 管理多个不同对象类别的资源分配约束。
  • ResourceQuota 限制名字空间的资源消耗。

机器层面

  • CPU
  • 内存

📦 容器与Pod层:资源请求与限制 这是资源管理的基础。你需要在Pod的容器规范中明确声明资源需求。

资源请求(requests):容器保证能获得的最小资源量。调度器使用此值决定将Pod放在哪个有足够空闲资源的节点上。

资源限制(limits):容器允许使用的最大资源量。超过内存限制的容器可能被终止重启;超过CPU限制则会被限制使用,但通常不会被终止。

  1. 默认情况下,Kubernetes会为每个Pod分配1MiB的CPU资源,即1m CPU。
  2. 默认情况下,Kubernetes会为每个Pod分配64MiB的内存资源。
  • Node 中的资源状态查看,describe node的3个维度
  • Pod 中资源使用情况查看,request

资源使用配置

    resources:
      limits:
        cpu: "2"
        memory: 4000Mi
      requests:
        cpu: "1"
        memory: 2000Mi

ubectl describe node local-node

......(省略)
Capacity:
  cpu:                4
  ephemeral-storage:  61614020Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             8139660Ki
  pods:               110
Allocatable:
  cpu:                4
  ephemeral-storage:  59938118609
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             8139660Ki
  pods:               110
System Info:
  Machine ID:                      
  System UUID:                     000c67e7-bee6-0000-000b-db2600a4e0de
  Boot ID:                         421c59ed-2c11-4757-a43b-1835f1ba87f3
  Kernel Version:                  6.8.0-55-generic
  OS Image:                        SUSE Linux Enterprise Server 15 SP7
  Operating System:                linux
  Architecture:                    amd64
  Container Runtime Version:       containerd://2.0.5-k3s1
  Kubelet Version:                 v1.33.1+k3s1
  Kube-Proxy Version:              
PodCIDR:                           10.42.0.0/24
PodCIDRs:                          10.42.0.0/24
ProviderID:                        k3s://local-node
Non-terminated Pods:               (10 in total)
  Namespace                        Name                                          CPU Requests  CPU Limits  Memory Requests  Memory Limits  Age
  ---------                        ----                                          ------------  ----------  ---------------  -------------  ---
  cattle-fleet-local-system        fleet-agent-cc99dcf58-s9wz2                   0 (0%)        0 (0%)      0 (0%)           0 (0%)         13d
  cattle-fleet-system              fleet-controller-65bb448f69-87nst             0 (0%)        0 (0%)      0 (0%)           0 (0%)         13d
  cattle-fleet-system              gitjob-568578f896-wvgqx                       0 (0%)        0 (0%)      0 (0%)           0 (0%)         13d
  cattle-fleet-system              helmops-645d5cb775-gq8kq                      0 (0%)        0 (0%)      0 (0%)           0 (0%)         13d
  cattle-provisioning-capi-system  capi-controller-manager-5b679bbdbd-lr5cn      0 (0%)        0 (0%)      0 (0%)           0 (0%)         13d
  cattle-system                    api-extension-5fcff647d5-g68vm                0 (0%)        0 (0%)      0 (0%)           0 (0%)         13d
  cattle-system                    dashboard-shell-zqhkx                         0 (0%)        0 (0%)      0 (0%)           0 (0%)         21s
  cattle-system                    rancher-webhook-8fb8d9545-h5mjg               0 (0%)        0 (0%)      0 (0%)           0 (0%)         13d
  cattle-system                    system-upgrade-controller-794fb55fc8-prjmb    0 (0%)        0 (0%)      0 (0%)           0 (0%)         13d
  kube-system                      coredns-697968c856-qrx6z                      100m (2%)     0 (0%)      70Mi (0%)        170Mi (2%)     13d
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests   Limits
  --------           --------   ------
  cpu                100m (2%)  0 (0%)
  memory             70Mi (0%)  170Mi (2%)
  ephemeral-storage  0 (0%)     0 (0%)
  hugepages-1Gi      0 (0%)     0 (0%)
  hugepages-2Mi      0 (0%)     0 (0%)
Events:              <none>