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

如何在Windows 2019节点运行Nomad NFS CSI插件?

在Nomad Windows 2019节点配置CSI卷时遇到挂载路径错误

问题详情

我在Nomad集群中配置NFS CSI卷,Linux节点上已经成功部署控制器、节点任务并创建新卷,但Windows 2019节点上操作失败,报错:

Driver Failure failed to create container: API error (400): invalid mount config for type "bind": invalid mount path: '/csi'

控制器任务的HCL配置如下:

job "democratic-csi-nfs-controller" {
  datacenters = ["dc1"]
  type        = "system"
  namespace   = "CSI-Test"

  group "controller" {
    constraint {
      attribute = "${attr.kernel.name}"
      value     = "windows"
    }

    task "plugin" {
      driver = "docker"

      config {
        image = "docker.io/democraticcsi/democratic-csi:latest"

        args = [
          "--csi-version=1.5.0",
          "--csi-name=org.democratic-csi.nfs",
          "--log-level=info",
          "--csi-mode=controller",
          "--server-socket=unix:///csi/csi.sock",
          "--server-address=172.20.19.52:/Nomad_share",
        ]
      }

      csi_plugin {
        id        = "org.democratic-csi.nfs"
        type      = "controller"
        mount_dir = "/csi"
      }

      resources {
        cpu    = 500
        memory = 256
      }
    }
  }
}

我试过改成Windows路径格式,比如调整--server-socket参数,或者把mount_dir设为"C:\csi",但报错依旧。换用mcr.microsoft.com/k8s/csi/smb-csi:v1.7.0镜像也遇到同样问题,该镜像的配置片段:

config {
  image = "mcr.microsoft.com/k8s/csi/smb-csi:v1.7.0"
  args = [
    "--v=5",
    "--nodeid=${attr.unique.hostname}",
    "--endpoint=unix:///csi/csi.sock",
    "--drivername=smb.csi.k8s.io"
  ]
}

解决方法

问题根源是Windows容器与Linux容器的路径、通信机制差异,以及Nomad对Windows节点CSI挂载的处理逻辑:

  • 修正mount_dir路径格式:
    Windows节点上,csi_plugin的mount_dir必须用Windows本地路径,HCL中要转义反斜杠,改成:

    csi_plugin {
      id        = "org.democratic-csi.nfs"
      type      = "controller"
      mount_dir = "C:\\csi"
    }
    
  • 替换Unix Socket为TCP Socket:
    Windows容器不支持Unix Socket,必须改用TCP协议。修改对应参数:
    对于democratic-csi:

    args = [
      "--csi-version=1.5.0",
      "--csi-name=org.democratic-csi.nfs",
      "--log-level=info",
      "--csi-mode=controller",
      "--server-socket=tcp://0.0.0.0:9000",
      "--server-address=172.20.19.52:/Nomad_share",
    ]
    

    对于smb-csi:

    args = [
      "--v=5",
      "--nodeid=${attr.unique.hostname}",
      "--endpoint=tcp://0.0.0.0:9000",
      "--drivername=smb.csi.k8s.io"
    ]
    
  • 使用Windows兼容的镜像:
    确认CSI镜像有Windows版本,比如democraticcsi/democratic-csi要拉取latest-windows标签的镜像,避免用仅支持Linux的镜像。

  • 检查Docker运行模式:
    确保Windows节点的Docker切换到Windows容器模式,如果是Linux容器模式,路径格式会完全不兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:38:35