我的 Pod 被杀死并重新创建,说明 OutOfephemeral-storage
Pod 描述显示以下消息
Message: Pod Node didn't have enough resource: ephemeral-storage, requested: 53687091200, used: 0, capacity: 0
节点容量
Capacity:
cpu: 80
ephemeral-storage: 1845262880Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 790964944Ki
nvidia.com/gpu: 8
pods: 110
Allocatable:
cpu: 79900m
ephemeral-storage: 1700594267393
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 790612544Ki
nvidia.com/gpu: 8
pods: 110
节点磁盘使用情况
]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 1.7T 25G 1.7T 2% /
devtmpfs 378G 0 378G 0% /dev
tmpfs 378G 16K 378G 1% /dev/shm
tmpfs 378G 3.8M 378G 1% /run
tmpfs 378G 0 378G 0% /sys/fs/cgroup
仍然会在一段时间后重新安排 Pod 吗?有什么想法吗?
答案 0 :(得分:0)
在大多数情况下,这是由于过多的日志消息消耗了存储空间而发生的。解决方案是配置 Docker logging driver 以限制保存的日志数量:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "10"
}
}
另外值得一提的是,Docker 采取了一种保守的方法来清理未使用的对象(通常称为“垃圾收集”),例如图像、容器、卷和网络:除非您明确询问 Docker,否则通常不会删除这些对象这样做。这会导致 Docker 使用额外的磁盘空间。
它帮助我使用名为 prune
的 docker 函数。这将从未使用的对象中清除系统。如果您希望清理多个对象,您可以使用 docker system prune
。在此处查看有关 prunning 的更多信息。
下一个可能的情况是,有些 Pod 使用 emptyDir 而没有存储配额。这将填满存储空间。对此的解决方案是将配额设置为 limit this:
resources:
requests:
ephemeral-storage: "1Gi"
limits:
ephemeral-storage: "1Gi"
如果没有设置,任何容器都可以将任意数量的存储写入其节点文件系统。
有关临时存储工作原理的更多详细信息,请参阅Ephemeral Storage Consumption。
答案 1 :(得分:0)
问题出在文件系统上,通过以下步骤解决
]# systemctl stop kubelet
]# systemctl stop docker
]# umount -l /<MountFolder>
]# fsck -y /dev/sdb1
]# init 6