部署指南

本文档介绍如何将openYuanrong datasystem通过裸进程或者Kubernetes的方式进行部署worker组件。

裸进程部署worker

部署环境准备

openYuanrong datasystem进程部署所需的系统环境依赖如下:

软件名称

版本

作用

openEuler

22.03/24.04

推荐运行openYuanrong datasystem的操作系统

CANN

8.5

运行异构相关特性的依赖库

Python

3.9-3.13

openYuanrong datasystem dscli的使用依赖Python环境

dscli

-

用于部署openYuanrong datasystem的命令行工具

ETCD

3.5

使用 ETCD 集群管理方式时的依赖组件;使用 Coordinator 或 Metastore 时无需部署

SSH互信配置

-

仅多机部署需要,配置SSH互信用于机器间互相访问

下面给出以上依赖的安装方法。

安装CANN(非必须)

CANN的安装依赖Python环境,请确保您在开始安装CANN之前环境中的Python已经就绪。

Ascend官网下载CANN run包,安装 run 包:

chmod +x ./Ascend-cann-toolkit_<version>_linux-<arch>.run
./Ascend-cann-toolkit_<version>_linux-<arch>.run --install --quiet

安装完成后,若显示如下信息,则说明软件安装成功:

Toolkit:  Ascend-cann-toolkit_<version>_linux-<arch> install success

如果用户未指定安装路径,则软件会安装到默认路径下,默认安装路径如下:

用户身份

默认路径

root

/usr/local/Ascend

非 root

$HOME/Ascend

加载环境变量(非 root 示例):

source ${HOME}/Ascend/ascend-toolkit/set_env.sh

安装Python

Python可通过Conda进行安装。

安装Miniconda:

cd /tmp
curl -O https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py311_23.10.0-1-Linux-$(arch).sh
bash Miniconda3-py311_23.10.0-1-Linux-$(arch).sh -b
cd -
. ~/miniconda3/etc/profile.d/conda.sh
conda init bash

安装完成后,可以为Conda设置清华源加速下载,参考此处

创建虚拟环境,以Python 3.11.4为例:

conda create -n openYuanrong-datasystem_py311 python=3.11.4 -y
conda activate openYuanrong-datasystem_py311

可以通过以下命令查看Python版本。

python --version

安装dscli

dscli命令行工具集成在openYuanrong datasystem的wheel包 openyuanrong_datasystem-<version>-cp311-cp311-manylinux_2_34_<arch>.whl中,安装openYuanrong datasystem请参考安装openYuanrong datasystem

安装完成后,运行如下命令:

dscli -h

如果输出dscli帮助文档说明安装成功。

安装并部署ETCD

1. 下载 ETCD 二进制文件

ETCD GitHub Releases 下载最新版本的二进制包:

ETCD_VERSION="v3.5.12"  
wget https://github.com/etcd-io/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gz

2. 解压并安装

tar -xvf etcd-${ETCD_VERSION}-linux-amd64.tar.gz
cd etcd-${ETCD_VERSION}-linux-amd64
# 复制可执行文件到系统路径
sudo cp etcd etcdctl /usr/local/bin/

3. 验证安装

etcd --version
etcdctl version

如果能输出版本号说明安装成功。

4. 部署ETCD

注意: 此章节仅给出了最简单的ETCD部署方式,更多ETCD部署方式请参考ETCD官网部署教程

以部署一个端口号为 2379 的单节点ETCD为例,运行命令如下:

etcd \
  --name etcd-single \
  --data-dir /tmp/etcd-data \
  --listen-client-urls http://0.0.0.0:2379 \
  --advertise-client-urls http://0.0.0.0:2379 \
  --listen-peer-urls http://0.0.0.0:2380 \
  --initial-advertise-peer-urls http://0.0.0.0:2380 \
  --initial-cluster etcd-single=http://0.0.0.0:2380 &

参数说明:

  • –name:节点名称,单机可以随便命名。

  • –data-dir:数据存储目录。

  • –listen-client-urls:监听客户端请求的地址(0.0.0.0 允许所有 IP 访问)。

  • –advertise-client-urls:对外暴露的客户端访问地址。

  • –listen-peer-urls:监听其他 etcd 节点通信的 URL(集群内部端口)。

  • –initial-advertise-peer-urls:向其他节点宣告的访问地址(集群内部通信地址)。

  • –initial-cluster:初始集群成员列表(格式:节点名=节点peerURL)。

部署完成之后通过 etcdctl 命令访问 ETCD 集群验证:

etcdctl --endpoints "127.0.0.1:2379" put key "value"
etcdctl --endpoints "127.0.0.1:2379" get key

