微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在具有无盘工作节点的 kubernetes 集群中安全地通过 NFS 挂载 /var/lib/kubelet?​​

背景:

我有一个裸机 Kubernetes 集群。主节点是有磁盘的,但所有工作节点都是无盘的,PXE 从提供 OS 映像和非易失性 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 的设置文件是非易失性的?

解决方法

这是一个已知问题,但幸运的是,这在几天前已修复 - https://github.com/google/cadvisor/pull/2787

这还没有被剪成一个版本。虽然这可能会成为 1.20.x,但不确定以前的版本。如果需要,可能需要在 https://github.com/kubernetes/kubernetes/issues/98009 上请求对该问题进行反向移植。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。