更新时间:2024-01-17 gmt 08:00

设置容器规格-凯发k8国际娱乐官网入口

操作场景

cce支持在创建工作负载时为添加的容器设置资源的需求量和限制,最常见的可设定资源是 cpu 和内存(ram)大小。此外kubernetes还支持其他类型的资源,可通过yaml设置。

申请与限制

cpu配额内存配额设置中,申请限制的含义如下:
  • 申请(request):根据申请值调度该实例到满足条件的节点去部署工作负载。
  • 限制(limit):根据限制值限制工作负载使用的资源。

如果实例运行所在的节点具有足够的可用资源,实例可以使用超出申请的资源量,但不能超过限制的资源量。

例如,如果您将实例的内存申请值为1gib、限制值为2gib,而该实例被调度到一个具有8gib cpu的节点上,且该节点上没有其他实例运行,那么该实例在负载压力较大的情况下可使用超过1gib的内存,但内存使用量不得超过2gib。若容器中的进程尝试使用超过2gib的资源时,系统内核将会尝试将进程终止,出现内存不足(oom)错误。

创建工作负载时,建议设置cpu和内存的资源上下限。同一个节点上部署的工作负载,对于未设置资源上下限的工作负载,如果其异常资源泄露会导致其它工作负载分配不到资源而异常。未设置资源上下限的工作负载,工作负载监控信息也会不准确。

配置说明

在实际生产业务中,建议申请和限制比例为1:1.5左右,对于一些敏感业务建议设置成1:1。如果申请值过小而限制值过大,容易导致节点超分严重。如果遇到业务高峰或流量高峰,容易把节点内存或者cpu耗尽,导致节点不可用的情况发生。

  • cpu配额:cpu资源单位为核,可以通过数量或带单位后缀(m)的整数表达,例如数量表达式0.1核等价于表达式100m,但kubernetes不允许设置精度小于1m的cpu资源。
    表1 cpu配额说明

    参数

    说明

    cpu申请

    容器使用的最小cpu需求,作为容器调度时资源分配的判断依赖。只有当节点上可分配cpu总量 ≥ 容器cpu申请数时,才允许将容器调度到该节点。

    cpu限制

    容器能使用的cpu最大值。

    建议配置方法

    节点的实际可用分配cpu量 ≥ 当前实例所有容器cpu限制值之和 ≥ 当前实例所有容器cpu申请值之和,节点的实际可用分配cpu量请在资源管理 > 节点管理中对应节点的“可分配资源”列下查看“cpu: ** core”

  • 内存配额:内存资源默认单位为字节,或者也可以使用带单位后缀的整数来表达,例如100mi。但需要注意单位大小写。
    表2 内存配额说明

    参数

    说明

    内存申请

    容器使用的最小内存需求,作为容器调度时资源分配的判断依赖。只有当节点上可分配内存总量 ≥ 容器内存申请数时,才允许将容器调度到该节点。

    内存限制

    容器能使用的内存最大值。当内存使用率超出设置的内存限制值时,该实例可能会被重启进而影响工作负载的正常使用。

    建议配置方法

    节点的实际可用分配内存量 ≥ 当前节点所有容器内存限制值之和 ≥ 当前节点所有容器内存申请值之和,节点的实际可用分配内存量请在资源管理 > 节点管理中对应节点的“可分配资源”列下查看“内存: ** gib”

可分配资源:可分配量按照实例申请值(request)计算,表示实例在该节点上可请求的资源上限,不代表节点实际可用资源(请参见cpu和内存配额使用示例)。 计算公式为:

  • 可分配cpu = cpu总量 - 所有实例的cpu申请值 - 其他资源cpu预留值
  • 可分配内存 = 内存总量 - 所有实例的内存申请值 - 其他资源内存预留值

cpu和内存配额使用示例

假设集群中可调度的节点资源总量为4core 8gib,且已经在集群中部署了两个实例,其中实例1存在cpu和内存资源超分(即限制值>申请值),而实例2不存在资源超分。两个实例的规格设置如下:

实例

cpu申请

cpu限制

内存申请

内存限制

实例1

1core

2core

1gib

4gib

实例2

2core

2core

2gib

2gib

那么节点上cpu和内存的资源使用情况如下:

  • cpu可分配资源=4core-(实例1申请的1core 实例2申请的2core)=1core
  • 内存可分配资源=8gib-(实例1申请的1gb 实例2申请的2gib)=5gib

此时节点还剩余1core 5gib的资源可供下一个新增的实例调度。

如果实例1处于业务高峰、负载压力较大时,会尝试在限制值范围内使用更多的cpu和内存,因此实际可用的资源将会小于1core 5gib。

其他资源配额

节点通常还可以具有本地的临时性存储ephemeral storage),由本地挂载的可写入设备或者有时也用ram来提供支持。临时性存储所存储的数据不提供长期可用性的保证,pod通常可以使用本地临时性存储来实现缓冲区、保存日志等功能,也可以使用emptydir类型的存储卷挂载到容器中。更多详情请参见。

kubernetes支持在容器的定义中指定ephemeral-storage的申请值和限制值来管理本地临时性存储。 pod中的每个容器可以设置以下属性:

  • spec.containers[].resources.limits.ephemeral-storage
  • spec.containers[].resources.requests.ephemeral-storage

以下示例中,pod包含两个容器,每个容器的本地临时性存储申请值为2gib,限制值为4gib。 因此,整个pod的本地临时性存储申请值是4gib,限制值为8gib,且emptydir卷使用了500mi的本地临时性存储。

apiversion: v1
kind: pod
metadata:
  name: frontend
spec:
  containers:
  - name: container-1
    image: 
    resources:
      requests:
        ephemeral-storage: "2gi"
      limits:
        ephemeral-storage: "4gi"
    volumemounts:
    - name: ephemeral
      mountpath: "/tmp"
  - name: container-2
    image: 
    resources:
      requests:
        ephemeral-storage: "2gi"
      limits:
        ephemeral-storage: "4gi"
    volumemounts:
    - name: ephemeral
      mountpath: "/tmp"
  volumes:
    - name: ephemeral
      emptydir:
        sizelimit: 500mi
分享:
网站地图