在wsl2中部署kubernertes集群

1、查看windows中是否有其它程序占用53端口,如果存在先停掉,否则Ubuntu启动错误,它需要监听这个端口;

2、在ubuntu中启动ssh,并在windows中设置端口转发,就将本机ip和127.0.0.1对ssh端口的请求转发到localhost,否则除了本机通过localhost能访问外,其它地址和机器都是拒绝。
(netsh interface portproxy reset all)

(netsh interface portproxy add v4tov4 listenaddress=192.168.31.146 listenport=22222 connectaddress=127.0.0.1 connectport=22222)
(netsh interface portproxy add v4tov4 listenaddress=localhost listenport=22222 connectaddress=127.0.0.1 connectport=22222)

(netsh interface portproxy show all)

以上命令在powershell中以管理员权限执行。

先启动ubuntu里的ssh监听后再执行上述命令,如果还是不行请重启机器再执行一遍。

3、启动docker服务

由于wsl2中无法启动systemd,所以也就无法执行systemctl start docker。

但kubernetes初始化需要docker service,而且通过service start docker方式启动的不行,提示必须要systemctl start docker。

此时可以通过大牛提供的其它方式来实现,不知道他是怎么实现的,但确实有效,就安装个一个东西,再创建两个个脚本并赋予权限就行。

https://kubernetes.io/blog/2020/05/21/wsl-docker-kubernetes-on-the-windows-desktop/

上面文章是使用了大牛的解决方案,搜索“enabling SystemD”就可找到怎么使用的介绍。

大牛的原始文章地址:

https://forum.snapcraft.io/t/running-snaps-on-wsl2-insiders-only-for-now/13033

4、初始化kubernetes

可以指定kubernetes的版本,因为有时候阿里镜像没有最新的版本,可以通过修改版本号采用老版本镜像。

可以指定镜像仓库为本地地址,这样就可以将之前pull来的镜像存在本地,以供其它机器使用。

必须将apiserver地址指定为ubuntu中eth0的ip,而不是windows的真实网卡ip,否则初始化不成功。

kubeadm init --image-repository 192.168.31.151:5000/google_containers --kubernetes-version v1.18.2 --apiserver-advertise-address 172.19.20.236 --pod-network-cidr=192.168.0.0/16

5、安装网络插件

初始化完成后,查看kubelet的日志,会发现一直提示本地node找不到,并且提示/etc/cni/net.d里内容为空,无法初始化。这时候就可安装网络插件了。

calico是其中的一个,现在github上维护的比较勤。

https://docs.projectcalico.org/getting-started/kubernetes/quickstart

查看提供的calico.yaml发现,其启动了几个自己的容器,并且挂在了主机的/etc/cni/net.d和/opt/cni目录。

这样关于网络启动这块的过程就比较清楚了,kubeadm初始完后,由于没有容器网络接口cni,导致本地node无法运行,然后去/etc/cni/net.d下找网络插件配置,发现是空的就报错无法初始化cni。

通过kubectl apply部署网络插件后,网络插件容器启动并向主机的两个cni目录里写入配置及执行程序。

这期间kubelet一直不停的扫描目录/etc/cni/net.d,当发现被灌入内容后立马执行,然后网络有了,node也正常了,一切成功。

6、swap问题

官方资料:https://docs.microsoft.com/en-us/windows/wsl/wsl-config

image

1608821238(1)

7、网络问题

双网卡可以操作,因为中间会导致网络中断,没有另一个网卡的话是没法在通过远程桌面连上操作的。

image

右键管理员打开Hyper-V管理器。

1608821898

需要先打开wsl,才会在虚拟交换机列表看到wsl。

必须管理员权限才能应用成功,并且可能会失败,失败后多尝试几次就行了。

成功后这个网卡就暂时不能用了,需要通过另外一个网卡的IP远程连上。

1608822554(1)

通过Windows Terminal登录到wsl后执行上面的命令,操作过程是将wsl里的网卡eth0的ip地址改为局域网地址。

这样就不用忍受wsl的ip地址是虚拟的、飘忽不定的,且还需要端口转发才能访问。

但这样有个问题就是没法在wsl里访问带域名的网址,也就没法访问apt、github、yum、dockerhub等这些默认地址。

但也不是没办法解决,在局域网的其它主机建立一个代理服务器,然后将wsl的访问方式改为通过这个内网代理就可以。

通过这种方式设置的内网ip,在wsl重启后会被还原,所以每重启一次都要重复一遍,除设置代理外。

原文地址:https://www.cnblogs.com/StarkBrothers/p/13054158.html