You need to enable JavaScript to run this app.
导航
使用 Pod CPU Burst 能力
最近更新时间:2024.12.05 20:04:30首次发布时间:2024.12.05 20:04:30

容器服务基于 Katalyst(字节跳动开源的资源管理系统)为 Pod 提供 CPU Burst 能力。

说明

邀测·申请试用】:该功能目前处于邀测阶段,如需使用,请提交申请。

背景信息

在 Kubernetes 中,CPU Burst 是一种优化策略,用于提升延迟敏感型应用的容器性能表现。它允许容器在 CPU 空闲时积累一些 CPU 时间片,用于满足突发时的资源需求,进而提升容器性能、降低延迟指标。

CPU Burst 策略的工作原理是在容器的 CPU 使用量低于其 CPU Limit 时,积累额外的 CPU 时间片,这些时间片可以在容器需要处理突发任务时使用,例如突然增加的流量或请求。当容器需要在短时间内处理更多任务时,它可以利用这些积累的时间片来避免 CPU 限流(CPU Throttle)问题,从而减少响应时间延迟。

使用限制

  • 该功能对节点操作系统镜像及其版本存在依赖:

    • velinux 1.0:5.4.250-2-velinux1 及以上版本。
    • velinux 1.0 CentOS 兼容版:5.4.250-2.1.ve1.x86_64 及以上版本。

    说明

    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 能力。

  1. 登录 容器服务控制台
  2. 在左侧导航栏选择 集群,单击目标集群名称。
  3. 在集群管理页面左侧导航栏选择 组件管理
  4. 在 组件管理 页面的 调度 页签,找到 katalyst 组件,选择... > 安装
    katalyst 参数配置 页面勾选 精细化资源管理 特性开关并开启 CPU Burst 开关。
    alt
  5. 单击 确认,完成组件的安装。

步骤二:为 Pod 开启 CPU Burst 能力

容器服务支持从 Pod 或集群两个层面为 Pod 开启 CPU Burst 能力:

在 Pod 层面开启 CPU Burst 能力

在 Pod 层面开启 CPU Burst 能力时,通过 Pod Annotation 方式开启。Annotation 说明如下表所示。

Annotation KeyAnnotation Value 示例值说明是否必填

katalyst.kubewharf.io/cpu_enhancement

'{"cpu_burst_policy":"static","cpu_burst_percent":"100"}'

Pod 的 CPU Burst 能力相关配置,参数值格式为 String[JSON],有如下两个子参数:

  • "cpu_burst_policy":"static":针对当前 Pod 的 CPU Burst 开启策略。取值如下:
    • static:开启,静态策略。
    • none:不开启。
  • "cpu_burst_percent":"100":CPU Burst 可放大的百分比上限。取值说明如下:
    • 默认值:100
    • 取值范围:0~100(含)的正整数。

下文以创建无状态负载(Deployment)为例,更多工作负载相关操作,请参见 工作负载

  1. 通过 kubectl 连接集群。详细操作,请参见 连接集群
  2. 创建 Deployment 的 YAML 文件。示例文件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"
    
  3. 执行以下命令创建 Deployment。
    kubectl apply -f demo-nginx.yaml
    

在集群层面为 Pod 开启 CPU Burst 能力

在集群层面为集群下所有 ECS 方式部署的 Pod 开启 CPU Burst 能力时,需要在 katalyst-system 命名空间中,配置名为 katalyst-config 的 AdminQoSConfiguration 对象。

说明

  • katalyst-system 命名空间在安装 katalyst 组件后,由系统自动生成。
  • AdminQoSConfiguration 是 katalyst 组件精细化资源管理的配置。
  1. 通过 kubectl 连接集群。详细操作,请参见 连接集群

  2. 创建名为 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 开启策略。取值如下:

    • static:开启,静态策略。
    • none:不开启。

    cpuBurstPercent

    CPU Burst 可放大的百分比上限:

    • 默认值:100
    • 取值范围:0~100(含)的正整数。
  3. 创建一个 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
    

步骤三:验证结果

  1. 查看已开启 CPU Burst 能力的 Pod 的 UID。
    kubectl get pod <pod_name> -o jsonpath='{.metadata.uid}'
    
    其中<pod_name>替换为您实际要查看的 Pod 名称,例如 Pod 名称为my-pod,则完整命令如下:
    kubectl get pod my-pod -o jsonpath='{.metadata.uid}'
    
  2. 查看 Pod 下容器(Container)的 ID。
    kubectl get pod <pod_uid> -o jsonpath='{.status.containerStatuses[*].containerID}'
    
    其中<pod_uid>替换为上一步获取的 Pod UID 值。
  3. 登录 Pod 所在的 ECS 节点。登录方法,请参见 ECS Terminal
  4. 查看容器 cgroup 中cpu.cfs_burst_us文件的值。
    cat /sys/fs/cgroup/cpu/kubepods/pod<pod-uid>/<container-id>/cpu.cfs_burst_us
    
    其中<pod_uid><container-id>替换为上方两个步骤中已获取的值。
  5. 查看容器 cgroup 中cpu.cfs_quota_us文件的值。
    /sys/fs/cgroup/cpu/kubepods/pod<pod-uid>/<container-id>/cpu.cfs_quota_us
    
    其中<pod_uid><container-id>替换为上方两个步骤中已获取的值。
  6. 按如下方法,计算cpu.cfs_burst_uscpu.cfs_quota_us的值。
    cpu.cfs_burst_us = cpu.cfs_quota_us * 您设置的 CPU Burst 可放大的百分比上限值,则表示 Pod 的 CPU Burst 配置已正确下发。
  7. 查看容器被 CPU 限流的时间。
    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