容器服务基于 Katalyst(字节跳动开源的资源管理系统)为 Pod 提供 CPU Burst 能力。
说明
【邀测·申请试用】:该功能目前处于邀测阶段,如需使用,请提交申请。
在 Kubernetes 中,CPU Burst 是一种优化策略,用于提升延迟敏感型应用的容器性能表现。它允许容器在 CPU 空闲时积累一些 CPU 时间片,用于满足突发时的资源需求,进而提升容器性能、降低延迟指标。
CPU Burst 策略的工作原理是在容器的 CPU 使用量低于其 CPU Limit 时,积累额外的 CPU 时间片,这些时间片可以在容器需要处理突发任务时使用,例如突然增加的流量或请求。当容器需要在短时间内处理更多任务时,它可以利用这些积累的时间片来避免 CPU 限流(CPU Throttle)问题,从而减少响应时间延迟。
该功能对节点操作系统镜像及其版本存在依赖:
说明
5.10 内核版本当前暂不支持。
目前仅支持为云服务器(ECS)方式部署的 Pod 开启 CPU Burst 能力。
该功能依赖 v0.5.13-vke.8 及以上版本的 katalyst 组件。
在 katalyst 组件中开启 CPU Burst 能力。
说明
katalyst 组件的 v0.5.13-vke.8 及以上版本目前处于 邀测 状态,您在申请 CPU Burst 功能邀测后,容器服务会为您一并开通组件版本的邀测。若您在申请邀测前已安装组件,请升级组件到对应的版本,并按照下文图示说明,开启 CPU Burst 能力。
...
> 安装。容器服务支持从 Pod 或集群两个层面为 Pod 开启 CPU Burst 能力:
在 Pod 层面开启 CPU Burst 能力时,通过 Pod Annotation 方式开启。Annotation 说明如下表所示。
Annotation Key | Annotation Value 示例值 | 说明 | 是否必填 |
---|---|---|---|
katalyst.kubewharf.io/cpu_enhancement | '{"cpu_burst_policy":"static","cpu_burst_percent":"100"}' | Pod 的 CPU Burst 能力相关配置,参数值格式为 String[JSON],有如下两个子参数:
| 否 |
下文以创建无状态负载(Deployment)为例,更多工作负载相关操作,请参见 工作负载。
demo-nginx.yaml
代码如下:apiVersion: apps/v1 kind: Deployment metadata: name: demo-nginx # 无状态负载名称。 namespace: default # 无状态负载所在的命名空间。 spec: replicas: 1 # 无状态负载的副本数。 selector: matchLabels: app: demo-nginx template: metadata: labels: app: demo-nginx annotations: katalyst.kubewharf.io/cpu_enhancement: '{"cpu_burst_policy":"static","cpu_burst_percent":"100"}' # Pod 的 CPU Burst 能力配置。 spec: containers: - name: container-1 # 容器名称。 image: nginx:1.14.2 # 容器镜像地址和 Tag,请替换为您自己的容器镜像。若使用公网镜像,请确保您的集群能够访问公网。 resources: limits: # 容器的 CPU 或内存上限。 cpu: "4" requests: # 容器的 CPU 或内存请求。 cpu: "2"
kubectl apply -f demo-nginx.yaml
在集群层面为集群下所有 ECS 方式部署的 Pod 开启 CPU Burst 能力时,需要在 katalyst-system 命名空间中,配置名为 katalyst-config 的 AdminQoSConfiguration 对象。
说明
通过 kubectl 连接集群。详细操作,请参见 连接集群。
创建名为 katalyst-config 的 AdminQoSConfiguration 对象,YAML 文件katalyst-config.yaml
的示例代码如下:
apiVersion: config.katalyst.kubewharf.io/v1alpha1 kind: AdminQoSConfiguration metadata: name: katalyst-config # 固定值,AdminQoSConfiguration 对象名称。 namespace: katalyst-system # 固定值,AdminQoSConfiguration 对象所属命名空间。 labels: vke.node.katalyst.deploy: "true" # 节点池配置精细化资源管理特性相关 Label。该功能针对具有该 Label 的节点生效。 spec: config: fineGrainedResourceConfig: cpuBurstConfig: # 集群级别为 Pod 配置 CPU Burst 能力。 cpuBurstPolicy: "static" # 开启 CPU Burst 能力的配置。 cpuBurstPercent: 50 # CPU Burst 可放大的百分比上限。
CPU Burst 能力相关参数说明如下:
cpuBurstConfig 参数 | 说明 |
---|---|
cpuBurstPolicy | 针对当前 Pod 的 CPU Burst 开启策略。取值如下:
|
cpuBurstPercent | CPU Burst 可放大的百分比上限:
|
创建一个 KatalystCustomConfig (KCC) 对象。KCC 用于描述 AdminQosConfiguration 的 Group、Version、Resource(GVR)信息和托管行为。
apiVersion: config.katalyst.kubewharf.io/v1alpha1 kind: KatalystCustomConfig metadata: name: katalyst-config # 固定值,KatalystCustomConfig 对象名称。 namespace: katalyst-system # 固定值,KatalystCustomConfig 对象所属的命名空间。 labels: vke.node.katalyst.deploy: "true" # 固定值,节点池配置精细化资源管理特性相关 Label。 spec: targetType: # 固定值,描述 AdminQosConfiguration 的 GVR 信息。 group: config.katalyst.kubewharf.io resource: adminqosconfigurations version: v1alpha1
其中kubectl get pod <pod_name> -o jsonpath='{.metadata.uid}'
<pod_name>
替换为您实际要查看的 Pod 名称,例如 Pod 名称为my-pod
,则完整命令如下:kubectl get pod my-pod -o jsonpath='{.metadata.uid}'
其中kubectl get pod <pod_uid> -o jsonpath='{.status.containerStatuses[*].containerID}'
<pod_uid>
替换为上一步获取的 Pod UID 值。cpu.cfs_burst_us
文件的值。其中cat /sys/fs/cgroup/cpu/kubepods/pod<pod-uid>/<container-id>/cpu.cfs_burst_us
<pod_uid>
和<container-id>
替换为上方两个步骤中已获取的值。cpu.cfs_quota_us
文件的值。其中/sys/fs/cgroup/cpu/kubepods/pod<pod-uid>/<container-id>/cpu.cfs_quota_us
<pod_uid>
和<container-id>
替换为上方两个步骤中已获取的值。cpu.cfs_burst_us
和cpu.cfs_quota_us
的值。cpu.cfs_burst_us
= cpu.cfs_quota_us
* 您设置的 CPU Burst 可放大的百分比上限值
,则表示 Pod 的 CPU Burst 配置已正确下发。预期返回结果如下: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