K8S 节点磁盘与 LVM 标准化操作手册
📌 一、适用场景
Kubernetes 节点初始化
腾讯云 / 阿里云 / AWS 云硬盘挂载
容器运行环境(containerd / docker)
数据分析 / 风控系统节点
🧱 二、磁盘架构设计
云硬盘 (/dev/vdb, /dev/vdc)
↓
LVM(data_vg)
↓
┌───────────────┬───────────────┬───────────────┐
│ /data │ /var/lib/... │ /var/log │
│ data_lv │ docker_lv │ log_lv │
└───────────────┴───────────────┴───────────────┘
⚙️ 三、一键初始化脚本(推荐)
⚠️ 适用于“新磁盘(无数据)”
#!/bin/bash
set -e
VG_NAME="data_vg"
DISKS=("/dev/vdb" "/dev/vdc") # 按实际修改
echo ">>> 创建 PV"
pvcreate ${DISKS[@]}
echo ">>> 创建 VG"
vgcreate $VG_NAME ${DISKS[@]}
echo ">>> 创建 LV"
lvcreate -L 150G -n data_lv $VG_NAME
lvcreate -L 150G -n docker_lv $VG_NAME
lvcreate -L 50G -n log_lv $VG_NAME
echo ">>> 格式化为 XFS"
mkfs.xfs /dev/$VG_NAME/data_lv
mkfs.xfs /dev/$VG_NAME/docker_lv
mkfs.xfs /dev/$VG_NAME/log_lv
echo ">>> 创建挂载点"
mkdir -p /data
mkdir -p /var/lib/containerd
mkdir -p /var/log
echo ">>> 挂载"
mount /dev/$VG_NAME/data_lv /data
mount /dev/$VG_NAME/docker_lv /var/lib/containerd
mount /dev/$VG_NAME/log_lv /var/log
echo ">>> 写入 fstab"
blkid | grep $VG_NAME | while read line; do
UUID=$(echo $line | awk -F '"' '{print $2}')
DEVICE=$(echo $line | awk -F: '{print $1}')
if [[ $DEVICE == *data_lv ]]; then
echo "UUID=$UUID /data xfs defaults,nofail 0 2" >> /etc/fstab
elif [[ $DEVICE == *docker_lv ]]; then
echo "UUID=$UUID /var/lib/containerd xfs defaults,nofail 0 2" >> /etc/fstab
elif [[ $DEVICE == *log_lv ]]; then
echo "UUID=$UUID /var/log xfs defaults,nofail 0 2" >> /etc/fstab
fi
done
echo ">>> 验证挂载"
mount -a
df -h
echo ">>> 完成"
🚀 四、扩容操作手册
4.1 扩容已有 LV(推荐)
自动扩容 + 文件系统
lvextend -r -l +100%FREE /dev/data_vg/data_lv
指定扩容大小
lvextend -r -L +50G /dev/data_vg/docker_lv
4.2 新增磁盘扩容
1️⃣ 初始化新磁盘
pvcreate /dev/vdd
2️⃣ 加入 VG
vgextend data_vg /dev/vdd
3️⃣ 扩容 LV
lvextend -r -l +100%FREE /dev/data_vg/data_lv
🔍 五、常用排查命令
查看磁盘结构
lsblk
查看 VG 剩余空间
vgs
查看 LV
lvs
查看文件系统
df -h
查看 inode
df -i
查看目录占用
du -sh /var/lib/containerd/*
du -sh /var/log/*
⚠️ 六、K8S 专项优化
6.1 containerd 日志限制
vim /etc/containerd/config.toml
或 docker:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
6.2 日志清理(临时)
find /var/log -type f -name "*.log" -size +500M -exec truncate -s 0 {} \;
📊 七、推荐容量规划
| 目录 | 建议比例 |
|---|---|
| /data | 50~60% |
| /var/lib/containerd | 20~30% |
| /var/log | 10% |
| VG 预留 | 5~10% |
❗ 八、避坑指南
❌ 不要这样做
mkfs.ext4 /dev/vdb
mount /dev/vdb /data
👉 无法扩容、无法拆分
❌ VG 用满
0 FREE
👉 后续无法扩容
❌ 不验证 fstab
mount -a
👉 必须执行,否则可能开机失败
✅ 九、最佳实践总结
所有数据盘统一进入 VG
docker / containerd 必须独立 LV
日志必须隔离
预留 VG 空间用于扩容
扩容统一使用
lvextend -r
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu