从容器内部调用 lvcreate 挂起

zef*_*ciu 5 lvm udev docker

我运行一个容器。它具有所有功能并从根目录挂载所有目录(除了/proc)。当我lvcreate从里面打电话时,我得到:

# lvcreate -v -L104857600B -n vol1 default
Finding volume group "default"
Archiving volume group "default" metadata (seqno 17).
Creating logical volume vol1
Creating volume group backup "/etc/lvm/backup/default" (seqno 18).
Activating logical volume "vol1".
activation/volume_list configuration setting not defined: Checking only host tags for default/vol1
Creating default-vol1
Loading default-vol1 table (252:4)
Resuming default-vol1 (252:4)
Run Code Online (Sandbox Code Playgroud)

并且命令挂起。我也在日志中得到了这个:

Sep 12 12:03:31 node3 systemd-udevd[12529]: Process '/sbin/dmsetup udevcomplete 23072978' failed with exit code 1
Run Code Online (Sandbox Code Playgroud)

如果我用ctrl-C我设置中断它,则创建逻辑卷。我也可以通过dmsetup udevcomplete_all从同一个容器内部发出来中断命令。如果我打电话lvcreate主机,它会正常工作并干净地退出。

我相信,这个问题与 udev cookie 没有在容器和主机之间共享有关。但是,我不知道 lvm 到底要在这里做什么以及如何解决问题。

我需要这个,以便容器化的 kubelet 可以调用能够分配逻辑卷的 flexvolume 插件。

Spo*_*ler 6

我想说的是,udev在这种情况下你应该避免使用。使用 LVM 可以很容易地做到这一点,并且 LVM 完全能够自行处理卷和设备设置。

在您的/etc/lvm/lvm.conf文件中,您将找到以下几行:

udev_sync = 0

udev_rules = 0
Run Code Online (Sandbox Code Playgroud)

当我在那里打印它们时,将这些值设置为零,看看是否可以清除它。至少会排除udev。您必须使卷脱机才能进行此更改,因为您将从udev管理切换到 LVM 管理。