【发布时间】:2021-04-18 19:06:05
【问题描述】:
背景:
我有一个裸机 Kubernetes 集群。主节点是有盘的,但所有工作节点都是无盘的,并且 PXE 从提供其操作系统映像和非易失性 NFS 挂载点的机器启动。
我们很早就发现我们需要某种非易失性存储,以便无盘节点可以存储它们的配置、kubernetes 机密、SSL 密钥等......如果没有非易失性存储,节点就必须是每次重新启动时都删除并重新加入集群,这显然是一种痛苦。
因此,我们为 /etc/kubernetes 和 /var/lib/kubelet 创建了 NFS 挂载分区,以便节点可以记住他们是谁,并在重启后重新加入集群。
问题:
但是,我们遇到了 kubeadm 的一个问题:每当您运行 kubeadm join 时,它都会卸载/重新安装 /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 的设置文件是非易失性的?
【问题讨论】:
标签: kubernetes kubeadm kubelet