DAOS集群部署-Docker模式
1. 前言
本文详细介绍如何在almalinux8.9上使用docker部署DAOS.2.6.0单机集群,配置方式采用Metadata-on-SSD模式。系统环境如下:
daos: 2.6.0
linux os: almalinux 8.9
linux kernel: 4.18.0-513.5.1.el8_9.x86_64
DAOS从2.0.0开始是一个全新的架构设计,与1.x版本是不兼容的。另外,从2.6.0开始,DAOS开始支持Metadata-on-SSD,即支持非Intel Optane设备。
2. 集群规划
Component Host ip Host name
--------------------------------------------
daos_server 192.168.3.13 node0
3. 安装docker
3.1. 添加docker yum源
编辑/etc/yum.repos.d/docker-ce.repo
文件
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirror.nju.edu.cn/docker-ce/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirror.nju.edu.cn/docker-ce/linux/centos/gpg
3.2. 安装docker
dnf clean all && dnf makecachednf install --allowerasing docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
3.3. 启动docker
systemctl start docker.service
4. 拉取almalinux镜像
4.1. 设置docker hub镜像源
编辑/etc/docker/daemon.json
文件
{"registry-mirrors": ["https://1ms.run"]
}
4.2. 拉取almalinux 8.9 init镜像
init镜像可以执行systemctl命令,省略了很多麻烦。
docker pull almalinux/8-init:8.9
如果成功拉取,执行docker images
命令可以看到almalinux 8.9 init的docker image已经被加载:
REPOSITORY TAG IMAGE ID CREATED SIZE
almalinux/8-init 8.9 2f7f31164cc6 14 months ago 186MB
5. 制作daos-base镜像
5.1. 创建目录结构
mkdir -p /root/daos/daos-base/el8
5.2. 创建.env文件并添加内容
添加并编辑/root/daos/.env
文件。
# Linux image配置
LINUX_DISTRO="el8"
LINUX_IMAGE_NAME="almalinux/8-init"
LINUX_IMAGE_TAG="8.9"# DAOS image build配置
DAOS_DOCKER_IMAGE_NSP="daos"
DAOS_DOCKER_IMAGE_TAG="2.6.0"
DAOS_HUGEPAGES_NBR=4096
DAOS_IFACE_NAME="enp0s8"
DAOS_IFACE_IP="192.168.3.13"
5.3. 创建Dockerfile并添加内容
添加并编辑/root/daos_docker/daos-base/el8/Dockerfile
文件。
# Pull base image
ARG LINUX_IMAGE_NAME=""
ARG LINUX_IMAGE_TAG=""
FROM $LINUX_IMAGE_NAME:$LINUX_IMAGE_TAG# Yum repo config
COPY yum.repos.d/* /etc/yum.repos.d/# Install packages
RUN dnf clean all && \dnf makecache && \echo "[INFO] Installing base packages" && \dnf install -y dnf-plugins-core && \dnf config-manager --save --setopt=assumeyes=True && \dnf install vim && \dnf install procps-ng && \dnf install iproute && \echo "[INFO] Installing DAOS" && \dnf install daos daos-admin daos-server daos-client && \dnf clean all && \echo "[INFO] Enable some services" && \systemctl enable dbus.serviceENTRYPOINT [ "/sbin/init" ]
- 上述
COPY yum.repos.d/* /etc/yum.repos.d/
指令,需要提前将yum.repos.d
目录拷贝到宿主机Dockerfile
同级目录下。yum.repos.d目录是提前做好的关于almalinux、daos、epel
的国内镜像源。 ENTRYPOINT [ "/sbin/init" ]
表示docker运行时默认执行/sbin/init
命令,必须可少。
5.4. 创建docker-compose.yml并添加内容
添加并编辑/root/daos_docker/docker-compose.yml
文件。
services:daos_base:image: "${DAOS_DOCKER_IMAGE_NSP}/daos-base-${LINUX_DISTRO}:${DAOS_DOCKER_IMAGE_TAG}"build:context: "daos-base/el8"args:- "LINUX_IMAGE_NAME=${LINUX_IMAGE_NAME}"- "LINUX_IMAGE_TAG=${LINUX_IMAGE_TAG}"privileged: truecgroup: hostvolumes:- type: bindread_only: truesource: /sys/fs/cgrouptarget: /sys/fs/cgroup- type: tmpfstarget: /run
privileged
授予docker运行时拥有最高权限,否则无法运行systemctl命令。
5.5. 开始构建
docker-compose build daos_base
构建完成之后,使用docker images
命令可以看到daos_base镜像已经加载了。
REPOSITORY TAG IMAGE ID CREATED SIZE
daos/daos-base-el8 2.6.0 7f90c7ca6c25 11 seconds ago 191MB
almalinux/8-init 8.9 2f7f31164cc6 14 months ago 186MB
5.6. 保存镜像(可以跳过)
如果需要在多台机器上部署DAOS集群,那么就需要将上述构建的daos base镜像导出到本地,然后在其他机器上加载该镜像即可。
docker save -o daos-base-image-2.6.0.tar daos/daos-base-el8:2.6.0
其他机器上只需要加载daos-base镜像,不需要加载almalinux镜像。加载镜像的命令如下:
docker load -i daos-base-image-2.6.0.tar
6. 启动daos-server容器
6.1. 编辑docker-compose.yml并添加内容
daos_server:image: "${DAOS_DOCKER_IMAGE_NSP}/daos-base-${LINUX_DISTRO}:${DAOS_DOCKER_IMAGE_TAG}"container_name: daos-serverhostname: daos-serverprivileged: truecgroup: hostnetwork_mode: hostextra_hosts:- "daos-server:${DAOS_IFACE_IP}"volumes:- type: bindread_only: truesource: /sys/fs/cgrouptarget: /sys/fs/cgroup- type: bindread_only: falsesource: /dev/hugepagestarget: /dev/hugepages- type: bindread_only: falsesource: /sys/kernel/mm/hugepagestarget: /sys/kernel/mm/hugepages- type: bindread_only: falsesource: /lib/modulestarget: /lib/modules- type: bindread_only: falsesource: /sys/devices/system/nodetarget: /sys/devices/system/node- type: tmpfstarget: /run
image
:指定依赖的镜像名,必须和daos_base中保持一致,目的是不需要重新再制作新的的镜像,因此上面配置也将build移除了。network_mode
:指定容器的网络模式,根据DAOS官网所说,目前只支持host模式,因此这里只能填写host
。extra_hosts
:用于配置docker的/etc/hosts文件。docker不支持在容器运行时修改hosts文件,因此必须在启动容器时配置。volumes
:用于挂载宿主机的目录到容器,任何一个都不能少。尤其是/lib/modules
,这是spdk运行时需要用到的目录。
6.2. 创建并启动daos_server容器
docker compose up -d daos_server
执行docker ps -a
命令查看daos-server容器是否正常运行
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
17f0876cfeb3 daos/daos-base-el8:2.6.0 "/sbin/init" 30 minutes ago Up 30 minutes daos-server
结果显示,STATUS:Up 17 seconds
,daos-server容器已经正常启动。
7. 集群部署
单机集群部署可以参考DAOS集群部署-单机模式。
8. 参考资料
- https://docs.daos.io/latest/QSG/docker/
- https://github.com/daos-stack/daos/tree/v2.6.0/utils/docker