Windows WSL2 Ubuntu环境下创建Kubernetes集群报错求助及优质教程咨询
解决WSL Ubuntu中搭建Kubernetes集群的常见问题
我来逐个拆解你遇到的问题,并给出对应的解决方案,同时推荐适合WSL环境的K8s搭建方案:
1. Systemd相关错误(System has not been booted with systemd as init system)
WSL默认使用init作为初始化系统,而非systemd,所以直接用systemctl命令会失效。解决办法有两种:
方法一:开启WSL2的Systemd支持(推荐)
适用于WSL2 Ubuntu 20.04及以上版本:
- 编辑WSL的配置文件:
sudo nano /etc/wsl.conf - 添加以下内容:
[boot] systemd=true - 保存退出后,在Windows终端执行
wsl --shutdown关闭WSL,重新打开Ubuntu终端,此时systemctl命令就能正常使用了。
方法二:使用service命令替代(无需开启Systemd)
如果不想开启Systemd,WSL中可以用service命令管理服务,比如查看Docker状态:sudo service docker status。不过因为你的Docker是由Docker Desktop集成管理的,其实不需要在WSL内操作Docker服务。
2. Docker服务相关警告/错误
你看到的docker service is not enabled和unit docker.service does not exist是因为WSL中的Docker是由Docker Desktop集成提供的,并非WSL内部独立安装的systemd服务。所以:
- 不用执行
systemctl enable/start docker.service,只要Docker Desktop在运行,WSL就能正常使用Docker(你已经能运行镜像,说明没问题)。 - 关于
cgroupfs驱动的警告:可以在Docker Desktop中修改配置解决:- 打开Docker Desktop -> Settings -> Docker Engine
- 在配置中添加:
"exec-opts": ["native.cgroupdriver=systemd"] - 保存并重启Docker Desktop,这样Docker就会使用推荐的systemd cgroup驱动。
3. kubeadm init的致命错误
端口6443被占用
这个端口是Kubernetes API Server的默认端口,大概率是之前搭建失败后残留的进程占用了它。解决步骤:
- 查找占用进程:
sudo ss -tulpn | grep :6443 - 杀掉对应的进程:
sudo kill -9 <进程PID> - 如果之前的K8s集群残留数据过多,可以先执行
sudo kubeadm reset清理环境,再重新初始化。
Swap未禁用
Kubernetes默认不允许节点开启Swap,必须禁用:
- 临时禁用:
sudo swapoff -a - 永久禁用:编辑
/etc/fstab文件,注释掉所有包含swap的行,保存后重启WSL即可。
适合WSL环境的Kubernetes搭建教程/方案
如果用kubeadm觉得麻烦,推荐更适合开发环境的轻量化方案:
- kind(Kubernetes IN Docker):直接在Docker中运行K8s集群,无需配置kubeadm、swap等问题,只需要Docker运行,安装kind后一条命令就能创建集群,非常适合WSL环境。
- 如果坚持用kubeadm,确保开启WSL2和Systemd,然后按照Kubernetes官方的kubeadm初始化步骤,结合上面的WSL适配方案操作即可。
内容的提问来源于stack exchange,提问作者Penguen




