全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:容器L3 Cache及内存带宽隔离

更新时间:Apr 11, 2024

Kubernetes支持将多种类型的应用以容器化的方式部署在同一台宿主机上运行,不同优先级的应用会共享宿主机的三级缓存L3 Cache(Last Level Cache)和内存带宽MBA(Memory Bandwidth Allocation)。ack-koordinator提供了对L3 Cache及内存带宽的隔离能力,避免在资源竞争时影响高优先级应用的服务质量。本文介绍如何控制不同优先级应用使用L3 Cache和MBA隔离策略。

背景信息

为了充分利用机器中的资源,通常会将高优先延迟敏感性LS(Latency-Sensitive)和低优先级BE(Best-Effort)的任务部署在同一台机器上,导致两种不同优先级任务之间存在资源竞争问题。如果不进行隔离控制,不同优先级的任务在使用L3 cache和MBA内存带宽等资源时可能会出现资源竞争,从而无法保证给LS业务分配足够的资源,导致LS应用的服务质量受到影响。

RDT(Resource Director Technology)提供了对不同优先级应用的资源隔离能力,通过限制BE类型应用对L3 Cache和MBA资源的使用量,可以有效保障混合部署场景中LS应用的服务质量。关于RDT的更多信息,请参见resource-director-technology

前提条件

费用说明

ack-koordinator组件本身的安装和使用是免费的,不过需要注意的是,在以下场景中可能产生额外的费用:

  • ack-koordinator是非托管组件,安装后将占用Worker节点资源。您可以在安装组件时配置各模块的资源申请量。

  • ack-koordinator默认会将资源画像、精细化调度等功能的监控指标以Prometheus的格式对外透出。若您配置组件时开启了ACK-Koordinator开启Prometheus监控指标选项并使用了阿里云Prometheus服务,这些指标将被视为自定义指标并产生相应费用。具体费用取决于您的集群规模和应用数量等因素。建议您在启用此功能前,仔细阅读阿里云Prometheus计费说明,了解自定义指标的免费额度和收费策略。您可以通过账单和用量查询,监控和管理您的资源使用情况。

准备工作

在使用容器L3 Cache及内存带宽隔离功能前,您需要确保已开启内核RDT能力。查看及开启内核RDT能力的具体操作步骤如下:

  1. 执行以下命令,查看内核RDT能力是否开启。

    cat /proc/cmdline

    预期输出:

    #其他内容已省略,本示例仅显示BOOT_IMAGE字段的RDT部分。
    BOOT_IMAGE=... rdt=cmt,l3cat,l3cdp,mba

    若输出内容中包含l3catmba选项,表示内核RDT能力已开启;若不包含,请执行下一步操作。

  2. 开启内核RDT能力。

    1. 编辑/etc/default/grub文件。

      GRUB_CMDLINE_LINUX字段增加RDT相关配置。

      #其他内容已省略,本示例仅显示GRUB_CMDLINE_LINUX字段的RDT部分。
      GRUB_CMDLINE_LINUX="... rdt=cmt,mbmtotal,mbmlocal,l3cat,l3cdp,mba" 
      重要

      新增的RDT配置与其他部分请使用空格符进行分隔。

    2. 执行以下命令,生成新版本grub.cfg文件。

      #文件路径以实际情况为准。
      sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    3. 执行以下命令,重启节点。

      sudo systemctl reboot

操作步骤

内核RDT能力开启后,使用L3 Cache及MBA隔离功能的具体步骤如下:

  1. 使用以下YAML内容,创建configmap.yaml文件。

    enabletrue表示开启对BE类型Pod的L3 Cache及MBA隔离机制。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ack-slo-config
      namespace: kube-system
    data:
      resource-qos-config: |
        {
          "clusterStrategy": {
            "beClass": {
              "resctrlQOS": {
                "enable": true
              }
            }
          }
        }
  2. 查看命名空间kube-system下是否存在ConfigMap ack-slo-config

    • 若存在ConfigMap ack-slo-config,请使用PATCH方式进行更新,避免干扰ConfigMap中其他配置项。

      kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"
    • 若不存在ConfigMap ack-slo-config,请执行以下命令创建ConfigMap。

      kubectl apply -f configmap.yaml
  3. 使用以下YAML内容,创建pod-demo.yaml文件。

    指定Pod的QoS级别为BE,约束Pod对L3 Cache及MBA资源的使用。

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-demo
      labels:
        koordinator.sh/qosClass: 'BE'
    spec:
      containers:
      - name: pod-demo
        image: polinux/stress
        resources:
          requests:
            cpu: 1
            memory: "50Mi"
          limits:
            cpu: 1
            memory: "1Gi"
        command: ["stress"]
        args: ["--vm", "1", "--vm-bytes", "256M", "-c", "2", "--vm-hang", "1"]
  4. 执行以下命令,将pod-demo部署到集群中。

    kubectl apply -f pod-demo.yaml
  5. 使用以下YAML内容,配置高级参数。

    L3 Cache及MBA的隔离能力支持按照QoS等级进行精细化配置。

    #ConfigMap ack-slo-config样例。
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ack-slo-config
      namespace: kube-system
    data:
      resource-qos-config: |
        {
          "clusterStrategy": {
            "lsClass": {
              "resctrlQOS": {
                "enable": true,
                "catRangeEndPercent": 100,
                "mbaPercent": 100
              }
            },
            "beClass": {
              "resctrlQOS": {
                "enable": true,
                "catRangeEndPercent": 30,
                "mbaPercent": 100
              }
            }
          }
        }

    部分参数说明如下:

    参数

    类型

    取值范围

    说明

    enable

    Boolean

    • true

    • false

    • true:表示集群开启L3 Cache及MBA的隔离能力。

    • false:表示集群关闭L3 Cache及MBA的隔离能力。

    catRangeEndPercent

    Int

    0~100

    单位为百分比,表示对应QoS可以使用的L3 Cache比例。LS等级默认值为100,BE等级默认值为30

    mbaPercent

    Int

    0~100

    单位为百分比,表示对应QoS可以使用的内存带宽比例。当前MBA只支持以10%的粒度进行调节,LS等级和BE等级的默认值均为100