【问题标题】:How can I safely NFS mount /var/lib/kubelet in a kubernetes cluster with diskless worker nodes?如何在具有无盘工作节点的 kubernetes 集群中安全地 NFS 挂载 /var/lib/kubelet?
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-17
      • 2019-04-16
      • 2022-07-21
      • 2020-12-17
      • 2021-06-22
      • 2021-02-10
      • 2020-04-29
      • 1970-01-01
      相关资源
      最近更新 更多