Crane 后端环境配置 - Ubuntu
1. 环境准备
1.1 更新镜像源
最好将镜像源更换到国内
apt update && apt upgrade -y
1.2 安装证书
apt install ca-certificates -y
1.3 启用时间同步
apt install -y chrony
systemctl restart systemd-timedated
timedatectl set-timezone Asia/Shanghai
timedatectl set-ntp true
1.4 关闭防火墙
systemctl stop ufw
systemctl disable ufw
若集群不允许关闭防火墙,则考虑开放 10010、10011、10012、873 端口。
ufw allow 10012
ufw allow 10011
ufw allow 10010
ufw allow 873
注意:若有多个节点,需在每个节点上执行此步骤,否则无法进行节点间的通信。
2.安装项目依赖
apt install -y \
libcgroup-dev \
libssl-dev \
libcurl-dev \
libpam-dev \
zlib1g-dev \
libaio-dev \
pkg-config \
ninja \
libelf-dev \
bcc \
linux-headers-$(uname -r)
wget https://github.com/libbpf/libbpf/archive/refs/tags/v1.4.6.zip
unzip v1.4.6.zip
cd libbpf-1.4.6/src
make
make install
3. 安装工具链
工具链版本需符合以下要求:
2. 安装cmake
Ubuntu 20.04 / 22.04: 从 GitHub 下载安装脚本
wget https://github.com/Kitware/CMake/releases/download/v3.26.4/cmake-3.26.4-linux-x86_64.sh
bash cmake-3.26.4-linux-x86_64.sh --prefix=/usr/local --skip-license
Ubuntu 24.04: 使用包管理器安装
apt install -y cmake
检查 cmake 安装情况
cmake --version
3.安装新版 Clang
wget https://apt.llvm.org/llvm.sh
bash ./llvm.sh 19
4. 安装和配置 MongoDB
此步骤仅在存储节点(控制节点)进行,其他节点不需要安装数据库。
4.1 安装 MongoDB
安装 MongoDB 并添加开机启动
apt install -y mongodb-org
systemctl enable mongod
systemctl start mongod
安装完mongod用户的home目录为/var/lib/mongo
利用openssl在/var/lib/mongo生成密钥文件
openssl rand -base64 756 | sudo -u mongod tee /var/lib/mongo/mongo.key
sudo -u mongod chmod 400 /var/lib/mongo/mongo.key
4.2 配置 MongoDB
1. 在数据库中创建用户
mongosh
use admin
db.createUser({
user: 'admin', pwd: '123456', roles: [{ role: 'root', db: 'admin' }]
})
db.shutdownServer()
quit
2. 开启权限验证,并配置副本集
打开 /etc/mongod.conf 配置文件,找到 security 和 replication 部分,进行如下修改:
vim /etc/mongod.conf
security:
authorization: enabled
keyFile: /var/lib/mongo/mongo.key
replication:
replSetName: crane_rs
重启 MongoDB 使配置生效
systemctl restart mongod
3. 初始化副本集
mongosh
use admin
db.auth("admin","123456")
config = {
"_id": "crane_rs",
"members": [
{
"_id": 0,
"host": "<hostname>:27017"
}
]
rs.initiate()
5. 安装和配置 CraneSched
编译Crane程序
git config --global http.proxy http://crane:hf2lH9UUC3E0@192.168.1.1:7890
git config --global https.proxy http://crane:hf2lH9UUC3E0@192.168.1.1:7890
git clone https://github.com/PKUHPC/Crane.git
cd Crane
mkdir build
cd build
cmake -G Ninja -DCMAKE_CXX_COMPILER=/usr/bin/clang++-17 -DCMAKE_C_COMPILER=/usr/bin/clang-17 ..
cmake --build . --target cranectld craned pam_crane
ninja install
注意:如果拉取仓库或依赖时出错,请使用代理
6. 运行项目
首先根据自身的集群情况在配置文件当中进行相应配置,配置文件样例保存在etc/crane/config.yaml.example
mkdir -p /etc/crane
cp CraneSched安装路径/etc/config.yaml.example /etc/crane/config.yaml
cp CraneSched安装路径/etc/config.yaml /etc/crane/
cp CraneSched安装路径/build/src/Misc/BPF/cgroup_dev_bpf.o /etc/crane/cgroup_dev_bpf.o
sudo cp etc/database.yaml /etc/crane/
在 /etc/crane/config.yaml 中配置节点信息、调度偏好等选项(需所有节点保持一致)请根据集群实际情况填写。例如,一个四节点的集群中,控制节点的主机名为 crane01,计算节点的主机名为 crane01、crane02、crane03、crane04,则如下填写:
vim /etc/crane/config.yaml
ControlMachine: crane01
Nodes:
- name: "crane[01-04]"
cpu: 2
memory: 2G
Partitions:
- name: CPU
nodes: "crane[01-02]"
priority: 5
- name: GPU
nodes: "crane[03-04]"
priority: 3
DefaultMemPerCpu: 0
MaxMemPerCpu: 0
DefaultPartition: CPU
3. 在 /etc/crane/database.yaml 中配置数据库信息(只需在控制节点配置)
CraneEmbeddedDbBackend: Unqlite
CraneCtldDbPath: cranectld/embedded.db
DbUser: admin
DbPassword: "123456"
DbHost: localhost
DbPort: 27017
DbReplSetName: crane_rs
DbName: crane_db
6. 启动 CraneSched
可直接在前台启动 CraneSched(控制节点启动 CraneCtld,其他节点按需要启动 Craned)
cd build/src
CraneCtld/cranectld
Craned/craned
可通过 Systemd 在后台运行 CraneSched,并设置开机启动
systemctl enable cranectld
systemctl start cranectld
systemctl enable craned
systemctl start craned
7. 可能遇到的问题
7.1 libbpf
error while loading shared libraries: libbpf.so.1: cannot open shared object file: No such file or directory
find /usr/lib -name "libbpf*"
find /usr -name "libbpf*"
ln -s /usr/lib64/libbpf* /usr/lib/
7.2 BPF 文件系统挂载
libbpf: specified path /sys/fs/bpf/dev_map is not on BPF FS
libbpf: map 'dev_map': failed to auto-pin at '/sys/fs/bpf/dev_map': -22
libbpf: map 'dev_map': failed to create: Invalid argument(-22)
libbpf: failed to load object 'cgroup_dev_bpf.o'
Failed to load BPF object
mount | grep bpf
mkdir -p /sys/fs/bpf
mount -t bpf bpf /sys/fs/bpf
Crane 前端环境配置-Ubuntu
理论上在任何使用 systemd 的系统上都能使用(例如 Debian/Ubuntu/AlmaLinux/Fedora 等)。该教程涉及的软件基于 ARM64。如果使用 x86-64 等架构,请调整软件下载链接。请全程以 root 用户执行命令。建议先完成后端环境的安装。
1. 安装 Golang
GOLANG_TARBALL=go1.22.0.linux-amd64.tar.gz
curl -L https://go.dev/dl/${GOLANG_TARBALL} -o /tmp/go.tar.gz
rm -rf /usr/local/go
tar -C /usr/local -xzf /tmp/go.tar.gz && rm /tmp/go.tar.gz
echo 'export GOPATH=/root/go' >> /etc/profile.d/go.sh
echo 'export PATH=$GOPATH/bin:/usr/local/go/bin:$PATH' >> /etc/profile.d/go.sh
echo 'go env -w GO111MODULE=on' >> /etc/profile.d/go.sh
echo 'go env -w GOPROXY=https://goproxy.cn,direct' >> /etc/profile.d/go.sh
source /etc/profile.d/go.sh
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
2. 安装 Protoc
PROTOC_ZIP=protoc-23.2-linux-x86_64.zip \
curl -L https://github.com/protocolbuffers/protobuf/releases/download/v23.2/${PROTOC_ZIP} -o /tmp/protoc.zip
unzip /tmp/protoc.zip -d /usr/local
rm /tmp/protoc.zip /usr/local/readme.txt
3. 拉取项目
git clone https://github.com/PKUHPC/CraneSched-FrontEnd.git
4. 编译项目并部署前端
工作目录为CraneSched-FrontEnd,在该目录下编译所有 Golang 组件并安装。
cd CraneSched-FrontEnd
make
make install
5. 启动 Cfored 和 Cplugind(可选)
如果需要提交交互式任务(crun, calloc),则需要启用 Cfored:
systemctl enable cfored
systemctl start cfored
如果配置文件中启用了插件系统,则需要启用 Cplugind:
systemctl enable cplugind
systemctl start cplugind
6. 安装 Cwrapper 别名(可选)
可以通过下列命令安装 Crane 的 Slurm 别名,从而支持使用 Slurm 的命令形式使用 Crane:
cat > /etc/profile.d/cwrapper.sh << 'EOF'
alias sbatch='cwrapper sbatch'
alias sacct='cwrapper sacct'
alias sacctmgr='cwrapper sacctmgr'
alias scancel='cwrapper scancel'
alias scontrol='cwrapper scontrol'
alias sinfo='cwrapper sinfo'
alias squeue='cwrapper squeue'
EOF