The node was low on resource: ephemeral-storage. Container xxxxxxx was using 248Ki, which exceeds its request of 0.

what 发表于: 2023-12-09   最后更新时间: 2023-12-09 23:25:39   1,230 游览

节点的所有 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'

请问我该如何快速解决?

发表于 2023-12-09

使用 emptyDir 而没有存储配额的 Pod 会写满该存储空间,此时会出现以下错误:

eviction manager: attempting to reclaim ephemeral-storage

设置配额 limits.ephemeral-storagerequest.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-storagerequests.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% /

原因可能是根目录的磁盘空间不足,删除部分空间即可。

你的答案

查看kubernetes相关的其他问题或提一个您自己的问题