命令行操作能正常写入/读取数据说明部署ETCD成功。

安装并部署Coordinator

datasystem_coordinatordscli 随 openYuanrong datasystem 完整发行版安装,无需额外安装第三方协调组件。安装 openYuanrong datasystem 和 dscli 的方法参见安装dscli

Coordinator 支持快速部署和通过配置项部署两种方式。

快速部署

指定 Coordinator 服务地址并启动:

dscli start --coordinator_args --coordinator_address "127.0.0.1:31511"
# [INFO] [  OK  ] Start coordinator service @ 127.0.0.1:31511 success, PID: 38100

输出 OK 说明 Coordinator 部署成功。

通过服务地址停止 Coordinator:

dscli stop --coordinator_address "127.0.0.1:31511"

通过配置项部署

生成配置模板:

dscli generate_config -o ./
# [INFO] Configuration file cluster_config.json has been generated to /home/test/cluster_config.json
# [INFO] Configuration file worker_config.json has been generated to /home/test/worker_config.json
# [INFO] Configuration file coordinator_config.json has been generated to /home/test/coordinator_config.json
# [INFO] Configuration generation completed successfully

按需修改 coordinator_config.json 中的 Coordinator 服务地址:

{
    "coordinator_address": {
        "value": "127.0.0.1:31511"
    }
}

使用配置文件启动 Coordinator:

dscli start --coordinator_config_path ./coordinator_config.json
# [INFO] [  OK  ] Start coordinator service @ 127.0.0.1:31511 success, PID: 38100

输出 OK 说明 Coordinator 部署成功。

使用同一配置文件停止 Coordinator:

dscli stop --config_path ./coordinator_config.json

Coordinator 的完整启停方式和配置项说明参见 使用Coordinator部署Coordinator配置项

Coordinator 多节点部署

如需部署多个 Coordinator 并启用 Raft 选主,使用 coordinator_raft_initial_peers 配置静态初始成员列表。该参数为空时,Coordinator 按单节点无选主模式启动;配置多个 host:port 成员时,各 Coordinator 节点必须使用相同的 peers 列表、本机唯一的 coordinator_address,并为 coordinator_raft_data_dir 配置节点独占的本地目录。首次启动多个 Coordinator 时,应并发或近同时启动各节点,避免只启动单个节点后长时间等待。详细三节点示例参见 Coordinator 多节点部署

SSH互信配置

SSH互信可以让服务器之间无需密码即可登录,多机集群部署必须配置SSH互信,步骤如下:

1. 安装SSH服务

确保所有需要配置互信的服务器上都已经安装并运行了SSH服务:

sudo yum install openssh-server     
sudo systemctl start sshd
sudo systemctl enable sshd

2. 生成SSH密钥对(在所有节点上执行)

ssh-keygen -t rsa -b 4096

按Enter接受默认位置(~/.ssh/id_rsa),然后设置空密码(直接按Enter两次)。

3. 将公钥复制到所有节点

在主节点上查看公钥:

cat ~/.ssh/id_rsa.pub

将显示的公钥内容添加到所有节点的~/.ssh/authorized_keys文件中:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
echo "公钥内容" >> ~/.ssh/authorized_keys

4. 测试SSH互信

从一个节点尝试SSH到其他节点,不需要输入密码:

ssh username@hostname

当无需密码能够正常跳转到其他节点时说明SSH互信配置成功。

集群部署

本节介绍 Worker 对接 ETCD 或 Coordinator 的单机和多机部署方式。部署 Worker 前,需要先准备且仅准备一种集群管理后端:

Worker 的 coordinator_addressetcd_addressmetastore_address 必须且只能配置一个;本节仅介绍对接 ETCD 和 Coordinator 的部署方式。

单机部署

单机部署支持快速部署和通过配置项部署两种方式。

快速部署
  • 对接 ETCD

    dscli start --worker_args --worker_address "127.0.0.1:31501" --etcd_address "127.0.0.1:2379"
    # [INFO] [  OK  ] Start worker service @ 127.0.0.1:31501 success, PID: 38100
    
  • 对接 Coordinator

    dscli start --worker_args --worker_address "127.0.0.1:31501" --coordinator_address "127.0.0.1:31511"
    # [INFO] [  OK  ] Start worker service @ 127.0.0.1:31501 success, PID: 38100
    

输出 OK 说明 Worker 部署成功。更多快速部署方式参见 dscli 的 ETCD部署Coordinator部署章节。

通过配置项部署

生成配置模板:

