如何在Windows 2019节点运行Nomad NFS 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

