长期支持版本

    社区创新版本

      Rubik配置说明

      rubik执行程序由Go语言实现,并编译为静态可执行文件,以便尽可能与系统依赖解耦。

      命令

      Rubik仅支持 使用-v 参数查询版本信息,不支持其他参数。 版本信息输出示例如下所示,该信息中的内容和格式可能随着版本发生变化。

      $ ./rubik -v
      Version:       2.0.1
      Release:       2.oe2403sp1
      Go Version:    go1.22.1
      Git Commit:    bcaace8
      Built:         2024-12-10
      OS/Arch:       linux/amd64
      

      配置

      执行rubik二进制时,rubik首先会解析配置文件,配置文件的路径固定为/var/lib/rubik/config.json

      说明

      1. 为避免配置混乱,暂不支持指定其他路径。
      2. rubik支持以daemonset形式运行在kubernetes集群中。我们提供了yaml脚本(hack/rubik-daemonset.yaml),并定义了ConfigMap作为配置。因此,以daemonset形式运行rubik时,应修改hack/rubik-daemonset.yaml中的相应配置。

      配置文件采用json格式,字段键采用驼峰命名规则,且首字母小写。 配置文件示例内容如下:

      {
        "agent": {
          "logDriver": "stdio",
          "logDir": "/var/log/rubik",
          "logSize": 2048,
          "logLevel": "info",
          "cgroupRoot": "/sys/fs/cgroup",
          "enabledFeatures": [
            "preemption",
            "dynCache",
            "ioLimit",
            "ioCost",
            "quotaBurst",
            "quotaTurbo",
            "psi",
            "cpuevict",
            "memoryevict"
          ]
        },
        "preemption": {
          "resource": [
            "cpu",
            "memory"
          ]
        },
        "quotaTurbo": {
          "highWaterMark": 50,
          "syncInterval": 100
        },
        "dynCache": {
          "defaultLimitMode": "static",
          "adjustInterval": 1000,
          "perfDuration": 1000,
          "l3Percent": {
            "low": 20,
            "mid": 30,
            "high": 50
          },
          "memBandPercent": {
            "low": 10,
            "mid": 30,
            "high": 50
          }
        },
        "ioCost": [
          {
            "nodeName": "k8s-single",
            "config": [
              {
                "dev": "sdb",
                "enable": true,
                "model": "linear",
                "param": {
                  "rbps": 10000000,
                  "rseqiops": 10000000,
                  "rrandiops": 10000000,
                  "wbps": 10000000,
                  "wseqiops": 10000000,
                  "wrandiops": 10000000
                }
              }
            ]
          }
        ],
        "psi": {
          "interval": 10,
          "resource": [
            "cpu",
            "memory",
            "io"
          ],
          "avg10Threshold": 5.0
        },
        "cpuevict": {
          "threshold": 60,
          "interval": 1,
          "windows": 2,
          "cooldown": 20
        },
        "memoryevict": {
          "threshold": 60,
          "interval": 1,
          "cooldown": 4
        }
      }
      

      Rubik配置分为两类:通用配置和特性配置。通用配置由agent关键字标识,用于保存全局的配置。特性配置按服务类型区分,应用于各个子特性。特性配置必须在通用配置的enabledFeatures字段中声明方可使用。

      agent

      agent配置用于记录保存rubik运行的通用配置,例如日志、cgroup挂载点等信息。

      配置键[=默认值]类型描述可选值
      logDriver=stdiostring日志驱动,支持标准输出和文件stdio, file
      logDir=/var/log/rubikstring日志保存目录可读可写的目录
      logSize=1024int日志限额,单位MB,仅logDriver=file生效[10, $2^{20}$]
      logLevel=infostring输出日志级别debug,info,warn,error
      cgroupRoot=/sys/fs/cgroupstring系统cgroup挂载点路径系统cgroup挂载点路径
      enabledFeatures=[]string数组需要使能的rubik特性列表rubik支持特性,参见特性介绍

      preemption

      preemption字段用于标识绝对抢占特性配置。目前,Preemption特性支持CPU和内存的绝对抢占,用户可以按需配置该字段,单独或组合使用资源的绝对抢占。

      配置键[=默认值]类型描述可选值
      resource=[]string数组资源类型,声明何种资源需要被访问cpu, memory

      dynCache

      dynCache字段用于标识支持Pod访存带宽和LLC限制特性配置。l3Percent字段用于标识最后一级缓存(LLC)水位控制线,memBandPercent字段用于标识访存带宽(MB)水位控制线。

      配置键[=默认值]类型描述可选值
      defaultLimitMode=staticstringdynCache的控制模式static, dynamic
      adjustInterval=1000intdynCache动态控制间隔时间,单位ms[10, 10000]
      perfDuration=1000intdynCache性能perf执行时长,单位ms[10, 10000]
      l3PercentmapdynCache控制中L3各级别对应水位(%)/
      .low=20intL3 Cache低水位组控制线[10, 100]
      .mid=30intL3 Cache中水位组控制线[low, 100]
      .high=50intL3 Cache高水位组控制线[mid, 100]
      memBandPercentmapdynCache控制中MB各级别对应水位(%)/
      .low=10intMB(访存带宽)低水位组控制线[10, 100]
      .mid=30intMB中水位组控制线[low, 100]
      .high=50intMB高水位组控制线[mid, 100]

      quotaTurbo

      quotaTurbo字段用于标识支持弹性限流技术(用户态)配置。

      配置键[=默认值]类型描述可选值
      highWaterMark=60intCPU负载的高水位值[0,警戒水位)
      alarmWaterMark=80intCPU负载的警戒水位(高水位,100]
      syncInterval=100int触发容器quota值更新的间隔(单位:毫秒)[100,10000]

      ioCost

      ioCost字段用于标识支持iocost对IO权重控制特性配置。其类型为数组,数组中的每一个元素由节点名称nodeName和设备参数数组config组成。

      配置键类型描述可选值
      nodeNamestring节点名称kubernetes中节点名称
      config数组单个设备的配置信息/

      单个块设备配置config参数:

      配置键[=默认值]类型描述可选值
      devstring块设备名称,仅支持物理设备/
      modelstringiocost模型名linear
      param/设备参数,根据不同模型有不同参数/

      模型为linear时,param字段支持如下参数:

      配置键[=默认值]类型描述可选值
      rbpsint64块设备最大读带宽(0, $2^{63}$)
      rseqiopsint64块设备最大顺序读iop(0, $2^{63}$)
      rrandiopsint64块设备最大随机读iops(0, $2^{63}$)
      wbpsint64块设备最大写带宽(0, $2^{63}$)
      wseqiopsint64块设备最大顺序写iops(0, $2^{63}$)
      wrandiopsint64块设备最大随机写iops(0, $2^{63}$)

      psi

      psi字段用于标识基于psi指标的干扰检测特性配置。目前,psi特性支持监测CPU、内存和I/O资源,用户可以按需配置该字段,单独或组合监测资源的PSI取值。

      配置键[=默认值]类型描述可选值
      interval=10intpsi指标监测间隔(单位:秒)[10,30]
      resource=[]string数组资源类型,声明何种资源需要被访问cpu, memory, io
      avg10Threshold=5.0floatpsi some类型资源平均10s内的压制百分比阈值(单位:%),超过该阈值则驱逐离线业务[5.0,100]

      CPU驱逐水位线控制

      cpuevict字段用于标识CPU驱逐水位线控制特性配置。该特性依照指定采样间隔采集节点CPU利用率,并统计指定窗口内的CPU平均利用率。若CPU平均利用率大于驱逐水位线,则驱逐离线Pod。一旦rubik驱逐离线Pod,则在冷却时间内不再驱逐Pod。

      配置键[=默认值]类型描述可选值
      threshold=60int窗口期内平均CPU利用率的阈值(%),超过该阈值,则驱逐离线Pod[1,99]
      interval=1int节点CPU利用率采集间隔(s)[1, 3600]
      windows=2int节点平均CPU利用率的窗口时间(s)。窗口必须大于interval。若未设置windows,则windows设置为interval的两倍[1, 3600]
      cooldown=20int冷却时间(s),两次驱逐之间至少需要间隔冷却时间[1, 9223372036854775806]

      内存驱逐水位线控制

      memoryevict字段用于标识内存驱逐水位线控制特性配置。该特性依照指定采样间隔采集节点内存利用率。若节点内存利用率大于驱逐水位线,则驱逐离线Pod。一旦rubik驱逐离线Pod,则在冷却时间内不再驱逐Pod。

      配置键[=默认值]类型描述可选值
      thresholdint内存利用率的阈值(%),超过该阈值,则驱逐离线Pod。若不指定该值,则无法使用本功能。[1,99]
      interval=1int节点CPU利用率采集间隔(s)[1, 3600]
      cooldown=4int冷却时间(s),两次驱逐之间至少需要间隔冷却时间[1, 9223372036854775806]

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份