Kubernetes 添加Windows節(jié)點(diǎn)

2022-06-02 11:44 更新

添加 Windows 節(jié)點(diǎn)

FEATURE STATE: Kubernetes v1.18 [beta]

你可以使用 Kubernetes 來(lái)混合運(yùn)行 Linux 和 Windows 節(jié)點(diǎn),這樣你就可以 混合使用運(yùn)行于 Linux 上的 Pod 和運(yùn)行于 Windows 上的 Pod。 本頁(yè)面展示如何將 Windows 節(jié)點(diǎn)注冊(cè)到你的集群。

在開(kāi)始之前

您的 Kubernetes 服務(wù)器的版本必須為 1.17 或更高版本。 要檢查版本,請(qǐng)輸入 ?kubectl version?。

  • 獲取 Windows Server 2019 或更高版本的授權(quán) 以便配置托管 Windows 容器的 Windows 節(jié)點(diǎn)。 如果你在使用 VXLAN/覆蓋(Overlay)聯(lián)網(wǎng)設(shè)施,則你還必須安裝 KB4489899。
  • 一個(gè)利用 kubeadm 創(chuàng)建的基于 Linux 的 Kubernetes 集群;你能訪問(wèn)該集群的控制面。

目標(biāo)

  • 將一個(gè) Windows 節(jié)點(diǎn)注冊(cè)到集群上
  • 配置網(wǎng)絡(luò),以便 Linux 和 Windows 上的 Pod 和 Service 之間能夠相互通信。

開(kāi)始行動(dòng):向你的集群添加一個(gè) Windows 節(jié)點(diǎn)

聯(lián)網(wǎng)配置 

一旦你有了一個(gè)基于 Linux 的 Kubernetes 控制面節(jié)點(diǎn),你就可以為其選擇聯(lián)網(wǎng)方案。 出于簡(jiǎn)單考慮,本指南展示如何使用 VXLAN 模式的 Flannel。

配置 Flannel 

  1. 為 Flannel 準(zhǔn)備 Kubernetes 的控制面
  2. 在我們的集群中,建議對(duì) Kubernetes 的控制面進(jìn)行少許準(zhǔn)備處理。 建議在使用 Flannel 時(shí)為 iptables 鏈啟用橋接方式的 IPv4 流處理, 必須在所有 Linux 節(jié)點(diǎn)上執(zhí)行如下命令:

    sudo sysctl net.bridge.bridge-nf-call-iptables=1
    
  3. 下載并配置 Linux 版本的 Flannel
  4. 下載最新的 Flannel 清單文件:

    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    

    修改 Flannel 清單中的 ?net-conf.json? 部分,將 VNI 設(shè)置為 4096,并將 Port 設(shè)置為 4789。 結(jié)果看起來(lái)像下面這樣:

    net-conf.json: |
        {
          "Network": "10.244.0.0/16",
          "Backend": {
             "Type": "vxlan",
             "VNI": 4096,
             "Port": 4789
        }
    }

    Note: 在 Linux 節(jié)點(diǎn)上 VNI 必須設(shè)置為 4096,端口必須設(shè)置為 4789,這樣才能令其與 Windows 上的 Flannel 互操作。關(guān)于這些字段的詳細(xì)說(shuō)明,請(qǐng)參見(jiàn) VXLAN 文檔

    Note: 如要使用 L2Bridge/Host-gateway 模式,則可將 ?Type ?值設(shè)置為 "?host-gw?",并忽略 ?VNI ?和 ?Port ?的設(shè)置。

  5. 應(yīng)用 Flannel 清單并驗(yàn)證
  6. 首先應(yīng)用 Flannel 配置:

    kubectl apply -f kube-flannel.yml
    

    幾分鐘之后,如果 Flannel Pod 網(wǎng)絡(luò)被正確部署,你應(yīng)該會(huì)看到所有 Pods 都處于運(yùn)行中狀態(tài)。

    kubectl get pods -n kube-system
    

    輸出中應(yīng)該包含處于運(yùn)行中狀態(tài)的 Linux Flannel DaemonSet:

    NAMESPACE     NAME                                      READY        STATUS    RESTARTS   AGE
    ...
    kube-system   kube-flannel-ds-54954                     1/1          Running   0          1m
  7. 添加 Windows Flannel 和 kube-proxy DaemonSet
  8. 現(xiàn)在你可以添加 Windows 兼容版本的 Flannel 和 kube-proxy。為了確保你能獲得兼容 版本的 kube-proxy,你需要替換鏡像中的標(biāo)簽。 下面的例子中展示的是針對(duì) Kubernetes v1.24.0 版本的用法, 不過(guò)你應(yīng)該根據(jù)你自己的集群部署調(diào)整其中的版本號(hào)。

    curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/kube-proxy.yml | sed 's/VERSION/v1.24.0/g' | kubectl apply -f -
    kubectl apply -f https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml

    Note: 如果你在使用 host-gateway 模式,則應(yīng)該使用 https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-host-gw.yml 這一清單。

    Note:
    如果你在 Windows 節(jié)點(diǎn)上使用的不是以太網(wǎng)(即,"Ethernet0 2")接口,你需要 修改 ?flannel-host-gw.yml? 或 ?flannel-overlay.yml? 文件中的下面這行:
    wins cli process run --path /k/flannel/setup.exe --args "--mode=overlay --interface=Ethernet"
    

    在其中根據(jù)情況設(shè)置要使用的網(wǎng)絡(luò)接口。

    # Example
    curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml | sed 's/Ethernet/Ethernet0 2/g' | kubectl apply -f -

