请教一下,我安装K8S(kubernetes)后,在从机上执行
kubeadm join 192.168.10.160:6443 --token d2t0tj.8oxcjpfqwhlo33fa --discovery-token-ca-cert-hash 66a154ba534d76c53397992c4875d62b81558e9ef1b883ce96b6bf57c96bb759
后,出现报错:
** [ERROR SystemVerification]: unsupported graph driver: vfs**
我的工作节点系统是Linux3.10,Ubuntu16,arm 32位
我的Master节点系统是Linux5.x,Ubuntu22,x86
双方的kubernetes环境都是1.23.5.
疑问:
(1)我在x86架构的Ubuntu22系统中安装K8S时,故意将Docker的存储驱动修改为VFS,可以正常安装;
(2)但在arm 32位架构的工作节点中,Docker的存储驱动为VFS时,却出现了【unsupported graph driver: vfs】的报错(目前我的工作节点仅支持VFS);
请问这是什么原因呢?是否需要在工作节点的内核中添加CONFIG_AUFS_FS(AUFS存储驱动),然后将工作节点中Docker的存储驱动修改为AUFS呢?
我查了网上很多关于unsupported graph driver: vfs的解决方法,都说将Docker的存储驱动改为overlay2,但是我的工作节点时Linux3.10,而overlay2至少要到Linux4.0才被支持。其次我的工作节点是边缘网关,不方便升级内核,也不方便对内核做过大改动。
这个问题可能是由于Docker存储驱动在不同架构上的支持情况不同所导致的。
在x86架构的Ubuntu系统上,使用VFS存储驱动是可行的,因为VFS是Linux内核的一部分,因此默认情况下应该支持所有Linux架构。
然而,在arm 32位架构的工作节点上,Docker存储驱动的选择可能受到限制。根据你提供的信息,工作节点仅支持VFS存储驱动,但报错提示"unsupported graph driver: vfs"表明该存储驱动不被支持。
解决这个问题的一种方法是在工作节点的内核中添加支持所需存储驱动的模块,如你提到的AUFS(Another Union File System)。你可以尝试在工作节点的内核配置中启用CONFIG_AUFS_FS,然后重新编译和安装内核,以确保AUFS模块可用。
一旦你的工作节点内核支持AUFS,你可以尝试将Docker的存储驱动修改为AUFS,看看是否能解决问题。
基于new bing部分指引作答:
在Kubernetes中,容器运行时(Container Runtime)与存储驱动紧密相关。默认情况下,Kubernetes使用Docker作为容器运行时,并依赖于Docker的存储驱动来管理容器的文件系统。然而,对于ARM 32位架构的节点,不同的存储驱动可能存在限制和兼容性问题。
根据您提供的信息,您的工作节点是ARM 32位架构,且只支持VFS存储驱动。但是Kubernetes 1.23.5版本不再支持VFS存储驱动,这就解释了为什么您遇到了"unsupported graph driver: vfs"的错误。
一种解决方法是尝试在工作节点上安装支持ARM 32位架构和VFS存储驱动的Docker版本。您可以尝试在ARM 32位架构上编译和安装较旧的Docker版本,以支持VFS存储驱动。请注意,这可能需要一些自定义编译和配置步骤,因为Docker官方可能不再提供32位ARM平台的官方支持。
另一种解决方法是使用其他支持ARM 32位架构的容器运行时,例如CRI-O或containerd。这些容器运行时可能支持VFS存储驱动并与Kubernetes兼容。您可以尝试安装并配置这些容器运行时,然后使用kubeadm将工作节点加入集群。
关于您提到的将工作节点内核中添加CONFIG_AUFS_FS并修改Docker存储驱动为AUFS的方法,这是一种尝试,因为AUFS在旧版本的Linux内核中是受支持的。但是,请注意在工作节点中修改内核配置需要对系统进行干预和重新编译内核,这可能会引入风险和不稳定性,并且可能会影响其他系统组件的功能。
总之,解决此问题的最佳方法是选择一个在ARM 32位架构上支持VFS存储驱动的容器运行时,或者尝试安装较旧的Docker版本,并确保与Kubernetes版本兼容。请记住,对于ARM 32位架构的系统,可用的选项可能有限,并且可能需要一些自定义配置和编译。
Master节点和Work nodes使用不同的Docker存储驱动造成的,配置AUFS存储驱动,重启Docker服务使配置生效
【K8S】kubeadm join添加工作节点时报错“unsupported graph driver: vfs”的解决方法
https://huaweicloud.csdn.net/63311a60d3efff3090b521ad.html
你这个错误看起来像是Kubernetes集群的存储驱动程序不支持vfs驱动程序引起的问题。看下你的存储驱动程序的文档,以确定是否支持vfs驱动程序。其次,看下你当前节点是直接下载docker-ce解压包,直接配置service的,还是通过yum 安装的呢,最好使用rpm 安装
可能在Kubernetes集群中使用了不支持的存储驱动程序(graph driver)引起的。
在Kubernetes中,节点需要使用一个存储驱动程序来管理其磁盘空间。默认情况下,Kubernetes使用“overlay2”作为默认的存储驱动程序。
sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl
sudo kubeadm join <master-node>:<port> --token <token> --discovery-token-ca-cert-hash <hash> --control-plane --certificate-key <path/to/cert> --pod-network-cidr <cidr> --kubernetes-version <version>
kubectl delete pvc <pvc-name>
那就只能换个驱动了,比如zfs,aufs等,但是切记,在边缘网关环境中操作时,一定要谨慎并确保对系统进行适当的备份和测试
版本不兼容的原因
以下答案参考newbing,回答由博主波罗歌编写:
在Kubernetes中,容器运行时(如Docker)与节点之间需要有一个共同的存储驱动。默认情况下,Kubernetes使用Docker的默认存储驱动(如overlay2)。然而,在你的情况下,你的工作节点的内核版本较低,不支持overlay2驱动。
解决方法是,在工作节点上手动配置Docker的存储驱动为VFS,以使其与Kubernetes的存储驱动保持一致。你可能需要在工作节点上修改Docker的配置文件,并重新启动Docker服务。下面是具体的步骤:
/etc/docker/daemon.json
,如果没有这个文件则创建它。sudo vi /etc/docker/daemon.json
{
"storage-driver": "vfs"
}
保存文件并退出编辑器。
重新启动Docker服务:
sudo systemctl restart docker
docker info | grep "Storage Driver"
你应该看到类似以下输出:
Storage Driver: vfs
现在,你可以尝试在工作节点上执行kubeadm join
命令,应该不再出现"unsupported graph driver: vfs"的错误。
请注意,VFS存储驱动在性能和功能方面相对较差,不建议在生产环境中长期使用。如果可能的话,考虑升级工作节点的内核版本,以支持更好的存储驱动(如overlay2)。或者,在另一台可升级内核的机器上运行Kubernetes工作节点,然后使用边缘网关配置适当的网络路由。
如果我的回答解决了您的问题,请采纳!