K8S 节点磁盘与 LVM 标准化操作手册

AI摘要
该内容为一份关于在Kubernetes节点及云服务器环境下,使用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 协议》,转载必须注明作者和本文链接
每天一点小知识,到那都是大佬,哈哈
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!