加入 Windows 工作節(jié)點(diǎn) 

Note:
Windows 節(jié)的所有代碼片段都需要在 PowerShell 環(huán)境中執(zhí)行,并且要求在 Windows 工作節(jié)點(diǎn)上具有提升的權(quán)限(Administrator)。
  • CRI-containerD
  • 安裝 containerD

    curl.exe -LO https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/Install-Containerd.ps1
    .\Install-Containerd.ps1
    Note:
    要安裝特定版本的 containerD,使用參數(shù) -ContainerDVersion 指定版本。
    # Example
    .\Install-Containerd.ps1 -ContainerDVersion 1.4.1

    如果你在 Windows 節(jié)點(diǎn)上使用了與 Ethernet 不同的接口(例如 "Ethernet0 2"),使用參數(shù) ?-netAdapterName? 指定名稱。

    # Example
    .\Install-Containerd.ps1 -netAdapterName "Ethernet0 2"

    安裝 wins、kubelet 和 kubeadm

    curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1
    .\PrepareNode.ps1 -KubernetesVersion v1.24.0 -ContainerRuntime containerD

    從 cri-tools 項(xiàng)目安裝 ?crtctl?。 ?crictl? 是必需的,kubeadm 使用它與 CRI 端點(diǎn)通信。

    運(yùn)行 kubeadm 添加節(jié)點(diǎn)

    使用當(dāng)你在控制面主機(jī)上運(yùn)行 ?kubeadm init? 時(shí)得到的命令。 如果你找不到這個(gè)命令,或者命令中對(duì)應(yīng)的令牌已經(jīng)過(guò)期,你可以(在一個(gè)控制面主機(jī)上)運(yùn)行 ?kubeadm token create --print-join-command? 來(lái)生成新的令牌和 join 命令。

  • Docker Engine
  • 安裝 Docker Engine

    安裝 ?Containers ?功能特性

    Install-WindowsFeature -Name containers
    

    安裝 Docker

    操作指南在 Install Docker Engine - Enterprise on Windows Servers。

    安裝 cri-dockerd。kubelet 可以通過(guò) cri-dockerd 在 CRI 兼容的節(jié)點(diǎn)上與 Docker 通信。

    Note:
    Docker Engine 沒(méi)有實(shí)現(xiàn) CRI, 而 CRI 是容器運(yùn)行時(shí)能夠與 Kubernetes 一起工作的要求。 出于這個(gè)原因,必須安裝一個(gè)額外的服務(wù) cri-dockerd。 cri-dockerd 是一個(gè)基于原來(lái)的內(nèi)置 Docker Engine 支持的項(xiàng)目, 而這一支持在 1.24 版本的 kubelet 中已被移除。

    從 cri-tools 項(xiàng)目安裝 ?crictl?。 kubeadm 需要 ?crictl ?才能與 CRI 端點(diǎn)通信。

    安裝 wins、kubelet 和 kubeadm

    curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1
    .\PrepareNode.ps1 -KubernetesVersion v1.24.0

    運(yùn)行 kubeadm 添加節(jié)點(diǎn)

    當(dāng)你在控制面主機(jī)上運(yùn)行 ?kubeadm init? 時(shí),輸出了一個(gè)命令。現(xiàn)在運(yùn)行這個(gè)命令。 如果你找不到這個(gè)命令,或者命令中對(duì)應(yīng)的令牌已經(jīng)過(guò)期,你可以(在一個(gè)控制面主機(jī)上)運(yùn)行 ?kubeadm token create --print-join-command? 來(lái)生成新的令牌和 join 命令。

檢查你的安裝 

你現(xiàn)在應(yīng)該能夠通過(guò)運(yùn)行下面的命令來(lái)查看集群中的 Windows 節(jié)點(diǎn)了:

kubectl get nodes -o wide

如果你的新節(jié)點(diǎn)處于 ?NotReady ?狀態(tài),很可能的原因是系統(tǒng)仍在下載 Flannel 鏡像。 你可以像之前一樣,通過(guò)檢查 ?kube-system? 名字空間中的 Flannel Pods 來(lái)了解 安裝進(jìn)度。

kubectl -n kube-system get pods -l app=flannel

一旦 Flannel Pod 運(yùn)行起來(lái),你的節(jié)點(diǎn)就應(yīng)該能進(jìn)入 ?Ready ?狀態(tài)并可 用來(lái)處理負(fù)載。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)