AI Infra 训练营
总览
  • 总览
  • 完整安装
  • 核心 K8s
  • Cilium 网络
  • Longhorn 存储
  • 监控日志
  • CI / GitOps
  • 安全准入
  • CI/CD 实战(MySQL+Go+Vue)
  • HPA/Ingress/Hubble 实战
  • 面试速查 + 真实踩坑
  • Day 0 · 新手接管 Runbook
  • Day 1 · 集群起步 + CNI
  • Day 2 · 控制面 + etcd
  • Day 3 · CRD + Operator + Webhook
  • Day 4 · 存储深度
  • Day 5 · 卷扩容 + 安全
  • Day 6 · 调度 + 可观测
  • Day 7 · Harbor + ArgoCD + Mesh
  • Day 8 · AI Infra
  • Day 9 · Triton + GPU
  • Day 10 · MIG + HPA + 量化
  • Day 11 · AI Agent 端到端
  • Day 12 · 灾备
  • Day 13 · Operator + 联邦 + Mesh + RAG
  • Day 14 · CKA / CKS + 总结
  • LLM 训练手册
  • RAG + Agent 手册
  • 推理优化手册
  • 上下文工程手册
  • Agent 开发手册
  • 面试深度复盘
  • 训练 v2 深度手册
  • 心智模型
  • 看懂命令输出
  • 容器网络底层
  • K8s 网络深入
  • DNS 全套
  • 故障排查方法论
  • 心智模型
  • 容器挂载完整指南
  • K8s Volumes 大全
  • PV/PVC/CSI 深入
  • NFS 深入
  • 分布式存储概览
  • 故障排查 runbook
命令手册
HiHuo 主站
GitHub
总览
  • 总览
  • 完整安装
  • 核心 K8s
  • Cilium 网络
  • Longhorn 存储
  • 监控日志
  • CI / GitOps
  • 安全准入
  • CI/CD 实战(MySQL+Go+Vue)
  • HPA/Ingress/Hubble 实战
  • 面试速查 + 真实踩坑
  • Day 0 · 新手接管 Runbook
  • Day 1 · 集群起步 + CNI
  • Day 2 · 控制面 + etcd
  • Day 3 · CRD + Operator + Webhook
  • Day 4 · 存储深度
  • Day 5 · 卷扩容 + 安全
  • Day 6 · 调度 + 可观测
  • Day 7 · Harbor + ArgoCD + Mesh
  • Day 8 · AI Infra
  • Day 9 · Triton + GPU
  • Day 10 · MIG + HPA + 量化
  • Day 11 · AI Agent 端到端
  • Day 12 · 灾备
  • Day 13 · Operator + 联邦 + Mesh + RAG
  • Day 14 · CKA / CKS + 总结
  • LLM 训练手册
  • RAG + Agent 手册
  • 推理优化手册
  • 上下文工程手册
  • Agent 开发手册
  • 面试深度复盘
  • 训练 v2 深度手册
  • 心智模型
  • 看懂命令输出
  • 容器网络底层
  • K8s 网络深入
  • DNS 全套
  • 故障排查方法论
  • 心智模型
  • 容器挂载完整指南
  • K8s Volumes 大全
  • PV/PVC/CSI 深入
  • NFS 深入
  • 分布式存储概览
  • 故障排查 runbook
