Windows節點加入K8S集群(K8S搭建Linux和Window混合集群)
說明:K8S多數情況用於linux系統的集群,目前很少人實踐linux 和 windows 的混合集群。linux 和 windows 的K8S混合集群,是以linux 為Master節點,Windows 為 Node節點的。本示例linux 采用centos7.6,windows 采用 windows server 2019(均為虛擬機)。
一、前提准備
1.熟悉linux 的基本使用,熟悉linux 下的K8S集群
2.CentOS7.6:安裝好docker並配置鏡像加速,K8S,並且授予K8S集群的master 角色(主機要求 cpu 內核2個以上,內存2G以上)。
3.Windows server 2019:cpu 內核2個以上,內存2G以上。並且安裝好docke,配置鏡像加速。
4.Windows server 2019 要安裝最新的補丁,即更新服務器。
內網環境下,無法在線更新時,至少要安裝 KB4489899 補丁(補丁下載見底部鏈接)。
5.時間同步:centos的master 主機和 windows server 2019的node 主機時間必須同步,可設置同步時間服務器(方法詳見底部連接)
二、Windows加入集群
(一) 、Master 配置 (在centos 上執行)
1.master 啟用網絡橋接方式
建議在使用 Flannel 時為 iptables 鏈啟用橋接方式的 IPv4 流處理。
sudo sysctl net.bridge.bridge-nf-call-iptables=1
2.下載flannel 和配置 linux Flannel
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
注意:raw.githubusercontent.com 在國內大概率會被GFW 牆掉,可以手動執行命令 vi /etc/hosts
配置hosts :199.232.28.133 raw.githubusercontent.com
下載后,需要將文件kube-flannel.yml 中的 net-conf.json
部分,將 VNI 設置為 4096,並將 Port 設置為 4789。如下所示:
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan",
"VNI": 4096,
"Port": 4789
}
}
只有將linux上的 vni 設置成4096,port 設置成4789;才能與windows 上的flannel 實現通信,進而互操作。
3. 應用Linux 的 flannel 配置並驗證
kubectl apply -f kube-flannel.yml
應用flannel 配置后,docker會從官網或配置的加速器中(最好是配置docker 加速器)下載flannel相關的鏡像且運行相關的pod。這個過程需要時間,幾分鍾后,執行 kubectl get pods -n kube-system
查看組件運行情況
NAMESPACE NAME READY STATUS RESTARTS AGE
...
kube-system kube-flannel-ds-54954 1/1 Running 0 1m
4.linux配置Windows 兼容版本的 proxy 和 flannel:
4.1 proxy:這里我的版本是 v1.20.0。需要根據自己的版本進行修改。
curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/kube-proxy.yml | sed 's/VERSION/v1.20.0/g' | kubectl apply -f -
#也可以使用 wget 命令將kube-proxy.yaml命令先下載下來,再執行sed 和 kube apply 命令。
4.2.flannel:
kubectl apply -f https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml
#建議先用 wget 命令將flannel-overlay,再執行kubectl apply
(二)、配置windows server 2019
前提是在windows server 2019 中已經安裝了docker 且配置了鏡像加速。且具有管理員權限。
1.安裝windows 的wins,kubelet,kubeadm。
可以根據自己的需要選擇對應的版本。
1.1 powershell 可執行文件PrepareNode.ps1下載:
curl.exe -LO https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/PrepareNode.ps1
1.2 執行命令,運行PrepareNode.ps1文件,下載並安裝 wins,kubelet,kubeadm
.\PrepareNode.ps1 -KubernetesVersion v1.20.0
注意:執行上面第一條命令下載PrepareNode.ps1文件,可能會非常慢;即使下載文件后,根據文件下載wins、kubelet、kubeadm 可能會非常卡頓。由於上述情況的存在,大概率導致安裝不成功,建議采用手動安裝,步驟如下:
第一步,PrepareNode.ps1 文件下載:
打開瀏覽器,輸入網址 https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/PrepareNode.ps1 下載文件,文件下載后,將DownloadFile 函數調用的代碼全部用“#”注釋
第二步、wins,kubelet,kubeadm 安裝文件下載:根據下載的PrepareNode.ps1文件中的DownloadFile 函數,下載安裝文件。
1.瀏覽器輸入 https://dl.k8s.io/v1.20.0/kubernetes-node-windows-amd64.tar.gz,解壓下載后的文件,從kubernetes\node\bin\ 中取出 kubeadm.exe 和 kubelet.exe(根據自己需要的版本下載)
2.瀏覽器輸入 https://k8stestinfrabinaries.blob.core.windows.net/nssm-mirror/nssm-2.24.zip,下載zip 文件,並重命名為 nssm.zip。
3.瀏覽器輸入 https://github.com/Microsoft/SDN/raw/master/Kubernetes/windows/hns.psm1 ,下載psm1文件
4.瀏覽器輸入 https://github.com/rancher/wins/releases/download/v0.0.4/wins.exe,下載wins.exe 文件
第三步、安裝windows下的kubernetes。
1.在c盤根目錄創建文件夾k,並將第一步,第二步的文件 hns.psm1、kubeadm.exe、kubelet.exe、nssm.zip、wins.exe和PrepareNode.ps1 全部放進文件夾k中。
2.在目錄k中,管理員權限 powershell 執行命令初始化windows 下的kubernetes:根據自己的版本來執行。
.\PrepareNode.ps1 -KubernetesVersion v1.20.0
如果執行失敗,刪除C盤根目錄下etc、run、var、opt和k(這幾個目錄有就刪掉), 重新復制nssm-2.24.zip改為nssm.zip, 檢查執行的錯誤並解決,再重新執行。如果是運行不成功,想要卸載,則參考后面的卸載步驟。
(三)、Windows 加入集群
1.master上執行命令查看加入集群的指令。
kubeadm token create --print-join-command
2.在windows 上,執行master上回顯的指令。指令類似於:
kubeadm join 172.16.22.101:6443 --token lzxi5w.qizoch3pqcbc3ozc --discovery-token-ca-cert-hash sha256:02d821acf1b0595943cb046a44356b68a85feb74e920b635713afc1fb732183f
這時候,windows docker 會下載幾個鏡像,會比較慢,需要等待一段時間(內網環境下,需要將鏡像手動導入)。
3.在master 上查看集群的狀態:
kubectl get nodes -o wide
如果windows node 處於not ready 狀況,可能是windows docker 還在下載相關的鏡像,可通過 kubectl -n kube-system get pods -l app=flannel
查看flannel pod的運行情況。也可以通過 kubectl describe pod podname -n namespaces
,根據具體的pod和名稱空間查看flannel的具體情況,以此來分析原因。
三、Windows K8S的卸載
windows 有時候不一定一次就能安裝成功,這時候又已經安裝了一些服務了,就需要K8S進行徹底的卸載。
1.1 master 節點刪除該node。kubectl delete node nodename
1.2 windows 脫離節點。kubeadm reset
1.3 在計算機服務中,找到kubelet 服務和 Rancher wins,將其停止。
1.4 管理員權限 cmd 刪除服務:sc delete kubelet
,`sc delete rancher-wins
1.5 防火牆的入站規則中,刪除kubelet配置。
參考文章
1.官網:https://kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes/
2.其他參考:https://blog.csdn.net/MrRight17/article/details/111931094
3.補丁下載:https://www.tenforums.com/windows-10-news/128745-cumulative-update-kb4489899-windows-10-v1809-build-17763-379-mar-12-a.html?