
k8s调度pod时异常,会导致生成上百个失败的pod。
pod分配异常:
The node had condition: [DiskPressure].
The node was low on resource: ephemeral-storage. Container join-services was using 27938016Ki, which exceeds its request of 0.
节点报异常:
(combined from similar events): wanted to free 2571046912 bytes, but freed 0 bytes space with errors in image deletion: [rpc error: code = Unknown desc = Error response from daemon: conflict: unable to remove repository reference "192.168.0.2:5000/rabbitmq:3.8.6-management" (must force) - container bfb421637474 is using its referenced image 64a1f920fb0dKubernetes 调度 Pod 失败,报错信息明确指出:节点的临时存储资源不足。调度策略为重启时先增后减实例。
在运行的容器 join-services 实际已经使用了约 27.3 GiB (27938016 KiB),但它在 Pod 的资源配置 (resources) 中没有声明任何临时存储的请求值 (request = 0)。
临时存储 (ephemeral-storage): 指节点上用于存放容器日志、emptyDir 卷、容器可写层(容器运行时产生的临时文件)的磁盘空间。Pod 使用 emptyDir 类型的卷时,数据会写入节点的临时存储(默认路径为 /var/lib/kubelet/pods/<pod-id>/volumes/kubernetes.io~emptydir/<volume-name>)
请求值 (request): Kubernetes 调度器在决定将 Pod 放在哪个节点上时,会考虑 Pod 声明的资源请求量。调度器会确保节点的剩余资源(包括 CPU、内存和临时存储)能够满足 Pod 的请求量。
原因:
join-services 容器没有声明临时存储请求 (requests.ephemeral-storage: 0),调度器在调度时认为该容器不需要任何临时存储。
Pending/Failed 状态并持续重试,导致产生上百个失败 Pod 记录,可能触发 controller 级联创建。
join-services 容器明确声明一个合理的临时存储请求值,让调度器能够做出正确的调度决策。
强制声明 ephemeral-storage 配额,不允许任何容器以 0 request 运行,添加 resources.requests 字段。
limits 来防止容器无限制地消耗临时存储,导致节点问题(可选但推荐)。
修改后的 YAML 示例片段:
apiVersion: apps/v1
kind: Deployment # 也可能是 StatefulSet, DaemonSet 等
metadata:
name: deployment-name
spec:
template:
spec:
containers:
- name: join-services # 你的问题容器名称
image: image:tag
resources: # 添加或修改这个 resources 块
requests:
ephemeral-storage: "5Gi" # 关键:添加临时存储请求
limits: # 可选但推荐:设置临时存储上限
ephemeral-storage: "10Gi" # 例如设置为 10Gi,比请求量稍高
# ... 其他容器配置 (如 ports, volumeMounts, env 等) ...
# ... 其他 Pod 配置 (如 volumes, initContainers 等) ...额外建议:
TTLController 自动清理过期资源。
emptyDir 数据量大,建议改用持久化存储(如 PVC)或优化数据写入逻辑。
监控 ephmeral-storage 使用使用 Prometheus + Grafana 监控节点的 ephemeral-storage 使用情况,设置阈值告警(例如 80% 时触发警告)。