遇到的 Kubernetes 节点告警信息:
Warning EvictionThresholdMet kubelet Attempting to reclaim ephemeral-storage
表示该节点上的 ephemeral-storage(临时存储) 使用量已经达到了 kubelet 配置的驱逐阈值(eviction threshold),kubelet 正在尝试回收空间,以避免系统资源耗尽。频繁出现此警告说明问题严重且持续存在。
/dev/mapper/ubuntu–vg-ubuntu–lv 19G 16G 2.6G 86% /
根分区已使用 86%,接近 kubelet 默认的 ephemeral-storage 驱逐阈值(通常为 85%~90%)。
即使 Kubernetes 相关目录不大,只要根分区整体使用率高,就会触发 EvictionThresholdMet。
🔍 当前状态分析(来自 lsblk)
| 设备 | 大小 | 说明 |
|---|---|---|
/dev/sda |
400G | 虚拟磁盘已扩容到 400GB ✅ |
/dev/sda3 |
38G | 用作 LVM 物理卷(PV)的分区 |
LVM 逻辑卷 (ubuntu--vg-ubuntu--lv) |
19G | 挂载为 /,只用了 PV 的一半 |
🎯 关键发现:
- 底层磁盘有 400G,但
sda3分区只有 38G → 需要先扩展sda3- LVM 卷组(VG)中还有大量未分配空间(38G - 19G = 19G 可用,甚至更多)
- 扩容后,根分区可轻松达到 几十 GB 甚至上百 GB
✅ 扩容步骤(按顺序执行)
步骤 1:安装 growpart(用于扩展分区)
1 | sudo apt update && sudo apt install -y cloud-guest-utils |
步骤 2:扩展 sda3 分区到占满磁盘剩余空间(或指定大小)
⚠️ 注意:你有 400G 磁盘,但可能不想把全部空间给系统(留一些未来灵活分配)。
建议:先扩展sda3到 比如 200G 或 300G,而不是 400G(保留灵活性)。
但如果你希望 最大化利用,可以直接扩到接近 400G(减去 sda1+sda2 ≈ 2G):
1 | # 扩展 sda3 到占满可用空间(推荐) |
3是分区号(对应sda3)
✅ 验证:
1 | lsblk |
步骤 3:扩展物理卷(PV)以使用新分区空间
1 | sudo pvresize /dev/sda3 |
✅ 验证:
1 | sudo pvs |
步骤 4:扩展逻辑卷(LV)—— 根分区
选项 A:扩展到指定大小(例如 100G)
1 | sudo lvextend -L 100G /dev/mapper/ubuntu--vg-ubuntu--lv |
选项 B:使用所有 VG 空闲空间(最大扩容)
1 | sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv |
💡 建议:不要一次性用完所有空间,留一些给未来快照或其它 LV。
例如:sudo lvextend -L 200G ...
✅ 验证:
1 | sudo lvs |
步骤 5:在线扩展文件系统(ext4)
Ubuntu 默认使用 ext4,支持在线扩容:
1 | sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv |
⏱️ 如果 LV 很大(>100G),可能需要几秒到几十秒。
步骤 6:最终验证
1 | df -h / |
你应该看到类似:
1 | Filesystem Size Used Avail Use% Mounted on |
✅ Use% 从 86% 降到个位数,彻底解决
EvictionThresholdMet问题!
📌 推荐扩容策略(平衡 & 安全)
| 目标 | 命令 |
|---|---|
| 将根分区扩到 200G(留 200G 未分配) | sudo lvextend -L 200G /dev/mapper/ubuntu--vg-ubuntu--lv |
| 文件系统扩容 | sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv |
这样:
- 根分区足够大(避免存储驱逐)
- 卷组(VG)保留 200G 空闲空间,未来可创建新 LV(如
/var/lib/containerd独立卷)
🔒 安全提示
- 全程 无需重启,业务可保持运行(但建议低峰期操作)。
- 操作前可快照虚拟机(云平台通常支持一键快照)。
- 不要删除或修改
sda1(BIOS boot)、sda2(/boot)。
🚀 附加建议:扩容后优化存储结构
既然你有大量空闲空间,建议后续:
1 | # 创建新 LV 用于容器运行时(可选但推荐) |
但这属于进阶优化,当前先完成根分区扩容即可。