1. systemd 自定义启动项
/etc/systemd/system
和 /usr/lib/systemd/system
的区别和用途,为什么优先使用 /etc/systemd/system
?
systemd 读取单元文件时,会按照优先级搜索:
/etc/systemd/system
/run/systemd/system
/usr/lib/systemd/system
这样可以让管理员通过在
/etc/systemd/system
放置自定义单元文件或者覆盖已有单元,实现定制化而不影响系统默认文件。举例:如果你想修改一个默认服务的启动参数,建议复制对应文件到
/etc/systemd/system
,然后修改;系统升级时不会覆盖你的改动。
1.1 k8s-modules.service
cat > /etc/systemd/system/k8s-modules.service <<EOF
# 描述:开机自动加载 Kubernetes 所需内核模块,并自动启动 sysctl-k8s 服务
[Unit]
Description=Load Kubernetes required kernel modules
# 保证在网络初始化之前加载内核模块
Before=network-pre.target
# 希望 network-pre.target 启动,也希望自动启动 sysctl-k8s.service
Wants=network-pre.target sysctl-k8s.service
# 关闭默认依赖,手动控制依赖关系顺序
DefaultDependencies=no
[Service]
# 一次性任务,执行完即退出
Type=oneshot
# 加载k8s需要用到的内核模块
ExecStart=/etc/sysconfig/modules/ipvs.modules
ExecStart=/etc/sysconfig/modules/br_netfilter.modules
# 执行完成后服务状态保持激活
RemainAfterExit=yes
[Install]
# 系统进入多用户运行级别时自动启动
WantedBy=multi-user.target
EOF
1.2 sysctl-k8s.service
cat > /etc/systemd/system/sysctl-k8s.service <<EOF
[Unit]
Description=应用 Kubernetes 所需的 sysctl 内核参数(适配麒麟系统)
# 确保该服务在网络初始化前执行,以便内核参数(如 ip_forward)及时生效
Before=network-pre.target
Wants=network-pre.target
# 确保内核模块先加载,避免 sysctl 参数路径不存在
After=k8s-modules.service
Requires=k8s-modules.service
# 禁用默认依赖,防止 systemd 自动附加不必要的依赖链,确保尽早启动
DefaultDependencies=no
# 关于为什么不用 sysctl --system:
# sysctl --system 会加载多个路径的 *.conf 配置文件
# 但其依赖 systemd-sysctl.service 来实现自动执行,而麒麟系统中该服务可能未启用或执行顺序靠后
# 导致某些关键参数(如 ip_forward)在 kubelet 或网络插件启动前未生效
# 所以使用 systemd 单独编排此 service 是更稳定可靠的做法
[Service]
Type=oneshot
# 加载我们自定义的 Kubernetes 所需 sysctl 配置
ExecStart=/usr/sbin/sysctl -p /etc/sysctl.d/k8s.conf
RemainAfterExit=true
[Install]
# 设置为在多用户模式下自动启动,确保开机时加载
WantedBy=multi-user.target
EOF
2. LVM逻辑卷管理器
[root@hybxvdka01 appuser]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 100G 0 disk
├─vda1 253:1 0 500M 0 part /boot/efi
├─vda2 253:2 0 1G 0 part /boot
└─vda3 253:3 0 96G 0 part
├─rootvg-root 252:0 0 30G 0 lvm /
├─rootvg-swap 252:4 0 16G 0 lvm
├─rootvg-kdump 252:5 0 10G 0 lvm /kdump
├─rootvg-tmp 252:6 0 10G 0 lvm /tmp
└─rootvg-var 252:7 0 10G 0 lvm /var
vdb 253:16 0 200G 0 disk
├─vg_app-lv_app 252:1 0 50G 0 lvm /app
├─vg_app-lv_data 252:2 0 10G 0 lvm /data
└─vg_app-lv_log 252:3 0 5G 0 lvm /log
步骤 1:确认当前空间和 VG 剩余空间
# 查看当前逻辑卷(LV)信息
[root@hybxvdka01 appuser]# lvdisplay /dev/vg_app/lv_data
--- Logical volume ---
LV Path /dev/vg_app/lv_data
LV Name lv_data
VG Name vg_app
LV UUID bMYIde-dZMr-9kww-vFVi-xYQC-0QRf-PsplA1
LV Write Access read/write
LV Creation host, time hybxvdka01, 2025-07-18 19:10:37 +0800
LV Status available
# open 1
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 252:2
# 查看卷组(VG)剩余空间
[root@hybxvdka01 appuser]# vgdisplay vg_app
--- Volume group ---
VG Name vg_app
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size <200.00 GiB
PE Size 4.00 MiB
Total PE 51199
Alloc PE / Size 16640 / 65.00 GiB
Free PE / Size 34559 / <135.00 GiB
VG UUID u3OXCb-NHy7-SHQm-ggpU-f59e-7ia5-l38bGK
# 方法1:直接扩展到 50G(推荐)
lvextend -L 50G /dev/vg_app/lv_data
# 或方法2:增加 40G(等效操作)
lvextend -L +40G /dev/vg_app/lv_data
# 调整文件系统
如果是 ext4: resize2fs /dev/vg_app/lv_data
如果是 xfs: xfs_growfs /data
[root@hybxvdka01 appuser]# xfs_growfs /data
meta-data=/dev/mapper/vg_app-lv_data isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2621440 to 13107200
[root@hybxvdka01 appuser]# df -h /data/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_app-lv_data 50G 392M 50G 1% /data
2.1 空间转移
rootvg-var 空间告急了,rootvg-swap基本是用不上了,直接删了他将空间给rootvg-var使用。
[appuser@hybxvdka01 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 100G 0 disk
├─vda1 253:1 0 500M 0 part /boot/efi
├─vda2 253:2 0 1G 0 part /boot
└─vda3 253:3 0 96G 0 part
├─rootvg-root 252:0 0 30G 0 lvm /
├─rootvg-swap 252:4 0 16G 0 lvm
├─rootvg-kdump 252:5 0 10G 0 lvm /kdump
├─rootvg-tmp 252:6 0 10G 0 lvm /tmp
└─rootvg-var 252:7 0 10G 0 lvm /var
vdb 253:16 0 200G 0 disk
├─vg_app-lv_app 252:1 0 50G 0 lvm /app
├─vg_app-lv_data 252:2 0 50G 0 lvm /data
└─vg_app-lv_log 252:3 0 5G 0 lvm /log
# 1. 删除 swap 的逻辑卷
sudo lvremove -y /dev/rootvg/swap
# 2. 扩容 /var(加上 swap 释放的 16G)
sudo lvextend -L +16G /dev/rootvg/var
# 3. 在线扩容文件系统(假设 /var 是 XFS 文件系统)
sudo xfs_growfs /var