You need to enable JavaScript to run this app.
容器服务

容器服务

复制全文
调度管理
使用 Pod CPU Burst 能力
复制全文
使用 Pod CPU Burst 能力

容器服务基于 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
    
最近更新时间:2024.12.05 20:04:30
这个页面对您有帮助吗?
有用
有用
无用
无用