如何在具有无盘工作节点的kubernetes集群中安全地装载NFS/var/lib/kubelet?

如何在具有无盘工作节点的kubernetes集群中安全地装载NFS/var/lib/kubelet?,kubernetes,kubeadm,kubelet,Kubernetes,Kubeadm,Kubelet,背景: 我有一个裸金属Kubernetes集群。主节点是diskful,但是所有工作节点都是无盘的,并且PXE从提供其OS映像和非易失性NFS装载点的机器上引导 我们很早就发现,我们需要某种非易失性存储,以便无盘节点可以存储其配置、kubernetes机密、SSL密钥等。。。如果没有非易失性存储,节点每次重新启动时都必须删除并重新加入集群,这显然是一种痛苦 因此,我们为/etc/kubernetes和/var/lib/kubelet创建了NFS装载分区,以便节点能够记住自己是谁,并在重新启动后重

背景:

我有一个裸金属Kubernetes集群。主节点是diskful,但是所有工作节点都是无盘的,并且PXE从提供其OS映像和非易失性NFS装载点的机器上引导

我们很早就发现,我们需要某种非易失性存储,以便无盘节点可以存储其配置、kubernetes机密、SSL密钥等。。。如果没有非易失性存储,节点每次重新启动时都必须删除并重新加入集群,这显然是一种痛苦

因此,我们为/etc/kubernetes和/var/lib/kubelet创建了NFS装载分区,以便节点能够记住自己是谁,并在重新启动后重新加入集群

问题:

然而,我们在kubeadm中遇到了一个问题:无论何时运行kubeadm join,它都会卸载/remounts/var/lib/kubelet。由于找不到合适的设备,这导致kubelet呕吐和死亡。具体错误是:

node6 kubelet: F0113 18:08:55.196706  210949 kubelet.go:1347] Failed to start ContainerManager failed to get rootfs info: failed to get device for dir "/var/lib/kubelet": could not find dev
ice with major: 0, minor: 46 in cached partitions map
如果我们在运行kubeadm join之前卸载/var/lib/kubelet的NFS挂载,它可以正常工作,但会让我们回到最初的问题:无盘节点将无法在重新启动后生存并自动重新加入集群

我们试图通过改变kubelet的k8s根来解决这个问题,但它仍然导致了同样的崩溃,kubelet对这个设备感到困惑

所以我的问题是:


如何在我的无盘工作节点上正确设置/var/lib/kubelet的NFS装载点,或以其他方式配置kubelet,以便即使kubeadm装载/卸载该点,我也不会发生崩溃,kubeadm的安装文件是非易失性的?

这是一个已知的问题,但幸运的是,这在几天前就得到了修复

这还没有被剪切成一个版本。虽然这可能会成为1.20.x版本,但并不确定以前的版本。如果需要的话,可能需要在上请求问题的后端口