dscli generate_config -o ./
# [INFO] Configuration file cluster_config.json has been generated to /home/test/cluster_config.json
# [INFO] Configuration file worker_config.json has been generated to /home/test/worker_config.json
# [INFO] Configuration file coordinator_config.json has been generated to /home/test/coordinator_config.json
# [INFO] Configuration generation completed successfully

根据集群管理后端修改 worker_config.json,并确保另外两个后端地址为空。

  • 对接 ETCD

    {
        "etcd_address": {
            "value": "127.0.0.1:2379"
        }
    }
    
  • 对接 Coordinator

    {
        "coordinator_address": {
            "value": "127.0.0.1:31511"
        }
    }
    

配置完成后,启动 Worker:

dscli start --worker_config_path ./worker_config.json
# [INFO] [  OK  ] Start worker service @ 127.0.0.1:31501 success, PID: 38100

输出 OK 说明 Worker 部署成功。更多配置项部署方式参见 dscli 的 ETCD部署Coordinator部署章节。

多机部署

在当前目录生成 cluster_config.jsonworker_config.jsoncoordinator_config.json

dscli generate_config -o ./
# [INFO] Configuration file cluster_config.json has been generated to /home/test/cluster_config.json
# [INFO] Configuration file worker_config.json has been generated to /home/test/worker_config.json
# [INFO] Configuration file coordinator_config.json has been generated to /home/test/coordinator_config.json
# [INFO] Configuration generation completed successfully

编辑 cluster_config.json

{
    // ssh互信
    "ssh_auth": {
        "ssh_private_key": "~/.ssh/id_rsa",
        "ssh_user_name": "test_user"
    },
    // Worker配置文件,在第一步生成
    "worker_config_path": "./worker_config.json",
    "worker_nodes": [
        "127.0.0.1",
        "127.0.0.2"
    ],
    "worker_port": 31501
}

根据集群管理后端修改 worker_config.json,该配置会应用到所有 Worker。

  • 对接 ETCD

    {
        "etcd_address": {
            "value": "127.0.0.1:2379"
        }
    }
    
  • 对接 Coordinator

    {
        "coordinator_address": {
            "value": "127.0.0.1:31511"
        }
    }
    

确保另外两个后端地址为空,然后部署 Worker 集群:

dscli up -f ./cluster_config.json
# [INFO] Start worker service @ 127.0.0.1:31501 success.
# [INFO] Start worker service @ 127.0.0.2:31501 success.

当输出如上信息时,说明 Worker 集群部署成功。

注意事项:

  • 对接 Coordinator 时,本节只部署 Worker,不会启动 Coordinator。请提前按照安装并部署Coordinator完成 Coordinator 部署。

  • 多机集群部署依赖节点间的 SSH 互信,具体操作参见SSH互信配置

  • 所有部署节点都需要安装 dscli,安装方法参见安装dscli

更多配置项部署方式参见 dscli 的 ETCD部署Coordinator部署章节。

快速验证

Python 脚本快速验证:

from yr.datasystem.ds_client import DsClient

client = DsClient("127.0.0.1", 31501)
client.init()

当脚本执行未发生异常时说明openYuanrong datasystem的客户端能正常连接上当前节点的ds-worker,部署成功。

集群卸载

单机卸载

单机集群卸载有两种方式:快速卸载以及通过配置项卸载

  • 卸载快速部署的集群

    # 卸载指定ds-worker IP的集群
    dscli stop --worker_address "127.0.0.1:31501"
    # [INFO] [  OK  ] Stop worker service @ 127.0.0.1:31501 normally, PID: 38100
    

    当命令输出的日志为OK时说明卸载成功。

  • 卸载配置项部署的集群

    # 卸载使用配置项部署的集群
    dscli stop --config_path ./worker_config.json
    # [INFO] [  OK  ] Stop worker service @ 127.0.0.1:31501 normally, PID: 38100
    

    输出OK说明卸载成功。

多机卸载

dscli down -f ./cluster_config.json                     
# [INFO] Stop worker service @ 127.0.0.1:31501 success.
# [INFO] Stop worker service @ 127.0.0.2:31501 success.

当输出如上信息时说明集群卸载成功。

Kubernetes部署worker

部署环境准备

openYuanrong datasystem Kubernetes部署所需的依赖如下:

软件名称

推荐版本

作用

openEuler

22.03

支持运行Kubernetes与Docker的操作系统

kubectl

-

Kubernetes命令行工具,用于与Kubernetes集群交互

Kubernetes

-

Kubernetes集群,用于编排和管理openYuanrong datasystem的容器

Helm

-

支持openYuanrong datasystem Kubernetes工程化部署的核心工具

