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 makecache
dnf 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.service
ENTRYPOINT [ "/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: true
cgroup: host
volumes:
- type: bind
read_only: true
source: /sys/fs/cgroup
target: /sys/fs/cgroup
- type: tmpfs
target: /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-server
hostname: daos-server
privileged: true
cgroup: host
network_mode: host
extra_hosts:
- "daos-server:${DAOS_IFACE_IP}"
volumes:
- type: bind
read_only: true
source: /sys/fs/cgroup
target: /sys/fs/cgroup
- type: bind
read_only: false
source: /dev/hugepages
target: /dev/hugepages
- type: bind
read_only: false
source: /sys/kernel/mm/hugepages
target: /sys/kernel/mm/hugepages
- type: bind
read_only: false
source: /lib/modules
target: /lib/modules
- type: bind
read_only: false
source: /sys/devices/system/node
target: /sys/devices/system/node
- type: tmpfs
target: /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集群部署-单机模式。