Pod 被杀死并重新创建,说明 - OutOfephemeral-storage?

时间:2021-04-12 07:50:46

标签: kubernetes

我的 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 吗?有什么想法吗?

2 个答案:

答案 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