ubuntu虚拟机根分区扩容

遇到的 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
2
# 扩展 sda3 到占满可用空间(推荐)
sudo growpart /dev/sda 3

3 是分区号(对应 sda3

✅ 验证:

1
2
lsblk
# 应看到 sda3 变成 ~398G(例如)

步骤 3:扩展物理卷(PV)以使用新分区空间

1
sudo pvresize /dev/sda3

✅ 验证:

1
2
3
4
sudo pvs
# 输出示例:
# PV VG Fmt Attr PSize PFree
# /dev/sda3 ubuntu-vg lvm2 a-- 398g 379g ← PFree 很大!

步骤 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
2
sudo lvs
# LV 大小应已增加

步骤 5:在线扩展文件系统(ext4)

Ubuntu 默认使用 ext4,支持在线扩容:

1
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

⏱️ 如果 LV 很大(>100G),可能需要几秒到几十秒。


步骤 6:最终验证

1
df -h /

你应该看到类似:

1
2
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 200G 16G 175G 9% /

✅ 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
2
3
4
5
6
# 创建新 LV 用于容器运行时(可选但推荐)
sudo lvcreate -L 100G -n containerd-lv ubuntu-vg
sudo mkfs.ext4 /dev/ubuntu-vg/containerd-lv
sudo mkdir /var/lib/containerd.new
sudo mount /dev/ubuntu-vg/containerd-lv /var/lib/containerd.new
# 迁移数据(需停 kubelet + containerd)

但这属于进阶优化,当前先完成根分区扩容即可。