命令手册
HiHuo 主站
GitHub
  • 命令手册总览
  • SSH 与远程执行

    • ssh —— 远程登录与远程执行
    • ssh-config —— ~/.ssh/config 客户端配置文件
    • ssh-keygen —— 密钥对生成与 known_hosts 维护
    • sshd —— SSH 服务端守护进程与硬化
    • sshpass —— 密码登录自动化(仅限"首次推 key"场景)
    • scp / rsync —— 远程文件拷贝
    • nsenter —— 进入 Linux namespace 的"传送门"
  • 系统状态与诊断

    • systemd-detect-virt —— 探测当前运行环境的虚拟化类型
    • systemctl —— systemd 服务管理的总入口
    • journalctl —— systemd 日志查询
    • hostnamectl / timedatectl —— 改主机名与时区
    • ss —— socket statistics(替代 netstat)
    • lsblk / df / du —— 三个被混淆的"看磁盘"命令
  • 进程与资源

    • ps —— 看进程
    • top / htop —— 实时进程资源监控
    • lsof —— 列出打开的文件(list open files)
    • strace —— 系统调用追踪
    • dmesg —— 看内核环形缓冲日志
    • iostat —— 磁盘 I/O 性能分析
    • iotop —— 进程级 I/O 实时监控
  • 文本与文件批处理

    • grep —— 文本搜索
    • sed —— 流编辑器
    • awk —— 按字段处理文本
    • jq —— JSON 命令行处理器
    • find —— 按各种条件找文件
    • xargs —— 把 stdin 喂给下一个命令
    • tee —— 一边输出、一边写文件
  • 磁盘与存储

    • mount / umount —— 挂载文件系统
    • mkfs —— 格式化文件系统
    • /etc/fstab —— 持久化挂载配置
    • parted / fdisk —— 分区表管理
    • LVM —— pvcreate / vgcreate / lvcreate 三件套
    • findmnt —— 现代化的"看挂载"命令
    • nfsstat / showmount —— NFS 状态与性能
    • smartctl —— 盘健康检查与坏盘预警
  • 网络诊断

    • curl —— HTTP 客户端的瑞士军刀
    • ip —— 现代 Linux 网络配置工具(替代 ifconfig / route)
    • iptables —— Linux 内核包过滤 / NAT 规则
    • tcpdump —— 命令行抓包
    • dig —— DNS 查询工具
    • mtr —— traceroute + ping 合体
    • iperf3 —— 网络带宽测试
    • nc (netcat) —— 网络瑞士军刀
    • ethtool —— 物理网卡参数 / 速率 / offload
  • 内核 / 包管理 / 时间

    • modprobe / lsmod —— 内核模块加载
    • sysctl —— 内核运行时参数
    • apt / apt-get / dpkg —— Debian / Ubuntu 包管理
    • chrony / chronyc —— NTP 时间同步
  • K8s / 容器工具链

    • kubectl —— K8s 的瑞士军刀
    • kubeadm —— K8s 集群引导工具
    • helm —— K8s 应用包管理器
    • crictl —— 容器运行时命令行(CRI 层)
    • etcdctl —— 直连 K8s 元数据存储
    • docker —— 单机容器(构建和本地开发)
  • 监控 / GitOps / 备份

    • argocd —— GitOps CLI
    • velero —— K8s 集群备份恢复
    • prometheus / promtool —— 监控数据查询和工具
    • cilium / cilium-cli / hubble —— eBPF CNI 排错
    • grafana / grafana-cli —— 可视化平台运维
    • alertmanager / amtool —— 告警分组、抑制、路由
  • 开发 / 构建 / 终端

    • git —— 版本控制 + GitOps 的底座
    • make / Makefile —— 任务编排
    • openssl —— 证书 / 密钥 / TLS 调试工具箱
    • tmux —— 终端复用 / 长跑任务防掉线
    • vim —— 远程编辑必备最小集
    • cron / crontab —— 定时任务

modprobe / lsmod —— 内核模块加载

一句话定义

Linux 内核大部分功能(驱动、网络协议、文件系统)以模块形式存在,按需加载。modprobe 加载 / 卸载模块,lsmod 看现在装载着哪些。K8s 装机必加载几个模块:br_netfilter、overlay、ip_vs_*。

