部署在某云平台的k8s集群,节点配置如下
尝试部署openebs/jiva 和 root/ceph 的CSI驱动都出现类似以下报错:
MountVolume.MountDevice failed for volume "pvc-a7dfc3f5-e719-442d-82cd-68da52c568b2" : driver name rook-ceph.cephfs.csi.ceph.com not found in the list of registered CSI drivers
问题定位:
1 plugin pod可以正常调度到master节点,pv也可以自动生成并attach到pod,也就是说CSI驱动本身部署没有问题
2 由于CSI驱动是通过 /var/lib/kubelet/plugins_registry/xxxx-reg.sock 进行注册的,查看各个node的注册路径也已经正确生成 /var/lib/kubelet/plugins_registry/xxxx-reg.sock 文件
3 由于这套k8s集群是从云平台自动生成的,可能kubelet的配置有修改过
4 最终定位到问题原因是docker和kubelet的root-dir都被云平台设置为 /data/var/lib/xxx,而xxx-reg.sock文件却是在 /var/lib/kubelet/plugins_registry/ 目录下,从而导致 kubelet 无法找到 /data/var/lib/kubelet/plugins_registry/xxxx-reg.sock 文件
解决方案:
修改 /etc/docket/daemon.json,恢复root-dir 为默认 /var/lib/docker
修改 /etc/default/kubelet,恢复root-dir 为默认 /var/lib/kubelet
然后重启服务
systemctl restart dockersystemctl restart kubelet
重新部署CSI驱动就可以正常识别了