在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、網絡問題

雙網卡可以操作,因為中間會導致網絡中斷,沒有另一個網卡的話是沒法在通過遠程桌面連上操作的。

首先取消勾選本地網卡屬性中的【Hyper-V可擴展的虛擬交換機】,因為如果之前配置過這里會被勾選,然后這個網卡就不能再被指定了。

 

 再進入Hyper-V管理器將WSL的虛擬交換機連接到這個外部網卡。

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重啟后會被還原,所以每重啟一次都要重復一遍,除設置代理外。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM