Windows節點加入K8S集群(K8S搭建Linux和Window混合集群)


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?


免責聲明!

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



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