You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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 enabledunit docker.service does not exist是因为WSL中的Docker是由Docker Desktop集成提供的,并非WSL内部独立安装的systemd服务。所以:

  • 不用执行systemctl enable/start docker.service,只要Docker Desktop在运行,WSL就能正常使用Docker(你已经能运行镜像,说明没问题)。
  • 关于cgroupfs驱动的警告:可以在Docker Desktop中修改配置解决:
    1. 打开Docker Desktop -> Settings -> Docker Engine
    2. 在配置中添加:"exec-opts": ["native.cgroupdriver=systemd"]
    3. 保存并重启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

火山引擎 最新活动