You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
QoS 感知调度
CPU Burst
复制全文
下载 pdf
CPU Burst
容器服务基于 Katalyst(字节跳动开源的资源管理系统)为 Pod 提供 CPU Burst 能力。​
背景信息​
在 Kubernetes 中,CPU Burst 是一种优化策略,用于提升延迟敏感型应用的容器性能表现。它允许容器在 CPU 空闲时积累一些 CPU 时间片,用于满足突发时的资源需求,进而提升容器性能、降低延迟指标。​
CPU Burst 策略的工作原理是在容器的 CPU 使用量低于其 CPU Limit 时,积累额外的 CPU 时间片,这些时间片可以在容器需要处理突发任务时使用,例如突然增加的流量或请求。当容器需要在短时间内处理更多任务时,它可以利用这些积累的时间片来避免 CPU 限流(CPU Throttle)问题,从而减少响应时间延迟。​
VKE 在内核 CPU Burst 基础上,通过调节内核cpu.cfs_quota_us参数,允许容器在节点有空闲算力时临时突破 Limit,少量超额使用 CPU,平稳度过流量尖峰,无需调大规格即可改善响应延迟。​
使用限制​
  • 目前仅支持为云服务器(ECS)方式部署的 Pod 开启 CPU Burst 能力,以弹性容器实例(VCI)方式部署的 Pod 暂不支持。​
  • 完整使用该能力依赖 v0.5.13-vke.14 及以上版本的 katalyst 组件。​
  • CPU Burst 能力对如下 VKE 系统组件所在命名空间下的 Pod 不生效:​
  • kube-system​
  • kube-flannel​
  • cloudfs-system​
  • katalyst-system​
  • kruise-system​
  • kruise-daemon-config​
  • kueue-system​
  • varmor​
  • apmplus-opentelemetry-operator​
前提条件​
  • 集群已安装 v0.5.13-vke.14 及以上版本的 katalyst 组件,并在组件参数配置页面勾选 QoS 感知调度 开启 CPU Burst 开关。详情请参见 katalyst。​
使用方法​
步骤一:为节点配置 Label​
配置节点 Label 后,您可以使用 katalyst 组件的 CPU Burst 能力,管理对应的节点。​
  1. 在左侧导航栏选择 集群,单击目标集群名称。​
  1. 在集群管理页面,按如下方式为 Pod 所在节点添加 Label。​
  • ​
    从节点池维度添加 Label
    从节点维度添加 Label
    ​
    说明​
    推荐使用该方法添加 Label,可以批量为节点池内的节点增加 Label。​
    1. 左侧导航栏选择 节点管理 > 节点池。​
    1. 在 节点池 页面找到目标节点池,单击对应 操作 列下的 编辑。​
    1. 在 编辑节点池 页面的 ①节点池配置 步骤 高级配置 模块下配置 节点标签(Labels)并勾选 开启节点标签及污点自动更新。​
    • 标签键:vke.node.katalyst.deploy​
    • 标签值:true​
    • ​​​
    1. 根据控制台向导,更新完成节点池配置。​
    ​
步骤二:为 Pod 开启 CPU Burst 能力​
VKE 支持从 Pod 或集群两个层面为 Pod 开启 CPU Burst 能力。​
注意​
  • 关闭 Pod 层面 CPU Burst 功能时,只能通过在 Annotation 中设置cpuBurstPolicy为none来关闭,不能直接删除 Annotation。​
  • 关闭集群层面 CPU Burst 功能时,只能通过在 AdminQoSConfiguration CRD 中设置cpuBurstPolicy为none来关闭,不能直接删除 CRD。​
详细的操作说明,请参见本文下方 更多操作。​
​
Pod 层面
集群层面
​
通过为 Pod 添加特定的 Annotation 来为单个 Pod 配置 CPU 弹性策略。Annotation 说明如下表所示。​
​
Annotation Key​
Annotation Value 示例值​
说明​
是否必填​
katalyst.kubewharf.io/cpu_enhancement​
'{"cpu_burst_policy":"cpuBurstOnly","cpu_burst_percent":"100"}'​
Pod 的 CPU Burst 能力相关配置,参数值格式为 String[JSON],详细的子参数说明,请见下方 JSON 参数说明 表格。​
否​
​
JSON 参数说明​
​
Key​
含义​
是否必填​
Value 类型​
取值说明​
cpu_burst_policy​
​
CPU Burst 开启/关闭策略。​
​
​
​
是​
String​
  • none:关闭 CPU Burst 策略。​
  • static:(已废弃)静态策略。​
注意​
static 取值已废弃,之前使用了该取值的用户,推荐使用 cpuBurstOnly 替代。​
  • cpuBurstOnly:仅开启内核 CPU Burst 弹性能力。​
注意​
CPU Burst 功能仅支持以下节点操作系统镜像:​
  • 内核版本为 5.4、5.10、5.15 的 veLinux 公共镜像​
  • 内核版本为 5.15 的 Ubuntu 公共镜像​
  • 基于上述两个内核版本公共镜像制作的自定义镜像​
  • cfsQuotaBurstOnly:仅开启 CFS Quota 的自动弹性能力。​
说明​
CFS Quota 弹性功能支持所有操作系统镜像。​
  • auto:自适应开启 cpuBurstOnly 和 cfsQuotaBurstOnly 两种弹性能力。​