典型场景

  • Day0 装 K8s 前:加 br_netfilter + overlay
  • 用 IPVS 模式 kube-proxy:加 ip_vs 系列
  • 装新文件系统支持:modprobe xfs
  • 内核模块开机自动加载:/etc/modules-load.d/*.conf

看现在装载了哪些模块

lsmod                            # 列所有
lsmod | head
# Module                  Size  Used by
# br_netfilter           32768  0
# bridge                258048  1 br_netfilter
# overlay               147456  21
# nf_conntrack          172032  4 nf_nat,...
# ...
列含义
Module模块名
Size内存占用
Used by依赖它的其它模块数 + 名字

Used by 不为 0 表示有别的模块依赖——不能直接 rmmod,要先卸下游。

看某个模块

lsmod | grep br_netfilter
modinfo br_netfilter
# filename:       /lib/modules/.../br_netfilter.ko
# alias:          ...
# license:        GPL
# depends:        bridge
# ...

modinfo 显示模块文件位置、依赖、参数。


加载 / 卸载

modprobe br_netfilter                              # 加载
modprobe -r br_netfilter                            # 卸载(remove)
modprobe -n -v br_netfilter                         # dry-run(看会做什么,不真做)

modprobe --first-time br_netfilter                  # 已加载则报错

modprobe 会自动加载依赖——比 insmod 更智能。

验证加载成功

lsmod | grep br_netfilter
# br_netfilter           32768  0                ← 加载了

或者:

modprobe -n -v br_netfilter
# insmod /lib/modules/.../br_netfilter.ko

-n dry-run 不真加载、-v 显示动作。


开机自动加载:/etc/modules-load.d/*.conf

modprobe 加载是临时的,重启后没了。要持久:

cat > /etc/modules-load.d/k8s.conf <<'EOF'
br_netfilter
overlay
EOF

systemd 在开机时跑 systemd-modules-load.service,自动 modprobe 这个目录下所有文件里列的模块。

测试:

modprobe -r br_netfilter                            # 卸载
systemctl restart systemd-modules-load              # 重新加载
lsmod | grep br_netfilter                           # 应该回来

或者直接 reboot 后验证。

历史位置:/etc/modules

# /etc/modules
br_netfilter
overlay

老 Debian 系用的,仍然支持。新写法是 /etc/modules-load.d/。


K8s 必需模块

cat > /etc/modules-load.d/k8s.conf <<'EOF'
# 容器存储 overlay 驱动(containerd 用)
overlay

# bridge netfilter(让 iptables 看到 bridge 上的包)
br_netfilter

# IPVS(如果 kube-proxy 用 IPVS 模式)
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF

# 立即加载(不等重启)
modprobe overlay
modprobe br_netfilter
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack

各模块作用

模块作用
overlaycontainerd 镜像层叠(OverlayFS)
br_netfilter让 iptables / nftables 能看到桥接流量
bridgeLinux bridge(CNI 用)—— br_netfilter 自动带
ip_vs 系列IPVS 模式 kube-proxy
nf_conntracknetfilter conntrack(kube-proxy iptables 模式也用)

验证

lsmod | grep -E 'br_netfilter|overlay|ip_vs'
# overlay
# br_netfilter
# ip_vs_rr
# ...

模块参数

某些模块支持运行时参数:

modinfo -p e1000e
# debug:Debug level (0=none,...)
# eee:Enable/disable on parts that support the feature
# ...

# 加载时传参数
modprobe e1000e debug=1

持久化:

# /etc/modprobe.d/e1000e.conf
options e1000e debug=1

黑名单:禁止加载某模块

某些场景要阻止内核自动加载某模块(旧驱动 / 不安全):

# /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau                                   # NVIDIA 开源驱动
options nouveau modeset=0

加完之后需要 rebuild initramfs:

update-initramfs -u                                 # Debian / Ubuntu
dracut -f                                            # CentOS / RHEL

然后 reboot。

别名(alias)

# /etc/modprobe.d/alias.conf
alias eth0 e1000e                                    # 让 eth0 这个名字代表 e1000e

K8s 节点通常不需要 alias / blacklist,知道有就行。


卸载模块

modprobe -r br_netfilter                            # 推荐(处理依赖)
rmmod br_netfilter                                   # 老命令,不处理依赖

卸载失败:

modprobe: FATAL: Module br_netfilter is in use.

被别人用着。看 Used by:

lsmod | grep br_netfilter
# br_netfilter      32768  1 some_other_module

要先卸 some_other_module。

现代 K8s 节点几乎不需要卸载模块。除非排查疑难杂症。


模块文件在哪

ls /lib/modules/$(uname -r)/kernel/
# arch/  block/  crypto/  drivers/  fs/  kernel/  lib/  mm/  net/  ...

# 找某模块文件
find /lib/modules/$(uname -r) -name "br_netfilter*"
# /lib/modules/5.15.0-x/kernel/net/bridge/br_netfilter.ko

modinfo br_netfilter | grep filename
# 等价但更便捷

升级内核之后模块目录变——升级前要 apt install linux-image-$VERSION linux-modules-$VERSION,否则 reboot 后旧内核找不到新模块。


实战:Day0 配置

ssh root@$ip 'bash -s' <<'EOF'
# 1. 写 modules-load
cat > /etc/modules-load.d/k8s.conf <<'MOD'
overlay
br_netfilter
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
MOD

# 2. 立即加载
modprobe overlay
modprobe br_netfilter
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack

# 3. 验证
lsmod | grep -E 'overlay|br_netfilter|ip_vs|nf_conntrack'

# 4. 之后 sysctl 才能生效(见 sysctl.md)
EOF

常见踩坑

坑 1:sysctl 报 "cannot stat /proc/sys/net/bridge/..."

sysctl -w net.bridge.bridge-nf-call-iptables=1
# sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory

br_netfilter 模块没装。先 modprobe:

modprobe br_netfilter
sysctl -w net.bridge.bridge-nf-call-iptables=1

并写 /etc/modules-load.d/k8s.conf 持久化。

坑 2:modprobe 之后重启又没了

modprobe br_netfilter
reboot
lsmod | grep br_netfilter                           # 空

modprobe 是临时的。写 /etc/modules-load.d/:

echo 'br_netfilter' > /etc/modules-load.d/k8s.conf

坑 3:模块名拼错

modprobe br_netfilters                              # 多了 s
# modprobe: FATAL: Module br_netfilters not found

正确:br_netfilter(无 s)。modinfo 或 lsmod 看正确名字。

坑 4:升内核后模块没了

apt upgrade -y                                      # 升内核到 5.15 → 5.16
reboot
modprobe br_netfilter
# modprobe: FATAL: Module br_netfilter not found in directory /lib/modules/5.16.0-x

升内核时没装对应 modules 包。修:

apt install -y linux-modules-extra-$(uname -r)
# 或
apt install -y linux-image-$(uname -r) linux-modules-$(uname -r)

最稳的:每次升内核之前 apt install -y linux-image-... linux-modules-extra-...。

坑 5:模块依赖问题

modprobe ip_vs_rr
# modprobe: ERROR: could not insert 'ip_vs_rr': Unknown symbol in module

依赖的模块 ip_vs 没有加载。modprobe 应该自动处理,但有时碰到内核版本不匹配。

modprobe ip_vs                                      # 先加 base
modprobe ip_vs_rr                                   # 再加子模块

坑 6:blacklist 没生效

echo "blacklist nouveau" > /etc/modprobe.d/blacklist.conf
reboot
lsmod | grep nouveau
# 还在

blacklist 只防止"自动加载"——initramfs 已经加载的可能不算。重建 initramfs:

update-initramfs -u                                 # Debian
dracut -f                                            # RHEL
reboot

坑 7:modules-load.d 文件名错

cat /etc/modules-load.d/k8s                         # 没 .conf 后缀
# br_netfilter
reboot
lsmod | grep br_netfilter                           # 没加载

必须 .conf 后缀:

mv /etc/modules-load.d/k8s /etc/modules-load.d/k8s.conf

坑 8:测试 sysctl-related 模块的"先后顺序"

# 改了 modules-load 但没立刻 modprobe
echo 'br_netfilter' > /etc/modules-load.d/k8s.conf
# 然后想 sysctl -w net.bridge.... → 失败

写 modules-load.d 只决定下次启动自动加载。当前没生效——要手动 modprobe。

正确顺序:

# 1. 写持久化(下次开机)
echo 'br_netfilter' > /etc/modules-load.d/k8s.conf

# 2. 现在立刻加载
modprobe br_netfilter

# 3. 应用 sysctl
sysctl -w net.bridge.bridge-nf-call-iptables=1

坑 9:在容器里跑 modprobe

kubectl exec my-pod -- modprobe overlay
# modprobe: ERROR: could not insert ...: Operation not permitted

容器没 CAP_SYS_MODULE,改不了内核状态。

模块属于节点全局,应该在节点上加载,pod 自动用到。


一些常被问的"内核 vs 模块" 概念

  • 内核分编译进内核(builtin) 和模块(loadable) 两种功能
  • 看 cat /lib/modules/$(uname -r)/builtin.modules:编译进去的
  • 模块装载是动态的、不需要重启内核
  • 容器跟节点共享内核 / 共享模块(pod 不能改)

K8s 节点上的模块对所有 pod 生效——所以 br_netfilter 在节点加一次,所有 pod 网络都能用。


关联命令

  • sysctl —— 某些 sysctl 依赖模块(br_netfilter)
  • systemctl —— systemd-modules-load.service 启动时跑
  • dmesg —— 模块加载 / 卸载会在 dmesg 留痕
  • insmod / rmmod —— modprobe 的底层(不处理依赖、少用)
  • depmod —— 重建模块依赖图(升内核或装新模块后)
  • update-initramfs —— Debian 重建启动 initrd
在 GitHub 上编辑此页
Next
sysctl —— 内核运行时参数