1

我目前正在linstor我的实验室尝试。我正在尝试设置computestorage节点的分离。运行 linstor 的存储节点,而计算节点运行 Docker Swarm 或 K8s。我在此测试中设置了 1 个 linstor 节点和 1 个 docker swarm 节点。Linstor 节点配置成功。

林斯托节点

DRBD9.1.2

╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
┊ StoragePool          ┊ Node       ┊ Driver   ┊ PoolName       ┊ FreeCapacity ┊ TotalCapacity ┊ CanSnapshots ┊ State ┊ SharedName ┊
╞══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╡
┊ DfltDisklessStorPool ┊ instance-2 ┊ DISKLESS ┊                ┊              ┊               ┊ False        ┊ Ok    ┊            ┊
┊ pd-std-pool          ┊ instance-2 ┊ LVM_THIN ┊ vg/lvmthinpool ┊   199.80 GiB ┊    199.80 GiB ┊ True         ┊ Ok    ┊            ┊
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
# linstor node list
╭─────────────────────────────────────────────────────────────╮
┊ Node       ┊ NodeType ┊ Addresses                ┊ State    ┊
╞═════════════════════════════════════════════════════════════╡
┊ instance-2 ┊ COMBINED ┊ 10.100.0.29:3366 (PLAIN) ┊ Online   ┊
╰─────────────────────────────────────────────────────────────╯

码头工人节点

在另一个节点上,我正在运行 Docker Swarm。该节点没有安装任何工具,例如 drbd、drbdtop、drbdsetup ...等。从技术上讲,它正在运行一个最小的安装,足以只运行 Docker 以保持它的轻量级。Docker 版本是20.10.3. 我还安装了用 golang 编写的 linstor docker 卷。

下面是/etc/linstor/docker-volume.conf安装在我的 Docker Swarm 节点中的我和 docker 卷插件

$ docker plugin ls
ID             NAME                                  DESCRIPTION                        ENABLED
6300029b3178   linbit/linstor-docker-volume:latest   Linstor volume plugin for Docker   true

$ cat /etc/linstor/docker-volume.conf
[global]
controllers = linstor://instance-2
fs = xfs

尝试使用 linstor 创建的卷时出现错误。我已经确认我可以 ping linstor 控制器instance-2并在防火墙中打开所有端口。这是错误和重现的步骤

$ docker volume create -d linbit/linstor-docker-volume:latest  --name=first --opt size=20 --opt replicas=1 --opt storage-pool=pd-std-pool
$ docker volume ls
DRIVER                                VOLUME NAME
local                                 64f864db31990baa6b790dde34513a7f6fc466ca0c5e72ffab7024365a9f45da
linbit/linstor-docker-volume:latest   first
$ docker volume inspect first
[
    {
        "CreatedAt": "0001-01-01T00:00:00Z",
        "Driver": "linbit/linstor-docker-volume:latest",
        "Labels": {},
        "Mountpoint": "",
        "Name": "first",
        "Options": {
            "replicas": "1",
            "size": "20",
            "storage-pool": "pd-std-pool"
        },
        "Scope": "global"
    }
]
$ docker run --rm -it -v first:/data alpine sh
docker: Error response from daemon: error while mounting volume '': VolumeDriver.Mount: 404 Not Found.
ERRO[0000] error waiting for container: context canceled 

问题

  • 我是否需要在我的 Docker Swarm 中安装 drbd-utils 才能正常工作?
  • 错误是什么VolumeDriver.Mount 404 Not Found意思?
4

1 回答 1

2

根据官方文档,LINSTOR 通过使用 DRDB(分布式复制块设备)跨节点复制数据来管理复制 LVM 或 ZFS 卷(或我说的裸分区)内的磁盘空间的节点集群中的存储:

“LINSTOR 是 Linux 系统上存储的配置管理系统。它管理节点集群上的 LVM 逻辑卷和/或 ZFS ZVOL。它利用 DRBD 在不同节点之间进行复制,并为用户和应用程序提供块存储设备。它管理通过 bcache 对 SSD 中支持 HDD 的数据进行快照、加密和缓存。”

所以我会说是的,您确实需要在要使用驱动程序的每个节点上安装驱动程序(我确实看到 Docker 的存储插件尝试在本地挂载 DRBD 卷)

但是,您不一定需要在计算节点上拥有存储空间本身,因为您可以从在不同节点上复制的卷中挂载无盘 DRBD资源,所以我认为您的想法应该可行,除非存在一些错误我还没有发现驱动程序本身:您的计算节点需要注册为所有必需池的无盘节点(我没有尝试过,但请记住阅读它不仅可能,而且推荐用于某些类型的数据迁移)。

当然,如果您没有超过 1 个存储节点,则使用 LINSTOR/drbd 不会获得太多收益(节点或磁盘故障将使您无盘)。我的用例是在不同数据中心的不同服务器之间复制存储,以便下次烧毁时我可以让我的数据和容器在几分钟而不是几天后运行......

于 2021-05-28T07:49:19.397 回答