节点的所有 Pod 均处于Evicted
状态:
portal-59978bff4d-2qkgf 0/1 Evicted 0 14m
release-mgmt-74995bc7dd-nzlgq 0/1 Evicted 0 8m20s
service-orchestration-79f8dc7dc-kx6g4 0/1 Evicted 0 7m31s
test-mgmt-7f977567d6-zl7cc 0/1 Evicted 0 8m17s
查看了其中一个,发现报The node was low on resource: ephemeral-storage.
status:
message: >-
The node was low on resource: ephemeral-storage. Container xxxxxxx
was using 248Ki, which exceeds its request of 0.
phase: Failed
reason: Evicted
startTime: '2023-11-30T08:01:49Z'
请问我该如何快速解决?
使用 emptyDir 而没有存储配额的 Pod 会写满该存储空间,此时会出现以下错误:
eviction manager: attempting to reclaim ephemeral-storage
设置配额
limits.ephemeral-storage
、request.ephemeral-storage
来限制,否则任何容器都可以向其节点文件系统写入任意数量的存储空间。资源配额定义示例:
apiVersion: v1 kind: ResourceQuota metadata: name: compute-resources spec: hard: pods: "4" requests.cpu: "1" requests.memory: 1Gi requests.ephemeral-storage: 2Gi limits.cpu: "2" limits.memory: 2Gi limits.ephemeral-storage: 4Gi
在 Kubernetes 中,emptyDir 卷实际上是一个在节点上的临时目录,这个目录的位置取决于 Kubernetes 集群的配置,通常是在节点的文件系统上。
在大多数情况下,emptyDir 的真实目录位于节点的
/var/lib/kubelet/pods/<PodID>/volumes/kubernetes.io~empty-dir
目录下,其中<PodID>
是对应 Pod 的唯一标识符。可以通过:
volumes: - name: cache-volume emptyDir: sizeLimit: 500Mi
限制其大小。
如果不设置
limits.ephemeral-storage
、requests.ephemeral-storage
,默认情况下pods有权限使用所有节点的存储空间。所以,你可以设置limits.ephemeral-storage、requests.ephemeral-storage:
apiVersion: v1 kind: Pod metadata: name: frontend spec: containers: - name: app image: images.my-company.example/app:v4 resources: requests: ephemeral-storage: "2Gi" limits: ephemeral-storage: "4Gi"
或者,配置 Docker 日志程序以限制存储的日志量(在文件
/etc/docker/daemon.json
中,默认情况下该文件不存在,必须创建它):{ "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "2" } }
用
df -h
查看磁盘的使用空间,发现根目录还剩下80%,删除了一些后,发现可以正常启动了。[root@node-name ~]# df -h / Filesystem Size Used Avail Use% Mounted on /dev/nvme0n1p1 20G 15G 5.9G 71% /
原因可能是根目录的磁盘空间不足,删除部分空间即可。
你的答案