在 Windows 叢集上啟動 Kubernetes
當佈建自訂叢集時,Rancher 使用 RKE2 在您現有的節點上安裝 Kubernetes。
在使用 Rancher 佈建的 Windows 叢集中,叢集必須同時包含 Linux 和 Windows 節點。Kubernetes 控制平面只能在 Linux 節點上運行,而 Windows 節點只能擁有工作節點角色。Windows 節點只能用於部署工作負載。
有關 Windows 中支援的 Kubernetes 功能的摘要,請參閱 Kubernetes 文件中關於在 Windows 中使用 Kubernetes 的支援 功能和限制或在 Kubernetes 中排程 Windows 容器的指南。
Windows 叢集的 RKE2 功能
以下列出了 Windows 叢集佈建的主要 RKE2 功能:
- 由 containerd 提供支援的 Windows 容器與 RKE2
- 直接從 Rancher UI 新增佈建 Windows RKE2 自訂叢集
- Windows RKE2 自訂叢集的 Calico 和 Flannel CNI
- Windows Server 的 SAC 版本(2004 和 20H2)包含在技術預覽中
預設情況下,Rancher 將允許 Windows 工作負載 Pod 部署在 Windows 和 Linux 工作節點上。在 RKE2 中建立混合叢集時,您必須編輯 chart 中的 nodeSelector 以將 Pod 導向到相容的 Windows 節點。有關如何使用 nodeSelector 將 Pod 分配到節點的更多資訊,請參閱 Kubernetes 文件。
- Windows RKE2 中的 HostProcess 容器在 Kubernetes v1.24.1 及更高版本中受支援。有關更多資訊,請參閱上游文件。
一般需求
Windows 節點的一般網路和作業系統需求與其他 Rancher 安裝相同。
OS 需求
我們對 Windows Server 和 Windows 容器的支援與 Microsoft 官方 LTSC(長期服務通道)和 SAC(半年通道)的生命週期相符。
有關 Windows Server 的支援生命週期日期,請參閱 Microsoft 文件。
Kubernetes 版本
有關 Kubernetes 元件版本的更多資訊,請參閱 RKE2 版本的支援矩 陣。
節點需求
叢集中的主機至少需要:
- 2 核心 CPU
- 5 GB 記憶體
- 50 GB 磁碟空間
如果節點不符合這些需求,Rancher 將不會佈建該節點。
網路需求
在佈建新叢集之前,請確保您已在接受入站網路流量的裝置上安裝 Rancher。這是為了讓叢集節點能夠與 Rancher 通訊所必需的。如果您尚未安裝 Rancher,請在繼續本指南之前參閱安裝文件。
Rancher 支援使用 Calico 和 Flannel 作為網路提供者的 Windows。
如果您為 AWS 虛擬私有雲配置 DHCP 選項集,請注意在 domain-name 選項欄位中,只能指定一個網域名稱。根據 DHCP 選項文件:
某些 Linux 作業系統接受由空格分隔的多個網域名稱。但是,其他 Linux 作業系統和 Windows 將該值視為單個網域,這會導致意外行為。如果您的 DHCP 選項集與具有多個作業系統實例的 VPC 關聯,請僅指定一個網域名稱。
在 ESXi 6.7u2 及更高版本上使用 VMware vSphere 的 Rancher
如果您在 ESXi 6.7u2 或更高版本的 VMware vSphere 上使用 Rancher,並使用 Red Hat Enterprise Linux 8.3、CentOS 8.3 或 SUSE Enterprise Linux 15 SP2 或更高版本,則需要停用 vmxnet3 虛擬網路介面卡硬體卸載功能。如果不這樣做,不同叢集節點上的 Pod 之間的所有網路連接都將因逾時錯誤而失敗。從 Windows Pod 到在 Linux 節點上運行的關鍵服務(例如 CoreDNS)的所有連接也將失敗。外部連接也可能失敗。此問題是 Linux 發行版在 vmxnet3 中啟用硬體卸載功能以及 vmxnet3 硬體卸載功能中的錯誤導致丟棄訪客覆蓋流量的封包所致。要解決此問題,需要停用 vmxnet3 硬體卸載功能。此設定在重新啟動後不會保留,因此需要在每次啟動時停用。建議的做法是在 /etc/systemd/system/disable_hw_offloading.service 建立一個 systemd 單元檔案,在啟動時停用 vmxnet3 硬體卸載功能。停用 vmxnet3 硬體卸載功能的範例 systemd 單元檔案如下。請注意,<VM network interface> 必須自訂為主機 vmxnet3 網路介面,例如 ens192:
[Unit]
Description=Disable vmxnet3 hardware offloading feature
[Service]
Type=oneshot
ExecStart=ethtool -K <VM network interface> tx-udp_tnl-segmentation off
ExecStart=ethtool -K <VM network interface> tx-udp_tnl-csum-segmentation off
StandardOutput=journal
[Install]
WantedBy=multi-user.target
然後在 systemd 單元檔案上設定適當的權限:
chmod 0644 /etc/systemd/system/disable_hw_offloading.service
最後,啟用 systemd 服務:
systemctl enable disable_hw_offloading.service
架構需求
Kubernetes 叢集管理節點(etcd 和 controlplane)必須在 Linux 節點上運行。
worker 節點是您的工作負載將部署的位置,通常是 Windows 節點,但必須至少有一個在 Linux 上運行的 worker 節點,以運行 Rancher 叢集代理、DNS、指標伺服器和 Ingress 相關容器。
建議的架構
我們建議使用下表中列出的最少三節點架構,但您始終可以新增更多 Linux 和 Windows 工作節點以擴展叢集以實現冗餘:
| 節點 | 作業系統 | Kubernetes 叢集角色 | 目的 |
|---|---|---|---|
| 節點 1 | Linux(建議使用 Ubuntu Server 18.04) | 控制平面、etcd、工作節點 | 管理 Kubernetes 叢集 |
| 節點 2 | Linux(建議使用 Ubuntu Server 18.04) | 工作節點 | 支援叢集的 Rancher 叢集代理、指標伺服器、DNS 和 Ingress |
| 節點 3 | Windows(需要 Windows Server core 版本 1809 或更高版本,建議使用版本 2022) | 工作節點 | 運行您的 Windows 容器 |
容器需求
Windows 要求容器必須建立在與其部署的 Windows Server 版本相同的版本上。因此,容器必須建立在 Windows Server core 版本 1809 或更高版本上。如果您有為早期 Windows Server core 版本建立的現有容器,則必須在 Windows Server core 版本 1809 或更高版本上重新建立它們。
雲端提供者特定需求
如果您在叢集中設定 Kubernetes 雲端提供者,則需要一些額外的步驟。您可能希望設定雲端提供者以利用功能來自動佈建儲存、負載平衡器或叢集的其他基礎設施。有關如何配置滿足先決條件的節點的雲端提供者叢集的詳細資訊,請參閱此頁面。
如果您使用 GCE(Google Compute Engine)雲端提供者,您必須執行以下操作 :
- 按照這些步驟在
cluster.yml中啟用 GCE 雲端提供者。 - 在 Rancher 中佈建叢集時,在 Rancher UI 中選擇自訂雲端提供者作為雲端提供者。
教學:如何建立支援 Windows 的叢集
本教學說明如何使用建議的架構中的三個節點建立 Rancher 佈建的叢集。
要設定支援 Windows 節點和容器的叢集,您需要完成以下任務。
1. 佈建主機
要開始在支援 Windows 的現有節點上佈建叢集,請準備您的主機。
您的主機可以是:
- 雲端託管 VM
- 虛擬化叢集中的 VM
- 裸機伺服器
您將佈建三個節點:
- 一個 Linux 節點,管理 Kubernetes 控制平面,儲存您的
etcd,並可選擇作為工作節點 - 第二個 Linux 節點,將是另一個工作節點
- Windows 節點,將作為工作節點運行您的 Windows 容器
| 節點 | 作業系統 |
|---|---|
| 節點 1 | Linux(建議使用 Ubuntu Server 18.04) |
| 節點 2 | Linux(建議使用 Ubuntu Server 18.04) |
| 節點 3 | Windows(需要 Windows Server core 版本 1809 或更高版本,建議使用版本 2022) |
如果您的節點由雲端提供者託管,並且您希望自動化支援(例如負載平衡器或持久儲存裝置),您的節點有額外的配置需求。有關詳細資訊,請參閱選擇雲端提供者。
2. 在現有節點上建立叢集
在現有節點上建立 Windows 叢集的說明與建立自訂叢集的一般說明非常相似,但有一些 Windows 特定的需求。
- 在左上角,點擊 ☰ > 叢集管理。
- 在叢集頁面上,點擊建立。
- 點擊自訂。
- 在叢集名稱欄位中輸入叢集的名稱。
- 在 Kubernetes 版本下拉選單中,選擇支援的 Kubernetes 版本。
- 在容器網路欄位中,選擇 Calico 或 Flannel。
- 點擊建立。
3. 將節點新增到叢集
本節說明如何將 Linux 和 Worker 節點註冊到您的叢集。您將在每個節點上運行一個命令,該命令將安裝 rancher system agent 並允許 Rancher 管理每個節點。
新增 Linux Master 節點
在本節中,我們在 Rancher UI 上填寫一個表單以獲取自訂命令,以在 Linux master 節點上安裝 Rancher agent。然後我們將複製該命令並在 Linux master 節點上運行它以在叢集中註冊該節點。
叢集中的第一個節點應該是同時具有 Control Plane 和 etcd 角色的 Linux 主機。至少必須為此節點啟用這兩個角色,並且必須先將此節點新增到叢集中,然後才能新增 Windows 主機。
- 建立叢集後,導航到註冊頁籤。
- 在步驟 1 的節點角色部分,選擇所有三個角色。雖然您可以只選擇 etcd 和 Control Plane 角色,但我們建議選擇所有三個。
- 可選:如果您點擊顯示進階,您可以配置額外的設定,例如指定 IP 位址、覆寫節點主機名稱,或向節點新增標籤或污點。
- 在步驟 2 的註冊部分,將螢幕上顯示的命令複製到剪貼簿。
- SSH 到您的 Linux 主機並運行您 複製到剪貼簿的命令。
結果:
您的叢集已建立並被分配更新中的狀態。Rancher 正在建立您的叢集。
節點註冊並出現在機器頁籤下可能需要幾分鐘。
一旦叢集狀態變更為活躍,您就可以存取叢集。
新增 Linux Worker 節點
在本節中,我們運行一個命令來將 Linux 工作節點註冊到叢集。
在叢集的初始佈建之後,您的叢集只有一個 Linux 主機。新增另一個 Linux worker 主機以支援叢集的 Rancher 叢集代理、指標伺服器、DNS 和 Ingress。
- 建立叢集後,導航到註冊頁籤。
- 在步驟 1 的節點角色部分,選擇 Worker。
- 可選:如果您點擊顯示進階,您可以配置額外的設定,例如指定 IP 位址、覆寫節點主機名稱,或向節點新增標籤或污點。
- 在步驟 2 的註冊部分,將螢幕上顯示的命令複製到剪貼簿。
- SSH 到您的 Linux 主機並運行您複製到剪貼簿的命令。
結果:
Worker 角色已安裝在您的 Linux 主機上,該節點已向 Rancher 註冊。節點在您的叢集中註冊可能需要幾分鐘。
Linux Worker 節點上的污點
對於新增到叢集中的每個 Linux 工作節點,以下污點將被新增到 Linux 工作節點。透過向 Linux 工作節點新增此污點,新增到 Windows 叢集的任何工作負載將自動排程到 Windows 工作節點。如果您想將工作負載專門排程到 Linux 工作節點,您需要向這些工作負載新增容忍度。
| 污點鍵 | 污點值 | 污點效果 |
|---|---|---|
cattle.io/os | linux | NoSchedule |
新增 Windows Worker 節點
在本節中,我們運行一個命令來將 Windows 工作節點註冊到叢集。
只有在叢集與 Linux etcd、控制平面和工作節點一起運行後,才會出現新增 Windows 工作節點的註冊命令。
- 建立叢集後,導航到註冊頁籤。
- 在步驟 1 的節點角色部分,選擇 Worker。
- 可選:如果您點擊顯示進階,您可以配置額外的設定,例如指定 IP 位址、覆寫節點主機名稱,或向節點新增標籤或污點。
- 在步驟 2 的註冊部分,將螢幕上顯示的 Windows 工作節點命令複製到剪貼簿。
- 使用您偏好的工具(例如 Microsoft Remote Desktop)登入您的 Windows 主機。以管理員身份在 PowerShell Console 中運行複製到剪貼簿的命令。
- 可選:如果您想將更多 Windows 節點新增到叢集, 請重複這些說明。
結果:
Worker 角色已安裝在您的 Windows 主機上,該節點已向 Rancher 註冊。節點在您的叢集中註冊可能需要幾分鐘。
您現在有一個 Windows Kubernetes 叢集。
可選的後續步驟
建立叢集後,您可以透過 Rancher UI 存取它。作為最佳實踐,我們建議設定以下存取叢集的替代方式:
- 使用 kubectl CLI 存取您的叢集: 按照這些步驟在您的工作站上使用 kubectl 存取叢集。在這種情況下,您將透過 Rancher 伺服器的身份驗證代理進行身份驗證,然後 Rancher 將您連接到下游叢集。此方法可讓您在沒有 Rancher UI 的情況下管理叢集。
- 使用 kubectl CLI 透過授權叢集端點存取您的叢集: 按照這些步驟直接使用 kubectl 存取您的叢集,而無需透過 Rancher 伺服器進行身份驗證。我們建議設定此替代方法來存取您的叢集,以便在無法連接到 Rancher 的情況下,您仍然可以存取叢集。
在 Azure 中配置儲存類別
如果您的節點使用 Azure VM,您可以使用 Azure Files 作為叢集的 StorageClass。有關詳細資訊,請參閱本節。