4. 迁移前评估:当前集群 Containerd 版本检测、节点操作系统兼容性、GPU/NPU 等特殊硬件驱动依赖

在正式执行 Containerd 运行时版本迁移之前,必须对集群现状进行系统性评估。跳过评估直接迁移可能导致节点不可用、Pod 调度失败或硬件加速能力丧失。本章聚焦三个核心评估维度:运行时版本基线、操作系统兼容性矩阵、GPU/NPU 等特殊硬件驱动依赖。

4.1 当前集群 Containerd 版本检测

版本检测需要覆盖集群中所有节点,包括 Control Plane 和 Worker 节点。推荐使用以下命令获取精确版本信息:

# 检测单个节点 containerd 版本
containerd --version

# 通过 crictl 获取运行时版本(需配置 endpoint)
crictl version

# 批量检测所有节点(使用 kubectl 和 node-shell 或直接 SSH)
kubectl get nodes -o wide
for node in $(kubectl get nodes -o name); do
  echo "=== $node ==="
  kubectl node-shell $node -- containerd --version 2>/dev/null || \
  ssh $node "containerd --version"
done

版本检测结果应记录到评估清单中,重点关注以下字段:

检测项 命令/方法 关键输出字段
Containerd 版本 containerd --version v1.6.x / v1.7.x / v2.0.x
CRI 实现版本 crictl version RuntimeName: containerd, RuntimeVersion
Runc 版本 runc --version runc version spec: 1.0.0+dev
CNI 插件版本 cni-plugins --version v1.3.0
⚠️ 版本兼容性红线:Kubernetes 1.24+ 已移除 dockershim,必须使用 containerd 1.6+ 或 CRI-O。若集群仍使用 containerd 1.5.x,需先升级至 1.6 LTS 再规划迁移。同时检查 crictl 与 containerd 的版本匹配关系,避免管理工具与运行时版本脱节。

4.2 节点操作系统兼容性评估

不同 Linux 发行版对 containerd 版本的支持窗口存在差异。以下表格列出主流操作系统与 containerd 版本的兼容关系:

操作系统 Containerd 1.6.x Containerd 1.7.x Containerd 2.0.x 备注
Ubuntu 20.04 LTS ✅ 官方支持 ✅ 官方支持 ⚠️ 需手动安装 内核 ≥ 5.4
Ubuntu 22.04 LTS ✅ 官方支持 ✅ 官方支持 ✅ 官方支持 内核 ≥ 5.15
CentOS 7 / RHEL 7 ✅ 官方支持 ⚠️ 社区维护 ❌ 不推荐 需升级 glibc
CentOS 8 / RHEL 8 ✅ 官方支持 ✅ 官方支持 ⚠️ 需验证 内核 ≥ 4.18
Rocky Linux 9 ✅ 官方支持 ✅ 官方支持 ✅ 官方支持 内核 ≥ 5.14
Debian 11 ✅ 官方支持 ✅ 官方支持 ⚠️ 需手动安装 内核 ≥ 5.10

操作系统评估还需检查以下关键依赖:

  • glibc 版本:containerd 2.0+ 要求 glibc ≥ 2.28,CentOS 7 默认 2.17 不满足。
  • systemd 版本:推荐 systemd ≥ 245 以支持 cgroup v2。
  • 内核参数:检查 net.ipv4.ip_forward、overlay 模块、br_netfilter 是否启用。
  • cgroup 驱动:确认当前使用 cgroupfs 还是 systemd 驱动,迁移后需保持一致。
💡 评估技巧:使用 kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.nodeInfo.osImage}{"\t"}{.status.nodeInfo.kernelVersion}{"\n"}{end}' 快速获取所有节点的操作系统和内核版本,生成基线报告。

4.3 GPU/NPU 等特殊硬件驱动依赖

运行 AI/ML 工作负载的集群通常依赖 GPU(NVIDIA、AMD)或 NPU(华为昇腾、寒武纪)等加速硬件。Containerd 版本迁移可能影响设备插件、运行时钩子及驱动加载机制。以下 SVG 展示了 GPU 工作节点在 containerd 迁移前后的组件依赖关系:

GPU/NPU 节点 Containerd 迁移依赖关系图 GPU/NPU 节点 Containerd 迁移依赖关系 迁移前(Containerd v1.6.x) Containerd v1.6.x NVIDIA Container Toolkit v1.12 nvidia-device-plugin v0.14 runc v1.1.x NVIDIA Driver 535 迁移后(Containerd v2.0.x) Containerd v2.0.x NVIDIA Container Toolkit v1.15+ nvidia-device-plugin v0.16+ runc v1.2.x NVIDIA Driver 550+ 迁移 ⚠️ 迁移后需同步升级 NVIDIA Container Toolkit 和 Device Plugin 版本,否则 GPU 加速功能将失效

4.4 特殊硬件驱动依赖检查清单

针对 GPU/NPU 节点,迁移前必须逐项确认以下依赖状态:

检查项 验证方法 迁移前要求 迁移后要求
NVIDIA 驱动版本 nvidia-smi ≥ 470.xx ≥ 535.xx(推荐 550+)
NVIDIA Container Toolkit nvidia-ctk --version ≥ 1.12.0 ≥ 1.15.0
nvidia-device-plugin kubectl describe ds nvidia-device-plugin ≥ 0.14.0 ≥ 0.16.0
runc 版本 runc --version ≥ 1.1.0 ≥ 1.2.0
cgroup 版本 stat -fc %T /sys/fs/cgroup/ cgroupfs 或 systemd 推荐统一使用 systemd
NPU 驱动(华为昇腾) npu-smi info ≥ 20.0.0 ≥ 22.0.0
🔍 实战建议:在测试环境搭建与生产环境相同硬件配置的节点,执行完整的 containerd 版本迁移演练。重点关注 GPU 设备插件 Pod 的启动日志,确认 nvidia-container-runtime 钩子在新版本 containerd 下正常触发。使用 crictl logs <pod-id> 查看 GPU 工作负载的容器日志,验证 CUDA 版本与驱动兼容性。

4.5 评估输出与风险标记

完成上述评估后,应生成一份结构化的评估报告,包含以下内容:

  • 版本基线表:每个节点的 containerd、runc、cni-plugins 版本。
  • 操作系统兼容性矩阵:标记不兼容节点(如 CentOS 7 需升级或替换)。
  • 硬件驱动依赖清单:GPU/NPU 节点的驱动版本、工具链版本、设备插件版本。
  • 风险等级标记:高风险(驱动不兼容、操作系统过旧)、中风险(工具链版本需同步升级)、低风险(仅版本号差异)。

评估报告将作为后续迁移策略制定和 Helm Chart 回滚适配的核心输入。只有所有节点通过评估,才能进入下一阶段的迁移执行。