Docker

-

提供容器化平台,支持openYuanrong datasystem容器化部署和运行

ETCD

3.5

openYuanrong datasystem集群管理依赖组件

openYuanrong datasystem镜像

-

openYuanrong datasystem服务端组件镜像

openYuanrong datasystem helm chart

-

openYuanrong datasystem helm chart包

下面给出以上软件的获取及安装方法。

安装kubectl

安装详情请参考官方文档:Install and Set Up kubectl on Linux

安装Kubernetes

安装详情请参考官方文档:使用部署工具安装 Kubernetes

安装Helm

安装详情请参考官方文档:Installing Helm

安装Docker

安装详情请参考官方文档:Install Docker Engine

安装并部署ETCD

安装详情请参考 安装并部署ETCD 章节。

获取openYuanrong datasystem镜像

  • 源码编译构建镜像

    如果需要从源码构建镜像,需要先完成 源码编译。源码编译完成之后执行如下命令:

    cd yuanrong-datasystem/k8s/docker
    bash docker_build.sh \
        -b <base_image_name>:<base_image_tag> \
        -n <image_name> \
        -t <image_tag>
    

    参数说明:

    • base_image_name: 基础镜像名

    • base_image_tag: 基础镜像Tag

    • image_name: 生成的镜像名

    • image_tag: 生成的镜像Tag

    执行完成之后会在yuanrong-datasystem/k8s/docker目录下生成一个build目录,build目录中会生成一个 datasystem.tar 文件,即为镜像压缩文件;与此同时本地的docker仓库中也会保存 <image_name>:<image_tag> 的镜像。

获取openYuanrong datasystem helm chart包

  • 通过 dscli 命令行工具获取:

    dscli generate_helm_chart -o /tmp
    

    请注意命令运行成功后会在”/tmp”目录下生成helm chart目录。

  • 通过源码获取:

    git clone -b ${version} https://gitcode.com/openeuler/yuanrong-datasystem.git
    cp -r yuanrong-datasystem/docker/chart/datasystem /tmp
    

集群部署

openYuanrong datasystem通过 /tmp/datasystem/values.yaml 文件进行集群相关配置,其中必配项如下:

global:
  # 其他配置项...

  # 镜像仓地址,不涉及可以留空
  imageRegistry: ""
  # 镜像名字和镜像tag,<VERSION>需要替换为对应的版本号
  images:
    datasystem: "openyuanrong-datasystem:0.5.0"
  # ETCD相关配置
  etcd:
    etcdAddress: "127.0.0.1:2379"

注意事项:

  • 镜像仓地址与镜像名称获取请参考:[获取openYuanrong datasystem镜像](#获取openYuanrong datasystem镜像)。

  • ETCD集群的部署与IP地址获取请参考:安装并部署ETCD

配置完成后,通过 helm 命令即可轻松完成部署,命令如下:

helm install yr_datasystem /tmp/datasystem
# NAME: yr_datasystem
# LAST DEPLOYED: Tue Apr 22 14:31:34 2025
# NAMESPACE: default
# STATUS: deployed
# REVISION: 1
# TEST SUITE: None

部署后可以通过 kubectl 命令查看集群状态:

kubectl get pods -o wide
# NAME                   READY   STATUS       RESTARTS      AGE    IP           NODE 
# ...
# ds-worker-5cw42        1/1     Running      1 (2s ago)    13s   127.0.0.1   Running
# ds-worker-4wv63        1/1     Running      1 (10s ago)   23s   127.0.0.2   Running

当Pod处于Running状态时说明Pod处于就绪状态,可以正常对外提供服务,部署成功。

更多部署参数配置请参考:Kubernetes配置项

快速验证

openYuanrong datasystem会默认以DaemonSet的方式在每个节点都部署一个 ds-worker Pod,默认监听 <主机IP>:31501,可通过如下 Python 脚本快速验证:

from yr.datasystem.ds_client import DsClient

client = DsClient("127.0.0.1", 31501)
client.init()

当脚本执行未发生异常时说明openYuanrong datasystem的客户端能正常连接上当前节点的 ds-worker Pod,部署成功。

集群卸载

集群通过 helm 命令即可轻松完成卸载,卸载命令如下:

helm uninstall yr_datasystem

执行完命令后通过 kubectl 命令再次查看集群状态:

kubectl get pods -o wide
# NAME                   READY   STATUS       RESTARTS      AGE    IP           NODE 
# Pod列表中不存在ds-worker Pod

当openYuanrong datasystem所有的ds-worker Pod都退出时说明集群卸载成功。