K8S新增加节点网络插件问题
报错信息:
Failed to create pod sandbox: open /run/systemd/resolve/resolv.conf: no such file or directory
从报错信息 Failed to create pod sandbox: open /run/systemd/resolve/resolv.conf: no such file or directory 来看,是创建 Pod 沙箱时,找不到 /run/systemd/resolve/resolv.conf 文件导致的问题,以下是一些排查和解决思路:
1. 检查系统环境与配置
- 确认系统服务状态:
这个文件通常与 systemd-resolved 服务相关,先检查该服务是否正常运行(以常见的 Linux 发行版如 Ubuntu 为例):
systemctl status systemd-resolved
如果服务未运行,尝试启动并设置开机自启:
systemctl start systemd-resolved
systemctl enable systemd-resolved
不同 Linux 发行版(如 CentOS、RHEL 等)对网络解析服务的管理可能有差异,若不是 systemd-resolved 负责,需对应调整排查逻辑,比如有些系统用 networkmanager 等管理 DNS 配置,那我们就用下面的方式:
- 手动创建 / 修复文件:
如果服务正常,但文件确实缺失,可尝试手动创建软链接(需结合系统实际 DNS 配置逻辑,以下是常见做法示例):
# 先确认系统真实的 resolv.conf 位置,比如可能在 /etc/resolv.conf(若未被 systemd-resolved 接管时)
# 创建软链接到 /run/systemd/resolve/resolv.confln
ln -s /etc/resolv.conf /run/systemd/resolve/resolv.conf
操作前注意备份原有配置,避免引发新问题,且要确保 /etc/resolv.conf 本身是有效的 DNS 解析配置文件(包含正确的 nameserver 等信息 )。
一般通过以上的步骤就可以解决了。
2. 关联 Kubernetes 配置调整
- 容器运行时与 CNI 插件:
Pod 沙箱创建由容器运行时(如 containerd、cri-o 等 )和 CNI(容器网络接口)插件协同完成,检查 CNI 插件配置(比如 Calico、Flannel 等),确保网络配置能正确处理 DNS 相关挂载或文件依赖。
以 containerd 为例,确认其配置中对 resolv.conf 等文件的处理逻辑,查看 /etc/containerd/config.toml 等配置文件,检查是否有与网络、沙箱创建相关的异常配置。
- Kubernetes 节点配置:
在 Kubernetes 节点上,检查 kubelet 相关配置,确认节点的 DNS 策略(如 ClusterFirst 等 )是否与实际网络环境匹配。可以尝试重启 kubelet 服务(systemctl restart kubelet ),让其重新加载配置、尝试创建 Pod 沙箱。
另外,也可检查节点的 /etc/hosts、/etc/resolv.conf 等基础网络配置文件是否正常,确保节点本身网络解析功能无问题,因为 Pod 沙箱创建依赖节点的网络环境基础。