Azure 操作員 Nexus Kubernetes 中的資源放置
操作員 Nexus 實例會部署在客戶內部部署。 每個實例都包含一或多個裸機伺服器的機架。
當使用者建立 Nexus Kubernetes 叢集 (NKS)時,他們會為構成 Kubernetes 控制平面和一或多個代理程式集區的虛擬機指定計數和 庫存單位 (SKU )。 代理程式集區是客戶容器化網路函式執行所在的一組背景工作節點。
Nexus 平台負責決定每個 NKS VM 啟動所在的裸機伺服器。
Nexus 平臺如何排程 Nexus Kubernetes 叢集 VM
Nexus 會先識別一組可能符合 NKS VM SKU 所有資源需求的裸機伺服器。 例如,如果使用者為其代理程式集區指定 NC_G48_224_v1
了 VM SKU,Nexus 會收集具有 48 個 vCPU、224Gi RAM 等可用容量的裸機伺服器。
Nexus 接著會 AvailabilityZones
檢查正在排程之代理程式集區或控制平面的欄位。 如果此欄位不是空的,Nexus 會將潛在的裸機伺服器清單篩選為只將指定可用性區域 (racks) 中的那些伺服器。 此行為是 硬式排程條件約束。 如果篩選清單中沒有裸機伺服器,Nexus 不會排程 NKS VM,且叢集無法布建。
一旦 Nexus 識別放置 NKS VM 的潛在裸機伺服器清單,Nexus 就會在套用下列排序規則之後挑選其中一部裸機伺服器:
偏好在此 NKS 叢集中沒有 NKS VM 的可用性區域(機架)中裸機伺服器。 換句話說, 將 NKS 叢集的 NKS VM 分散到可用性區域。
偏好在單一可用性區域(機架)內沒有來自相同 NKS 叢集的其他 NKS VM 的裸機伺服器。 換句話說, 將 NKS VM 的 NKS VM 分散到可用性區域內的裸機伺服器。
如果 NKS VM SKU 為
NC_G48_224_v1
或NC_P46_224_v1
,則偏好使用已經存放NC_G48_224_v1
或其他 NKS 叢集之 NKS VM 的NC_P46_224_v1
裸機伺服器。 換句話說, 將來自相同裸機伺服器上不同NKS 叢集的超大型 VM 分組。 此規則會「量化套件」超大型 VM,以減少可用計算資源的分散。除了大型 VM 之外,上述的「bin 封裝」規則也適用於較小的 VM。這有助於將來自不同叢集的較小 VM 封裝到相同的裸機,提高整體放置效率。 例如,從不同的叢集一起控制平面節點和小型 SKU 節點(代理程式集區)。
範例放置案例
下列各節會反白顯示 Nexus 使用者針對操作員 Nexus 環境建立 NKS 叢集時應該預期的行為。
提示:您可以檢查 NKS KubernetesCluster 資源的 屬性,或檢視
nodes.bareMetalMachineId
Azure 入口網站中 Kubernetes 叢集節點的顯示中「主機」數據行,查看 NKS VM 排程到哪個裸機伺服器。
運算元 Nexus 環境範例具有下列規格:
- 16 部裸機伺服器的8個機架
- 每個裸機伺服器都包含兩 個非統一記憶體存取 (NUMA) 數據格
- 每個 NUMA 數據格都會提供 48 個 CPU 和 224Gi RAM
空的環境
假設具有指定容量的空白 Operator Nexus 環境,我們會建立三個不同的 Nexus Kubernetes 叢集大小。
NKS 叢集具有這些規格,我們假設為了此練習,使用者會依下列順序建立三個叢集:
叢集 A
- 控制平面、
NC_G12_56_v1
SKU、三個計數 - 代理程式集區 #1、
NC_P46_224_v1
SKU、24 計數 - 代理程式集區 #2,SKU
NC_G6_28_v1
,六個計數
叢集 B
- 控制平面、
NC_G24_112_v1
SKU、五個計數 - 代理程式集區 #1、
NC_P46_224_v1
SKU、48 計數 - 代理程式集區 #2、
NC_P22_112_v1
SKU、24 計數
叢集 C
- 控制平面、
NC_G12_56_v1
SKU、三個計數 - 代理程式集區 #1、
NC_P46_224_v1
SKU、12 個計數、AvailabilityZones = [1,4]
以下是一個數據表,摘要說明使用者在空的 Operator Nexus 環境中啟動叢集 A、B 和 C 之後應該看到的內容。
Cluster | 集區 | SKU | 總計數 | 必須是 # 機架 | 實際 # 機架 | 每個機架的預期 # VM | 每個機架的實際 # VM |
---|---|---|---|---|---|---|---|
A | 控制平面 | NC_G12_56_v1 |
3 | 3 | 3 | 1 | 1 |
A | 代理程式集區 #1 | NC_P46_224_v1 |
24 | 8 | 8 | 3 | 3 |
A | 代理程式集區 #2 | NC_G6_28_v1 |
6 | 6 | 6 | 1 | 1 |
B | 控制平面 | NC_G24_112_v1 |
5 | 5 | 5 | 1 | 1 |
B | 代理程式集區 #1 | NC_P46_224_v1 |
48 | 8 | 8 | 6 | 6 |
B | 代理程式集區 #2 | NC_P22_112_v1 |
24 | 8 | 8 | 3 | 3 |
C | 控制平面 | NC_G12_56_v1 |
3 | 3 | 3 | 1 | 1 |
C | 代理程式集區 #1 | NC_P46_224_v1 |
12 | 2 | 2 | 6 | 6 |
有八個機架,因此每個集區的 VM 會分散到最多八個機架。 具有八個以上 VM 的集區需要跨不同裸機伺服器分散每個機架的多個 VM。
叢集 C 代理程式集區 #1 有 12 部 VM 限制為 AvailabilityZones [1, 4],因此它在 12 部裸機伺服器上有 12 部 VM,每個機架 1 和 4 中有 6 部。
來自不同叢集的額外大型 VM 會NC_P46_224_v1
放在相同的裸機伺服器上(請參閱 Nexus 平臺如何排程 Nexus Kubernetes 叢集 VM 中的規則 #3)。
以下是使用者在將叢集 A、B 和 C 部署到空白環境之後,可能會看到的版面配置視覺效果。
半完整環境
我們現在會執行一個範例,以在目標環境半滿時啟動另一個 NKS 叢集。 在叢集 A、B 和 C 部署至目標環境之後,目標環境已半滿。
叢集 D 具有下列規格:
- 控制平面、
NC_G24_112_v1
SKU、五個計數 - 代理程式集區 #1,
NC_P46_224_v1
SKU, 24 計數,AvailabilityZones = [7,8]
- 代理程式集區 #2、
NC_P22_112_v1
SKU、24 計數
下表摘要說明使用者在啟動叢集 A、B 和 C 之後,將叢集 D 啟動至半完整運算元 Nexus 環境後應該看到的內容。
Cluster | 集區 | SKU | 總計數 | 必須是 # 機架 | 實際 # 機架 | 每個機架的預期 # VM | 每個機架的實際 # VM |
---|---|---|---|---|---|---|---|
D | 控制平面 | NC_G12_56_v1 |
5 | 5 | 5 | 1 | 1 |
D | 代理程式集區 #1 | NC_P46_224_v1 |
24 | 2 | 2 | 12 | 12 |
D | 代理程式集區 #2 | NC_P22_112_v1 |
24 | 8 | 8 | 3 | 3 |
叢集 D 代理程式集區 #1 有 12 部 VM 限制為 AvailabilityZones [7, 8],因此它在 12 部裸機伺服器上有 12 部 VM,每個機架 7 和 8 中有 6 部。 這些 VM 位於裸機伺服器上,也會裝載來自其他叢集的額外大型 VM,因為排序規則會將來自不同叢集的額外大型 VM 分組到相同的裸機伺服器上。
如果叢集 D 控制平面 VM 落在機架 7 或 8 上,可能是一個叢集 D 代理程式集區 #1 VM 落在與該叢集 D 控制平面 VM 相同的裸機伺服器上。 此行為是因為代理程式集區 #1 已「釘選」到機架 7 和 8。 這些機架中的容量限制會導致排程器從相同的 NKS 叢集共置控制平面 VM 和代理程式集區 #1 VM。
叢集 D 的代理程式集區 #2 在八個機架中的每個不同裸機伺服器上都有三部 VM。 容量限制導致叢集 D 的代理程式集區 #1 釘選到機架 7 和 8。 因此,來自叢集 D 代理程式集區 #1 和代理程式集區 #2 的 VM 會共置在機架 7 和 8 的相同裸機伺服器上。
以下是使用者在將叢集 D 部署到目標環境之後可能會看到的版面配置視覺效果。
幾乎完整的環境
在我們的範例目標環境中,八個機架中有四個接近容量。 讓我們嘗試啟動另一個NKS 叢集。
叢集 E 具有下列規格:
- 控制平面、
NC_G24_112_v1
SKU、五個計數 - 代理程式集區 #1、
NC_P46_224_v1
SKU、32 計數
以下是一份表格,摘要說明將叢集 E 啟動至目標環境之後,用戶應該會看到的內容。
Cluster | 集區 | SKU | 總計數 | 必須是 # 機架 | 實際 # 機架 | 每個機架的預期 # VM | 每個機架的實際 # VM |
---|---|---|---|---|---|---|---|
E | 控制平面 | NC_G24_112_v1 |
5 | 5 | 5 | 1 | 1 |
E | 代理程式集區 #1 | NC_P46_224_v1 |
32 | 8 | 8 | 4 | 3、4 或 5 |
叢集 E 的代理程式集區 #1 會分散到所有八個機架上。 機架 7 和 8 將會有三個來自代理程式集區的 NKS VM #1,而不是預期的四個 NKS VM,因為排程叢集 A 到 D 之後,這些機架中額外的大型 SKU VM 沒有容量。因為機架 7 和 8 沒有代理程式集區中第四個超大型 SKU 的容量 #1,五個 NKS VM 會落在兩個最少使用的機架上。 在我們的範例中,那些最少使用的機架是機架 3 和 6。
以下是使用者在將叢集 E 部署到目標環境之後,可能會看到的版面配置視覺效果。
在運行時間升級期間放置
自 2024 年 4 月起(網路雲端 2304.1 版),運行時間升級會使用機架逐機架策略執行。 機架 1 中的裸機伺服器會一次重新製作映像。 升級程式會暫停,直到所有裸機伺服器順利重新啟動,並告訴 Nexus 他們已準備好接收工作負載。
注意
可以指示操作員 Nexus 一次只重新映射機架中部分裸機伺服器,不過預設值是平行重新映射機架中的所有裸機伺服器。
重新映像個別裸機伺服器時,在該裸機伺服器上執行的所有工作負載,包括所有 NKS VM、失去電源和連線能力。 在 NKS VM 上執行的工作負載容器會接著失去電源和連線能力。 在無法連線到這些工作負載容器一分鐘之後,NKS 叢集的 Kubernetes 控制平面會將對應的 Pod 標示為狀況不良。 如果 Pod 是 Deployment 或 StatefulSet 的成員,則 NKS 叢集的 Kubernetes 控制平面會嘗試啟動取代 Pod,將觀察到的部署或 StatefulSet 複本計數帶回所需的複本計數。
只有在剩餘狀況良好的 NKS VM 中有 Pod 可用的容量時,才會啟動新的 Pod。 自 2024 年 4 月起(網路雲端 2304.1 版),不會建立新的 NKS VM 來取代裸機伺服器上要重新映像的 NKS VM。
一旦裸機伺服器成功重新映像並能夠接受新的 NKS VM 之後,原本位於相同裸機伺服器上的 NKS VM 會在新重新映像的裸機伺服器上重新啟動。 然後,工作負載容器可能會排程到那些 NKS VM,並可能還原裸機伺服器上具有 Pod 的部署或 StatefulSet。
注意
此行為似乎對用戶看來,好像 NKS VM 並未從裸機伺服器「移動」,但事實上,在新重新映像的裸機伺服器上啟動相同 NKS VM 的新實例時,該伺服器會保留與重新映像之前相同的裸機伺服器名稱。
最佳作法
使用運算元 Nexus 時,請記住下列最佳做法。
- 請避免為代理程式集區指定
AvailabilityZones
。 - 在較小的叢集之前啟動較大的 NKS 叢集。
- 在減少 VM SKU 大小之前,請先減少代理程式集區的計數。
避免為代理程式集區指定 AvailabilityZones
如上述放置案例所示,針對代理程式集區指定 AvailabilityZones
是來自相同 NKS 叢集的 NKS VM 最終會位於相同裸機伺服器上的主要原因。 藉由指定 AvailabilityZones
,您會將代理程式集區「釘選」到機架子集,因而限制相同 NKS 叢集中其他 NKS 叢集和其他代理程式集區 VM 的機架數目。
因此,我們的第一個最佳做法是避免指定 AvailabilityZones
代理程式集區。 如果您需要將代理程式集區釘選到一組 可用性區域,請讓該集盡可能大,以將可能發生的不平衡降到最低。
此最佳做法的其中一個例外狀況是,當您在代理程式集區中只有兩或三個 VM 的情況下。 您可以將該代理程式集區設定 AvailabilityZones
為 [1,3,5,7]
,或在 [0,2,4,6]
運行時間升級期間增加可用性。
在較小的叢集之前啟動較大的 NKS 叢集
自 2024 年 4 月起,以及網路雲端 2403.1 版,NKS 叢集會依建立的順序進行排程。 若要更有效率地封裝您的目標環境,建議您先建立較大的 NKS 叢集,再建立較小的 NKS 叢集。 同樣地,建議您先排程較大的代理程式集區,再排程較小的集區。
這項建議對於使用超大型 NC_G48_224_v1
或 NC_P46_224_v1
SKU 的代理程式集區而言很重要。 使用這些超大型 SKU VM 的最大計數排程代理程式集區,會建立一組較大的裸機伺服器,而其他 NKS 叢集中的代理程式集區中的其他超大型 SKU VM 可以共置。
減少 VM SKU 大小之前,請先減少代理程式集區的計數
如果您在啟動 NKS 叢集或代理程式集區時遇到容量限制,請先減少代理程式集區的計數,再調整 VM SKU 大小。 例如,如果您嘗試建立具有 VM SKU 大小的 NC_P46_224_v1
代理程式集區和計數為 24 的 NKS 叢集,並因資源不足而無法布建 NKS 叢集,您可能會想要使用 的 VM SKU 大小 NC_P36_168_v1
,並繼續計數為 24。 不過,由於工作負載 VM 的需求與裸機伺服器上的單一 NUMA 數據格一致,因此相同的要求可能會導致類似的資源失敗。 請考慮將代理程式集區計數減少為 20,而不是減少 VM SKU 大小。 您的要求很可能符合目標環境的資源容量,而整體部署的 CPU 核心數目比您縮減 VM SKU 還要多。
記憶體優化的 VM SKU
NC_E94_448_v1會取用實體機器的所有客戶可用資源。 NC_E70_336_v1會耗用 75% 的客戶可用資源,但並不保證這完全是一個完整和一半的 NUMA 數據格。 這表示NC_G24_112_v1可能或無法排程在執行NC_E70_336_v1的計算機上,視NC_E70_336_V1 VM 在 NUMA 數據格上的排程方式而定。