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

通过Helm部署到本地K3s的NeuVector Pod无法启动:未知容器运行时

NeuVector无法识别containerd运行时导致Pod启动失败的解决方案

问题背景

在搭载containerd的K3s实例上,通过以下Helm命令安装NeuVector:

helm repo add neuvector https://neuvector.github.io/neuvector-helm/

helm upgrade --install neuvector neuvector/core --version 2.2.4 --set tag=5.0.4 --set registry=docker.io --create-namespace --namespace neuvector

安装后controller和enforcer Pod无法正常启动,日志报错:

2023-07-06T19:45:24|MON|/usr/local/bin/monitor starts, pid=1 
2023-07-06T19:45:24|MON|Start ctrl, pid=7
2023-07-06T19:45:24.035|INFO|CTL|main.main: START - version=v5.0.4
2023-07-06T19:45:24.035|INFO|CTL|main.main: - join=neuvector-svc-controller.neuvector
2023-07-06T19:45:24.035|INFO|CTL|main.main: - advertise=10.42.0.241
2023-07-06T19:45:24.035|INFO|CTL|main.main: - bind=10.42.0.241
2023-07-06T19:45:24.039|INFO|CTL|system.NewSystemTools: cgroup v2
2023-07-06T19:45:24.039|INFO|CTL|container.Connect: - endpoint=
2023-07-06T19:45:24.039|ERRO|CTL|main.main: Failed to initialize - error=Unknown container runtime
2023-07-06T19:45:24|MON|Process ctrl exit status 254, pid=7
2023-07-06T19:45:24|MON|Process ctrl exit with non-recoverable return code. Monitor Exit!!
Leave the cluster
Error leaving: Put "http://127.0.0.1:8500/v1/agent/leave": dial tcp 127.0.0.1:8500: connect: connection refused
2023-07-06T19:45:24|MON|Clean up.
Stream closed EOF for neuvector/neuvector-controller-pod-54c7bdc784-rq9np (neuvector-controller-pod)

已确认containerd服务正常运行,但NeuVector无法识别到该运行时。

解决方案

问题根源在于K3s使用的containerd套接字路径和命名空间与标准containerd不同,需要在Helm安装时显式指定这些参数:

  1. 修改Helm安装命令,指定containerd运行时参数
    执行以下命令重新安装NeuVector,明确指定runtime类型、套接字地址和命名空间:
helm upgrade --install neuvector neuvector/core --version 2.2.4 --set tag=5.0.4 --set registry=docker.io --create-namespace --namespace neuvector \
  --set controller.runtime=containerd \
  --set controller.containerd.address=unix:///run/k3s/containerd/containerd.sock \
  --set controller.containerd.namespace=k8s.io \
  --set enforcer.runtime=containerd \
  --set enforcer.containerd.address=unix:///run/k3s/containerd/containerd.sock \
  --set enforcer.containerd.namespace=k8s.io
  1. 验证containerd配置
    确认K3s的containerd已启用CRI插件,查看配置文件:
cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml

确保存在以下配置段:

[plugins."io.containerd.grpc.v1.cri"]
  disable_tcp_service = true
  enable_selinux = false
  enable_tls_streaming = false
  sandbox_image = "rancher/mirrored-pause:3.6"
  max_container_log_line_size = 16384
  1. 检查Pod挂载情况
    确认NeuVector的controller和enforcer Pod已正确挂载主机的containerd套接字:
kubectl describe pod -n neuvector | grep -A5 -B5 "containerd.sock"

应看到类似如下的挂载信息:

Mounts:
      /run/k3s/containerd/containerd.sock from containerd-sock (ro)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-xxxx (ro)
  1. 验证Pod启动状态
    重新部署后,查看Pod状态:
kubectl get pods -n neuvector

待Pod进入Running状态后,检查日志确认错误消失:

kubectl logs -n neuvector <neuvector-controller-pod-name>

原因说明

K3s默认使用的containerd套接字路径为/run/k3s/containerd/containerd.sock,命名空间为k8s.io,而非标准containerd的/run/containerd/containerd.sock和moby命名空间。NeuVector默认会查找标准路径和命名空间,因此需要显式指定参数以适配K3s环境。

内容的提问来源于stack exchange,提问作者Zach Gardner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:05:05