cpu_burst_percent​
​
CPU Burst 的上限百分比。​
​
否​
String​
  • 取值范围:0~100(含)的正整数。​
  • 默认值:100。​
​
cfs_quota_burst_percent​
CFS Quota 的上限百分比,即临时突破 Limit,少量超额使用 CPU 的百分比。​
否​
String​
  • 取值范围:100 以上正整数。​
  • 默认值:300。​
​
cfs_quota_burst_period_seconds​
开启 CFS Quota 弹性能力时,容器可以持续按上限 cfsQuotaBurstPercent 消耗的 CPU 时间限制。​
单个容器超出时限后,其已经上调的 cgroup 参数会被逐步恢复为原始值,其他 Pod 不受影响。​
否​
String​
  • 取值范围:正整数。​
  • 默认值:-1,表示不限制。​
  • 单位:秒。​
​
下文以创建无状态负载(Deployment)为例,更多工作负载相关操作,请参见 工作负载。​
  1. 通过 kubectl 连接集群。详细操作,请参见 连接集群。​
  1. 创建 Deployment 的 YAML 文件。示例 YAML 文件cpu-burst-demo.yaml代码如下。​
  • ​
    apiVersion: apps/v1​
    kind: Deployment​
    metadata:​
    name: cpu-burst-demo # 无状态负载名称。​
    namespace: default # 无状态负载所在的命名空间。​
    spec:​
    replicas: 1 # 无状态负载的副本数。​
    selector:​
    matchLabels:​
    app: cpu-burst-demo​
    template:​
    metadata:​
    labels:​
    app: cpu-burst-demo​
    annotations: ​
    katalyst.kubewharf.io/cpu_enhancement: '{"cpu_burst_policy":"auto","cpu_burst_percent":"100"}' # Pod 的 CPU Burst 能力配置。​
    spec:​
    containers:​
    - name: container-1 # 容器名称。​
    image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0 # 容器镜像地址和 Tag,请替换为您自己的容器镜像。若使用公网镜像,请确保您的集群能够访问公网。​
    resources:​
    limits: # 容器的 CPU 或内存上限。开启 CPU Burst 能力时,须配置 CPU Limit。​
    cpu: "4"​
    requests: # 容器的 CPU 或内存请求。​
    cpu: "2"​
    ​
  1. 执行以下命令创建 Deployment。​
  • ​
    kubectl apply -f cpu-burst-demo.yaml​
    ​
​
验证结果​
  1. 查看已开启 CPU Burst 能力的 Pod 的 UID。​
  • ​
    #将 <pod_name> 替换为实际 Pod 名称。​
    kubectl get pod <pod_name> -o jsonpath='{.metadata.uid}'​
    ​
  1. 查看 Pod 下容器(Container)的 ID。​
  • ​
    #将下方 <pod_uid> 替换为上一步获取的 Pod UID 值。​
    kubectl get pod <pod_uid> -o jsonpath='{.status.containerStatuses[*].containerID}'​
    ​
  1. 登录 Pod 所在的 ECS 节点。登录方法,请参见 ECS Terminal。​
  1. 查看容器 cgroup 中 CPU 的 burst_us值。​
  • ​
    cgroup v1
    cgroup v2
    ​
    ​
    #将 <pod_uid> 和 <container-id> 替换为上方步骤中已获取的值。​
    cat /sys/fs/cgroup/cpu/kubepods/pod<pod-uid>/<container-id>/cpu.cfs_burst_us​
    ​
    ​
  • 其中<pod_uid>和<container-id>替换为上方步骤中已获取的值。​
  1. 查看容器 cgroup 中 CPU 的quota_us值。​
  • ​
    cgroup v1
    cgroup v2
    ​
    ​
    #将 <pod_uid> 和 <container-id> 替换为上方步骤中已获取的值。​
    cat /sys/fs/cgroup/cpu/kubepods/pod<pod-uid>/<container-id>/cpu.cfs_quota_us​
    ​
    ​
  1. 按如下方法,计算cpu.cfs_burst_us和cpu.cfs_quota_us的值。​
  • 若 cpu.cfs_burst_us = cpu.cfs_quota_us * 您设置的 CPU Burst 可放大的百分比上限值,则表示 Pod 的 CPU Burst 配置已正确下发。​
  1. 查看容器被 CPU 限流的时间。​
  • ​
    cgroup v1
    cgroup v2
    ​
    ​
    #将 <pod_uid> 和 <container-id> 替换为上方步骤中已获取的值。​
    cat /sys/fs/cgroup/cpu/kubepods/pod<pod-uid>/<container-id>/cpu.stat​
    ​
    预期返回结果如下:​
    ​
    nr_periods 1215​
    nr_throttled 0​
    throttled_time 0 # 容器被 CPU 限流的时间。开启 CPU Burst 后,单位时间内该指标的增量会降低。​
    nr_bursts 401​
    burst_time 66399120464​
    ​
    ​
更多操作​
如需关闭 Pod CPU Burst 功能,按如下方法操作。​
​
Pod 层面
集群层面
​
需要在对应的 Pod 上更新 CPU Burst 相关 Annotation,将 Annotation Value 改为none,即:katalyst.kubewharf.io/cpu_enhancement: '{"cpu_burst_policy":"none","cpu_burst_percent":"100"}'。​
​
最近更新时间:2026.10.19 11:29:10
这个页面对您有帮助吗?
有用
有用
无用
无用