我运行一个容器。它具有所有功能,并从根目录挂载所有目录(除了/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)
命令挂起了。我还在日志中看到了以下内容:
Sep 12 12:03:31 node3 systemd-udevd[12529]: Process '/sbin/dmsetup udevcomplete 23072978' failed with exit code 1
ctrl如果我使用-I set来中断它C,则逻辑卷已创建。我也可以通过dmsetup udevcomplete_all
从同一容器内部发出来中断命令。如果我调用lvcreate
主机,它会正常工作并干净退出。
我认为,这个问题与容器和主机之间未共享 udev cookies 有关。然而,我不知道 lvm 在这里到底想做什么以及如何解决这个问题。
我需要这个,以便容器化的 kubelet 可以调用能够分配逻辑卷的 flexvolume 插件。
答案1
我想说的是,udev
在这种情况下你应该避免使用。使用 LVM 很容易做到这一点,而且 LVM 完全有能力自行处理卷和设备设置。
在您的/etc/lvm/lvm.conf
文件中,您将找到以下几行:
udev_sync = 0
udev_rules = 0
正如我已在此处打印的,请将这些值设置为零,看看是否能解决问题。它至少会排除udev
。您必须将卷脱机才能进行此更改,因为您将从udev
管理切换到 LVM 管理。