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也正常了,一切成功。
原文:https://www.cnblogs.com/StarkBrothers/p/13054158.html