本頁說明如何設定 Google Kubernetes Engine (GKE) 標準叢集中每個節點的最大 Pod 數,藉此最佳化叢集資源,確保 Pod 有足夠的排程容量。本頁面說明 Pod、CIDR 區塊大小和節點數量之間的關係,如何影響 GKE 排程 Pod 和在叢集內分配 IP 位址的方式。本頁面也包含每個節點最多可執行的 Pod 數的限制和預設值詳細資料。
如果您是佈建及設定雲端資源、部署應用程式和服務,以及管理雲端部署作業網路的作業人員、雲端架構師、開發人員和網路工程師,這個頁面可為您提供協助。如要進一步瞭解內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。 Google Cloud
閱讀本頁內容前,請先瞭解何時應使用 GKE Standard 叢集而非 Autopilot 叢集,以及 Kubernetes 網路模型。
事前準備
開始之前,請確認您已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
限制
- 您只能在虛擬私有雲原生叢集中,設定每個節點的最大 Pod 數。
- 節點的建立受限於 Pod 位址範圍中可用的位址數量。如需預設、最小和最大 Pod 位址範圍的大小,請參閱 IP 位址範圍規劃表。您也可以使用不連續的多 Pod CIDR 新增其他 Pod IP 位址。
每個叢集都需要在
kube-system
命名空間中建立 kube-system Pod,例如 kube-proxy。減少每個節點的 Pod 數量上限時,請務必將工作負載 Pod 和系統 Pod 都納入考量。如要列出叢集中的系統 Pod,請執行下列指令:kubectl get pods --namespace kube-system
設定每個節點的 Pod 數量上限
您可以在建立叢集和建立節點集區時,設定標準叢集中每個節點的最大 Pod 數。叢集或節點集區建立後,這個設定就無法再變更。如為 Autopilot 叢集,節點數量上限為預先設定,且無法變更。
不過,如果 Pod IP 位址用盡,可以使用不連續的多 Pod CIDR 建立其他 Pod IP 位址範圍。
使用 gcloud CLI 或 Google Cloud 控制台建立叢集時,您可以設定 Pod 位址範圍的大小。
gcloud
如要使用 gcloud CLI 設定每個節點的預設 Pod 上限,請執行下列指令:
gcloud container clusters create CLUSTER_NAME \
--enable-ip-alias \
--cluster-ipv4-cidr=10.0.0.0/21 \
--services-ipv4-cidr=10.4.0.0/19 \
--create-subnetwork=name='SUBNET_NAME',range=10.5.32.0/27 \
--default-max-pods-per-node=MAXIMUM_PODS \
--location=COMPUTE_LOCATION
更改下列內容:
CLUSTER_NAME
:新叢集的名稱。SUBNET_NAME
:叢集的新子網路名稱。MAXIMUM_PODS
:叢集每個節點的預設 Pod 數量上限,最多可設定為256
。如未指定,Kubernetes 會指派預設值110
。COMPUTE_LOCATION
:新叢集的 Compute Engine 位置。
控制台
在 Google Cloud 控制台中,前往「建立 Kubernetes 叢集」頁面。
設定新的叢集。
在導覽窗格的「叢集」底下,按一下 [網路]。
確認已勾選「Enable VPC-native traffic routing (uses alias IP)」(啟用虛擬私有雲原生流量轉送功能 (使用別名 IP)) 核取方塊。
在導覽窗格的「Node pools」(節點集區) 下方,按一下「Nodes」(節點)。
將「Maximum pods per node」(每個節點的 Pod 數上限) 欄位設定為
110
。GKE 使用這個值微調指派給節點的 IP 位址範圍的大小。點選「建立」。
設定叢集的每個節點最大 Pod 數時,Kubernetes 會使用這個值為節點分配 CIDR 範圍。您可以根據叢集的 Pod 次要 IP 位址範圍,以及為節點分配的 CIDR 範圍,計算叢集上的節點數量上限。
舉例來說,如果您將預設最大 Pod 數設為 110
,並將 Pod 的次要 IP 位址範圍設為 /21
,Kubernetes 會將 /24
CIDR 範圍指派給叢集中的節點。指派 CIDR 範圍後,叢集最多可有 2(24-21) = 23 = 8
個節點。
同樣地,如果您將預設最大 Pod 數設為 8
,並將叢集的 Pod 次要 IP 位址範圍設為 /21
,Kubernetes 會將 /28
CIDR 範圍指派給節點。指派 CIDR 範圍後,叢集最多可有 2(28-21) = 27 = 128
個節點。
在現有叢集內,為新的節點集區設定 Pod 數量上限
在現有標準叢集中建立節點集區時,您也可以指定每個節點的最大 Pod 數。建立新節點集區可讓您將 IP 位址分配最佳化,即使未在叢集層級設定每個節點的預設 Pod 數上限的現有叢集中也是如此。
在節點集區層級設定 Pod 數量上限,會覆寫叢集層級的預設上限。如果您在建立節點集區時,未設定每個節點的 Pod 數量上限,系統會套用叢集層級的上限。
gcloud
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--max-pods-per-node=MAXIMUM_PODS
更改下列內容:
POOL_NAME
:新節點集區的名稱。CLUSTER_NAME
:要建立節點集區的叢集名稱。MAXIMUM_PODS
:節點集區中的 Pod 數量上限。
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在叢集清單中,按一下您要修改的叢集名稱。
按一下 add_box「Add Node Pool」(新增節點集區)。
按一下導覽窗格中的「Nodes」(節點)。
在「Networking」(網路) 下方的「Maximum Pods per node」(每個節點的 Pod 數上限) 欄位輸入值。GKE 使用這個值微調指派給節點的 IP 位址範圍的大小。
Pod 次要範圍和每個節點的 Pod 數量上限
設定每個節點的最大 Pod 數時,您間接影響了 Pod 次要範圍的大小。GKE 每個節點集區至少需要 /24 的 CIDR 區塊。建立節點集區時,如果嘗試指定小於 /24 的 Pod 次要範圍,會導致下列錯誤:
Pod secondary range 'Pod' must have a CIDR block of at least /24
如果整體叢集需要小於 /24 的範圍,您可以使用 Google Cloud CLI 的 --cluster-ipv4-cidr 引數,在叢集層級指定此範圍。詳情請參閱「使用特定 CIDR 範圍建立叢集」。您也可以使用不連續的多 Pod CIDR,在叢集中新增更多 Pod IP 位址範圍。
每個叢集都需要在 kube-system 命名空間中建立 kube-system Pod,例如 kube-proxy。設定每個節點的 Pod 數量上限時,請務必將工作負載 Pod 和系統 Pod 都納入考量。
關於每個節點的預設 Pod 數量上限
根據預設,標準叢集中的每個節點最多可有 110 個 Pod,但您可以設定標準叢集,讓每個節點最多可有 256 個 Pod。Autopilot 叢集會根據預期工作負載 Pod 密度,從 8 到 256 的範圍中選擇每個節點的 Pod 數量上限。Kubernetes 將 IP 位址的範圍 (一個 CIDR 區塊) 指派給每個節點,使每一個 Pod 都有一個不重複的 IP 位址。CIDR 區塊的大小對應每個節點的最大 Pod 數。
Standard 叢集中的 Pod CIDR 範圍
由於標準叢集每個節點預設最大量是 110 個 Pod,Kubernetes 會將 /24 CIDR 區塊 (256 個位址) 指派給每個節點。Kubernetes 如果擁有的可用 IP 位址數,是節點上可建立的最大 Pod 數的兩倍以上,便能夠在將 Pod 新增至節點或從節點移除 Pod 時,減少 IP 位址的重複使用情形。
雖然硬性限制每個節點要有 256 個 Pod,但您仍可減少節點上的 Pod 數量。指派給節點的 CIDR 區塊大小取決於每個節點的最大 Pod 數值。區塊一律包含每個節點的最大 Pod 數至少兩倍的位址。
下表列出 Kubernetes 依據每個節點的最大 Pod 數,指派給節點的 CIDR 區塊大小,以及對應的可使用 IP 位址數量:
每個節點的 Pod 數量上限 | 每個節點的 CIDR 範圍 | IP 位址數量 |
---|---|---|
8 | /28 | 16 |
9 – 16 | /27 | 32 |
17 – 32 | /26 | 64 |
33 – 64 | /25 | 128 |
65 至 128 | /24 | 256 |
129 - 256 | /23 | 512 |
調整叢集大小時,Pod 次要 IP 位址範圍的注意事項
建立叢集時,Pod 的次要 IP 位址範圍大小是固定的,您必須仔細規劃這個範圍的大小,以因應目前和未來的工作負載需求。如果 Pod 的 IP 位址空間不足,可能會導致排程失敗,並阻礙叢集擴充。
如果不確定所需大小,建議先從較大的範圍開始,例如 /21
,這是使用 Google Cloud CLI 建立叢集的預設值。較大的範圍可為中等大小的叢集提供足夠的 IP 位址,並讓您彈性因應日後的使用需求。如果 Pod IP 位址用盡,可以使用不連續的多 Pod CIDR,加入更多 Pod IP 位址範圍。
不過,如果您在 IP 位址空間受限的環境中工作,可能需要使用較小的範圍。在這種情況下,您可以減少每個節點的最大 Pod 數。降低每個節點的最大 Pod 數可讓每個節點的 Pod CIDR 範圍變小,進而讓整個叢集在較小的 Pod 次要範圍內容納更多節點。這項設定會決定每個節點的 Pod 密度,以及叢集中的節點總數。
如要計算叢集可支援的最大 Pod 數,請提供每個節點的 Pod 數和 CIDR 範圍的輸入值。GKE 會根據這些輸入內容,決定節點和 Pod 的位址範圍大小。
使用者指定的值
這些是您在建立叢集或節點集區時提供的值。
Q
:每個節點的 Pod 數量上限。- 如果是 Autopilot 叢集,
Q
是固定值 (目前為 32)。 - 如果是標準叢集,您可以設定
Q
。
- 如果是 Autopilot 叢集,
DS
:Pod 子網路的前置字元長度。舉例來說,如果 CIDR 範圍為/17
,前置字串長度就是17
。S
:主要子網路的前置字元長度。舉例來說,如果 CIDR 範圍為/24
,前置字串長度就是24
。
計算值
GKE 會根據您的輸入內容計算下列值。
M
:每個節點 Pod 範圍的網路遮罩大小。none M = 31 - ⌈log₂(Q)⌉
使用無條件進位函式 (⌈ ⌉
) 將值無條件進位至最接近的整數。HM
:節點 Pod 範圍網路遮罩的主機位元數。none HM = 32 - M
HD
:所選 CIDR Pod 子網路網路遮罩的主機位元數。none HD = 32 - DS
MN
:Pod 子網路可支援的節點數量上限。none MN = 2^(HD - HM)
MP
:Pod 子網路可支援的 Pod 數量上限。none MP = MN * Q
N
:主要範圍中可用的 IP 位址數量。none N = 2^(32-S) - 4
重要注意事項:
- 次要範圍中的所有 IP 位址都可用於 Pod。
- 這些計算結果會提供理論上的最大值。實際成效可能會受到其他因素影響。
範例:
假設您要建立 GKE Autopilot 叢集,並使用下列設定:
- Pod 子網路 CIDR 為
/17
(DS
= 17)。 - 每個節點最多 32 個 Pod (
Q
= 32)。
計算 Pod 數量上限:
M = 31 - ⌈log₂(32)⌉ = 26
HM = 32 - 26 = 6
HD = 32 - 17 = 15
MN = 2(15 - 6) = 512
MP = 512 * 32 = 16,384
這個叢集最多可支援 512 個節點和 16,384 個 Pod。
降低 Pod 數量上限
降低每個節點的最大 Pod 數可讓叢集擁有更多節點,因為每個節點只需要總 IP 位址空間中比較小的部分。 此外,您也可以在建立叢集時指定比較小的 Pod IP 位址空間,在叢集中支援同樣的節點數目。
減少每個節點的最大 Pod 數也讓您可以建立需要較少 IP 位址的較小叢集。例如,每個節點有 8 個 Pod 時,則會將 /28 CIDR 授予每一個節點。這些 IP 位址範圍,加上您定義的子網路和次要範圍,決定了成功建立叢集所需的 IP 位址數。
您可以在建立叢集和建立節點集區時,設定每個節點的最大 Pod 數。
後續步驟
- 瞭解如何建立虛擬私有雲原生叢集。
- 瞭解如何將其他 Pod IP 位址新增至叢集。
- 瞭解遷移至 GKE 時的 IP 位址管理策略。
- 瞭解 GKE IP 位址使用率洞察。