You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AMI创建后containerd运行时配置未持久化问题求助

问题原因及解决方法

核心原因

  1. EKS节点初始化脚本覆盖配置:AWS EKS默认的节点bootstrap脚本(/etc/eks/bootstrap.sh)会在节点启动时重新生成或修改/etc/containerd/config.toml,以适配EKS集群环境,这会直接覆盖你制作AMI时手动添加的NVIDIA Runtime配置。
  2. 未固化配置或跳过自动重置:制作AMI前若未确保配置写入磁盘、未禁用初始化流程的配置重置逻辑,会导致自定义配置无法持久化到AMI中。

解决方法

方法1:修改Bootstrap脚本,跳过配置重置

在制作AMI的源实例上,编辑/etc/eks/bootstrap.sh,添加判断逻辑避免覆盖已有自定义配置:

# 找到脚本中生成containerd配置的部分,替换为以下逻辑
if grep -q "nvidia" /etc/containerd/config.toml; then
    echo "自定义containerd配置已存在,跳过重置"
else
    # 保留原有的默认配置生成代码
    containerd config default > /etc/containerd/config.toml
    # 其他原有的配置修改代码
fi

方法2:添加Post-Bootstrap钩子应用自定义配置

  1. 在源实例创建/etc/eks/post-bootstrap.sh脚本:
#!/bin/bash
# 覆盖containerd配置为自定义内容
cat > /etc/containerd/config.toml << EOF
root = "/var/lib/containerd"
state = "/run/containerd"
version = 2

[grpc]
  address = "/run/containerd/containerd.sock"

[plugins]

  [plugins."io.containerd.grpc.v1.cri"]
    sandbox_image = "602401143452.dkr.ecr.eu-central-1.amazonaws.com/eks/pause:3.5"

    [plugins."io.containerd.grpc.v1.cri".cni]
      bin_dir = "/opt/cni/bin"
      conf_dir = "/etc/cni/net.d"

    [plugins."io.containerd.grpc.v1.cri".containerd]
      default_runtime_name = "nvidia"
      discard_unpacked_layers = true

      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]

        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia]
          privileged_without_host_devices = false
          runtime_engine = ""
          runtime_root = ""
          runtime_type = "io.containerd.runc.v2"

          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options]
            BinaryName = "/usr/bin/nvidia-container-runtime"
            SystemdCgroup = true

        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
          runtime_type = "io.containerd.runc.v2"

          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
            SystemdCgroup = true

    [plugins."io.containerd.grpc.v1.cri".registry]
      config_path = "/etc/containerd/certs.d:/etc/docker/certs.d"
EOF
systemctl restart containerd
  1. 赋予脚本执行权限:
chmod +x /etc/eks/post-bootstrap.sh
  1. 修改/etc/eks/bootstrap.sh,在脚本末尾添加:
/etc/eks/post-bootstrap.sh

方法3:制作AMI前固化配置

在源实例修改完配置后,执行以下操作确保配置写入磁盘并禁用自动重置:

# 重启containerd使配置生效
systemctl restart containerd
# 强制写入磁盘
sync
# 停止containerd避免运行时临时文件干扰快照
systemctl stop containerd

随后停止源实例,制作AMI。

方法4:通过启动模板UserData注入配置(托管节点组适用)

如果使用EKS托管节点组,可在启动模板的UserData中直接注入完整的自定义配置:

#!/bin/bash
cat > /etc/containerd/config.toml << EOF
# 此处粘贴你的完整自定义config.toml内容
EOF
systemctl restart containerd

验证步骤

  1. 使用修改后的AMI启动测试节点
  2. 登录节点检查/etc/containerd/config.toml是否包含NVIDIA Runtime配置
  3. 运行systemctl status containerd确认服务正常
  4. 部署GPU测试Pod验证Runtime功能

内容的提问来源于stack exchange,提问作者Abiud Rds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:17:15