长期支持版本

    社区创新版本

      安装与部署

      概述

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

      软硬件要求

      硬件要求

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

      软件要求

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

      环境准备

      安装 rubik

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

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

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

        sudo yum install -y rubik
        

      说明

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

      部署 rubik

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

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

      部署 rubik daemonset

      1. 构建rubik镜像:使用/var/lib/rubik/build_rubik_image.sh脚本自动构建(内部使用了docker build命令,请确保docker可用)或者直接使用 docker容器引擎构建 rubik 镜像。由于 rubik 以 daemonSet 形式部署,故每一个节点都需要 rubik 镜像。用户可以在一个节点构建镜像后使用 docker save/load 功能将 rubik 镜像 load 到 k8s 的每一个节点,也可以在各节点上都构建一遍 rubik 镜像。以 docker 为例,其构建命令如下:
      docker build -f /var/lib/rubik/Dockerfile -t rubik:2.0.0-1 .
      
      1. 在 k8s master 节点,修改/var/lib/rubik/rubik-daemonset.yaml文件中的 rubik 镜像名,与上一步构建出来的镜像名保持一致。
      ...
      containers:
      - name: rubik-agent
        image: rubik_image_name_and_tag  # 此处镜像名需与上一步构建的 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 | grep rubik
      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 实现。以下介绍几个常见配置,其他配置详见 配置文档

      Pod 绝对抢占特性

      用户在开启了 rubik 绝对抢占特性后,仅需在部署业务 Pod 时在 yaml 中通过 annotation 指定其优先级。部署后 rubik 会自动感知当前节点 Pod 的创建与更新,并根据用户配置的优先级设置 Pod 优先级。对于已经启动的或者更改注解的Pod, rubik 会自动更正Pod的优先级配置。

      ...
        "agent": {
          "enabledFeatures": [
            "preemption"
          ]
        },
        "preemption": {
          "resource": [
            "cpu",
            "memory"
          ]
        }
      ...
      

      优先级配置仅支持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"
      

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

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

      一键搞定!

      问题类型
      规范和低错类

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

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

      ● 英文中包含中文字符;

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

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

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

      易用性

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

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

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

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

      正确性

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

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

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

      ● 代码片段错误;

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

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

      风险提示

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

      内容合规

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

      ● 内容侵权;

      您对文档的总体满意度

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