安装与部署
概述
本章节主要介绍 rubik 组件的安装以及部署方式。
软硬件要求
硬件要求
- 当前仅支持 x86、aarch64 架构。
- rubik 磁盘使用需求:配额 1GB 及以上。
- rubik 内存使用需求:配额 100MB 及以上。
软件要求
- 操作系统:openEuler 22.03-LTS-SP1。
- 内核:openEuler 22.03-LTS-SP1 版本内核。
环境准备
- 安装 openEuler 系统,安装方法参考《openEuler 22.03-LTS-SP1 安装指南》。
- 安装并部署 kubernetes,安装及部署方法参考《Kubernetes 集群部署指南》。
- 安装 docker 或 isulad 容器引擎,若采用 isulad 容器引擎,需同时安装 isula-build 容器镜像构建工具。
安装 rubik
rubik 以DaemonSet
形式部署在 k8s 的每一个节点上,故需要在每一个节点上使用以下步骤安装 rubik rpm 包。
配置 yum 源:openEuler 22.03-LTS-SP1 和 openEuler 22.03-LTS-SP1:EPOL(rubik 组件当前仅在 EPOL 源中),参考如下:
# openEuler 22.03-LTS-SP1 官方发布源 name=openEuler22.03-LTS-SP1 baseurl=https://repo.openeuler.org/openEuler-22.03-LTS-SP1/everything/$basearch/ enabled=1 gpgcheck=1 gpgkey=https://repo.openeuler.org/openEuler-22.03-LTS-SP1/everything/$basearch/RPM-GPG-KEY-openEuler
# openEuler 22.03-LTS-SP1:Epol 官方发布源 name=openEuler22.03-LTS-SP1-Epol baseurl=https://repo.openeuler.org/openEuler-22.03-LTS-SP1/EPOL/$basearch/ enabled=1 gpgcheck=1 gpgkey=https://repo.openeuler.org/openEuler-22.03-LTS-SP1/everything/$basearch/RPM-GPG-KEY-openEuler
使用 root 权限安装 rubik:
sudo yum install -y rubik
说明:
rubik 工具相关文件会安装在/var/lib/rubik 目录下
部署 rubik
rubik 以容器形式运行在混合部署场景下的 k8s 集群中,用于对不同优先级业务进行资源隔离和限制,避免离线业务对在线业务产生干扰,在提高资源总体利用率的同时保障在线业务的服务质量。当前 rubik 支持对 CPU、内存资源进行隔离和限制等特性,需配合 openEuler 22.03-LTS-SP1 版本的内核使用。若用户想要开启内存优先级特性(即针对不同优先级业务实现内存资源的分级),需要通过设置 /proc/sys/vm/memcg_qos_enable 开关,有效值为 0 和 1,其中 0 为默认值表示关闭特性,1 表示开启特性。
sudo echo 1 > /proc/sys/vm/memcg_qos_enable
部署 rubik daemonset
- 使用 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:1.0.0 .
- 在 k8s master 节点,修改
/var/lib/rubik/rubik-daemonset.yaml
文件中的 rubik 镜像名,与上一步构建出来的镜像名保持一致。
...
containers:
- name: rubik-agent
image: rubik_image_name_and_tag # 此处镜像名需与上一步构建的 rubik 镜像名一致
imagePullPolicy: IfNotPresent
...
- 在 k8s master 节点,使用 kubectl 命令部署 rubik daemonset,rubik 会自动被部署在 k8s 的所有节点:
kubectl apply -f /var/lib/rubik/rubik-daemonset.yaml
- 使用
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 之后,使用
/var/lib/rubik/build_rubik_image.sh
脚本自动构建 rubik 容器镜像。运行此文件需要用户提前安装docker
组件。
常用配置说明
通过以上方式部署的 rubik 将以默认配置启动,用户可以根据实际需要修改 rubik 配置,可通过修改 rubik-daemonset.yaml 文件中的 config.json 段落内容后重新部署 rubik daemonset 实现。以下介绍几个常见配置,其他配置详见 配置文档。
Pod 优先级自动配置
rubik 开启了 Pod 自动感知配置功能,用户仅需在部署业务 Pod 时在 yaml 中通过 annotation 指定其优先级,部署后 rubik 会自动感知当前节点 Pod 的创建与更新,并根据用户配置的优先级设置 Pod 优先级。
支持自动校对 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"