长期支持版本

    社区创新版本

      安装与部署

      概述

      本章节主要介绍rubik组件的安装以及部署方式。

      软硬件要求

      硬件要求

      • 当前仅支持 x86、aarch64架构。
      • rubik磁盘使用需求:配额1GB及以上。
      • rubik内存使用需求:配额100MB及以上。

      软件要求

      • 操作系统:openEuler 22.03-LTS。
      • 内核:openEuler 22.03-LTS版本内核。

      环境准备

      安装rubik

      rubik以k8s daemonSet形式部署在k8s的每一个节点上,故需要在每一个节点上使用以下步骤安装rubik rpm包。

      1. 配置 yum 源:openEuler 22.03-LTS 和 openEuler 22.03-LTS:EPOL(rubik组件当前仅在EPOL源中),参考如下:

        # openEuler 22.03-LTS 官方发布源
        name=openEuler22.03
        baseurl=https://repo.openeuler.org/openEuler-22.03-LTS/everything/$basearch/ 
        enabled=1
        gpgcheck=1
        gpgkey=https://repo.openeuler.org/openEuler-22.03-LTS/everything/$basearch/RPM-GPG-KEY-openEuler
        
        # openEuler 22.03-LTS:Epol 官方发布源
        name=Epol
        baseurl=https://repo.openeuler.org/openEuler-22.03-LTS/EPOL/$basearch/
        enabled=1
        gpgcheck=0
        
      2. 使用root权限安装rubik:

        sudo yum install -y rubik
        

      说明

      rubik工具相关文件会安装在/var/lib/rubik目录下。

      部署rubik

      rubik以容器形式运行在混合部署场景下的k8s集群中,用于对不同优先级业务进行资源隔离和限制,避免离线业务对在线业务产生干扰,在提高资源总体利用率的同时保障在线业务的服务质量。当前rubik支持对CPU、内存资源进行隔离和限制,需配合openEuler 22.03-LTS版本的内核使用。若用户想要开启内存优先级特性(即针对不同优先级业务实现内存资源的分级),需要通过设置/proc/sys/vm/memcg_qos_enable开关,有效值为0和1,其中0为默认值表示关闭特性,1表示开启特性。

      sudo echo 1 > /proc/sys/vm/memcg_qos_enable
      

      部署rubik daemonset

      1. 使用docker或isula-build容器引擎构建rubik镜像,由于rubik以daemonSet形式部署,故每一个节点都需要rubik镜像。用户可以在一个节点构建镜像后使用docker save/load功能将rubik镜像load到k8s的每一个节点,也可以在各节点上都构建一遍rubik镜像。以isula-build为例,参考命令如下:
      isula-build ctr-img build -f /var/lib/rubik/Dockerfile --tag rubik:0.1.0 .
      
      1. 在k8s master节点,修改/var/lib/rubik/rubik-daemonset.yaml文件中的rubik镜像名,与上一步构建出来的镜像名保持一致。
      ...
      containers:
      - name: rubik-agent
        image: rubik:0.1.0  # 此处镜像名需与上一步构建的rubik镜像名一致
        imagePullPolicy: IfNotPresent
      ...
      
      1. 在k8s master节点,使用kubectl命令部署rubik daemonset,rubik会自动被部署在k8s的所有节点:
      kubectl apply -f /var/lib/rubik/rubik-daemonset.yaml
      
      1. 使用kubectl get pods -A命令查看rubik是否已部署到集群每一个节点上(rubik-agent数量与节点数量相同且均为Running状态)。
      [root@localhost rubik]# kubectl get pods -A
      NAMESPACE     NAME                                            READY   STATUS    RESTARTS   AGE
      ...
      kube-system   rubik-agent-76ft6                               1/1     Running   0          4s
      ...
      

      常用配置说明

      通过以上方式部署的rubik将以默认配置启动,用户可以根据实际需要修改rubik配置,可通过修改rubik-daemonset.yaml文件中的config.json段落内容后重新部署rubik daemonset实现。

      本章介绍 config.json 的常用配置,以方便用户根据需要进行配置。

      配置项说明

      # 该部分配置内容位于rubik-daemonset.yaml文件中的config.json段落
      {
          "autoConfig": true,
          "autoCheck": false,
          "logDriver": "stdio",
          "logDir": "/var/log/rubik",
          "logSize": 1024,
          "logLevel": "info",
          "cgroupRoot": "/sys/fs/cgroup"
      }
      
      配置项配置值类型配置取值范围配置含义
      autoConfigbooltrue、falsetrue:开启Pod自动感知功能。
      false:关闭 Pod 自动感知功能。
      autoCheckbooltrue、falsetrue:开启 Pod 优先级校验功能。
      false:关闭 Pod 优先级校验功能。
      logDriverstringstdio、filestdio:直接向标准输出打印日志,日志收集和转储由调度平台完成。
      file:将文件打印到日志目录,路径由logDir指定。
      logDirstring绝对路径指定日志存放的目录路径。
      logSizeint[10,1048576]指定日志存储总大小,单位 MB,若日志总量达到上限则最早的日志会被丢弃。
      logLevelstringerror、info、debug指定日志级别。
      cgroupRootstring绝对路径指定 cgroup 挂载点。

      Pod优先级自动配置

      若在rubik config中配置autoConfig为true开启了Pod自动感知配置功能,用户仅需在部署业务pod时在yaml中通过annotation指定其优先级,部署后rubik会自动感知当前节点pod的创建与更新,并根据用户配置的优先级设置pod优先级。

      依赖于kubelet的Pod优先级配置

      由于Pod优先级自动配置依赖于来自api-server pod创建事件的通知,具有一定的延迟性,无法在进程启动之前及时完成Pod优先级的配置,导致业务性能可能存在抖动。用户可以关闭优先级自动配置选项,通过修改kubelet源码,在容器cgroup创建后、容器进程启动前调用rubik http接口配置pod优先级,http接口具体使用方法详见http接口文档

      支持自动校对Pod优先级

      rubik支持在启动时对当前节点Pod QoS优先级配置进行一致性校对,此处的一致性是指k8s集群中的配置和rubik对pod优先级的配置之间的一致性。该校对功能默认关闭,用户可以通过 autoCheck 选项控制是否开启。若开启该校对功能,启动或者重启 rubik 时,rubik会自动校验并更正当前节点pod优先级配置。

      在离线业务配置示例

      rubik部署成功后,用户在部署实际业务时,可以根据以下配置示例对业务yaml文件进行修改,指定业务的在离线类型,rubik即可在业务部署后对其优先级进行配置,从而达到资源隔离的目的。

      以下为部署一个nginx在线业务的示例:

      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
        namespace: qosexample
        annotations:
          volcano.sh/preemptable: "false"   # volcano.sh/preemptable为true代表业务为离线业务,false代表业务为在线业务,默认为false
      spec:
        containers:
        - name: nginx
          image: nginx
          resources:
            limits:
              memory: "200Mi"
              cpu: "1"
            requests:
              memory: "200Mi"
              cpu: "1"
      

      约束限制

      • rubik接受HTTP请求并发量上限1000QPS,并发量超过上限则报错。

      • rubik接受的单个请求中pod上限为100个,pod数量越界则报错。

      • 每个k8s节点只能部署一个rubik,多个rubik会冲突。

      • rubik不提供端口访问,只能通过socket通信。

      • rubik只接收合法http请求路径及网络协议:http://localhost/(POST)、http://localhost/ping(GET)、http://localhost/version(GET)。各http请求的功能详见http接口文档

      • rubik磁盘使用需求:配额1GB及以上。

      • rubik内存使用需求:配额100MB及以上。

      • 禁止将业务从低优先级(离线业务)往高优先级(在线业务)切换。如业务A先被设置为离线业务,接着请求设置为在线业务,rubik报错。

      • 容器挂载目录时,rubik本地套接字/run/rubik的目录权限需由业务侧保证最小权限700。

      • rubik服务端可用时,单个请求超时时间为120s。如果rubik进程进入T(暂停状态或跟踪状态)、D状态(不可中断的睡眠状态),则服务端不可用,此时rubik服务不会响应任何请求。为了避免此情况的发生,请在客户端设置超时时间,避免无限等待。

      • 使用混部后,原始的cgroup cpu share功能存在限制。具体表现为:

        若当前CPU中同时有在线任务和离线任务运行,则离线任务的CPU share配置无法生效。

        若当前CPU中只有在线任务或只有离线任务,CPU share能生效。

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

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

      一键搞定!

      问题类型
      规范和低错类

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

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

      ● 英文中包含中文字符;

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

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

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

      易用性

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

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

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

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

      正确性

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

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

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

      ● 代码片段错误;

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

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

      风险提示

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

      内容合规

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

      ● 内容侵权;

      您对文档的总体满意度

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