设备上没有剩余空间,这是意外的。kubernetes 集群中卷的 MountVolume.SetUp 失败

Dol*_*hin 8 kubernetes

今天我的 kubernetes 集群(v1.15.2)节点磁盘已满,导致 pod 给出以下提示:

Update plugin resources failed due to failed to write checkpoint file "kubelet_internal_checkpoint": write /var/lib/kubelet/device-plugins/.261578065: no space left on device, which is unexpected.
MountVolume.SetUp failed for volume "default-token-xnrwt" : mkdir /opt/k8s/k8s/kubelet/pods/67eaa71b-adf4-4365-a1c7-42045d5e9426: no space left on device
Run Code Online (Sandbox Code Playgroud)

我登录服务器,发现磁盘使用率为100%,所以我删除了一些日志文件并释放了10GB+磁盘空间,但现在pod似乎没有自动恢复,并且仍然有这个错误提示:

在此输入图像描述

我应该怎么做才能解决这个问题?我尝试重新启动所有 Pod,所有 Pod 都工作正常。但最后我发现错误提示信息仍然给我提示没有空间,并且没有自动消失。查看节点状态,发现该节点没有磁盘压力。如何让错误提示消失?

v1d*_*rm3 27

其他可能性是资源请求/限制的单位值不正确(例如,使用mi而不是Mi)。

例如:

apiVersion: v1
kind: Pod
spec:
  containers:
    - name: {container_name}
      resources:
        limits:
          memory: "512mi" # incorrect; should be "512Mi"
          cpu: "200m"
Run Code Online (Sandbox Code Playgroud)

  • 这就是我的情况的问题。我错误地将内存指定为 100m 而不是 100Mi。 (5认同)

Pjo*_*erS 4

Community Wiki评论部分提到了将此作为解决方案发布。

当您的应用程序使用 100% 的可用空间时,会发生类似no space left on device, which is unexpected.和 等错误。no space left on device您可以使用命令检查它$ df -h

解决方案

要解决此类问题,您必须在 中“腾出一些空间” volume。您可以通过手动删除文件来完成此操作(OP 在这种情况下做到了)。
一旦腾出一些空间,您应该重新kubelet使用$ systemctl restart kubelet.

上述步骤解决了 OP 问题。

此外,在某些特定场景下,您还可能使用$ service docker restart特定资源重新启动 docker 服务。