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
7、網絡問題
雙網卡可以操作,因為中間會導致網絡中斷,沒有另一個網卡的話是沒法在通過遠程桌面連上操作的。
首先取消勾選本地網卡屬性中的【Hyper-V可擴展的虛擬交換機】,因為如果之前配置過這里會被勾選,然后這個網卡就不能再被指定了。
再進入Hyper-V管理器將WSL的虛擬交換機連接到這個外部網卡。
右鍵管理員打開Hyper-V管理器。
需要先打開wsl,才會在虛擬交換機列表看到wsl。
必須管理員權限才能應用成功,並且可能會失敗,失敗后多嘗試幾次就行了。
成功后這個網卡就暫時不能用了,需要通過另外一個網卡的IP遠程連上。
通過Windows Terminal登錄到wsl后執行上面的命令,操作過程是將wsl里的網卡eth0的ip地址改為局域網地址。
這樣就不用忍受wsl的ip地址是虛擬的、飄忽不定的,且還需要端口轉發才能訪問。
但這樣有個問題就是沒法在wsl里訪問帶域名的網址,也就沒法訪問apt、github、yum、dockerhub等這些默認地址。
但也不是沒辦法解決,在局域網的其它主機建立一個代理服務器,然后將wsl的訪問方式改為通過這個內網代理就可以。
通過這種方式設置的內網ip,在wsl重啟后會被還原,所以每重啟一次都要重復一遍,除設置代理外。