您可以使用緊密配置政策,控管 Google Kubernetes Engine (GKE) 節點在可用區內的實體相對位置。
總覽
在 GKE 叢集中建立節點集區和工作負載時,您可以定義緊密放置政策,指定這些節點或工作負載應放置在區域內彼此更靠近的實體位置。節點彼此靠近可減少節點之間的網路延遲,這對緊密耦合的批次工作負載特別有用。
搭配 GKE Autopilot 使用緊密放置功能
在 Autopilot 叢集中,您可以將節點選取器新增至 Pod 規格,為特定工作負載要求緊密放置。您可以使用預設的 Autopilot 密集配置政策,或使用 N2 或 N2D 機器系列的現有 Compute Engine 密集配置政策。
限制
- GKE 會在同一區域內,以緊密放置的方式佈建工作負載。
- 適用於
Balanced
、Performance
和Accelerator
運算類別。 - 僅適用於 C2、C2D、C3、C3D、C4D (1.33.0-gke.1439000 以上版本)、H3、N2 和 N2D 機型。
- 僅適用於 A100、L4 和 H100 GPU。
- 密集配置模式適用於最多 1,500 個節點上分組的 Pod。
啟用密集配置政策
如要為 GKE Autopilot 啟用緊密放置功能,請在 Pod 規格中新增 nodeSelector
,並使用下列鍵:
cloud.google.com/gke-placement-group
:您為應一起執行的 Pod 群組指派的 ID,位於同一個緊湊型刊登位置群組中。每個刊登位置群組最多可有 1,500 個節點。建議您只將受益於分組的工作負載納入放置群組,並盡可能將工作負載分配到不同的放置群組。下列其中一個鍵,用於定義資源類型:
cloud.google.com/compute-class: "Balanced"
cloud.google.com/gke-accelerator: "nvidia-tesla-a100"
cloud.google.com/placement-policy-name
:(選用) 現有 Compute Engine 密集配置政策的名稱。只有在 GKE 1.31.1-gke.2010000 以上版本中,才能指定自訂密集配置政策。如需操作說明,請參閱本頁面的「建立精簡刊登位置政策」一節。
下列 Pod 規格範例會透過自訂密集配置政策啟用密集配置:
apiVersion: v1
kind: Pod
metadata:
# lines omitted for clarity
spec:
nodeSelector:
cloud.google.com/gke-placement-group: "placement-group-1"
cloud.google.com/compute-class: "Balanced"
cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME
將 PLACEMENT_POLICY_NAME
替換為現有 Compute Engine 緊湊放置群組政策的名稱。如要使用 Autopilot 的預設密集配置政策,請省略 cloud.google.com/placement-policy-name
行。
使用自訂密集配置政策,但不使用配置群組
如要使用自訂密集配置政策,但沒有配置群組,請將 cloud.google.com/placement-policy-name
節點選取器新增至 Pod 規格。
如果您想使用 JobSet 分別排定每個工作,但同時也想使用自訂的精簡放置政策,將執行相同工作的節點彼此靠近,這個方法或許會很有用。
由於 JobSet 不支援為每個工作指定不同的節點選取器,因此在這種情況下,您無法將 JobSet 與刊登位置群組搭配使用。不過,您可以使用 JobSet 內建的專屬拓撲支援功能,達到相同效果。
下列 Pod 規格會為 JobSet 工作負載啟用密集配置,並採用自訂密集配置政策:
apiVersion: jobset.x-k8s.io/v1alpha2
kind: JobSet
metadata:
name: my-jobset
annotations:
alpha.jobset.sigs.k8s.io/exclusive-topology: cloud.google.com/gke-nodepool
spec:
replicatedJobs:
- name: my-job
template:
spec:
# lines omitted for clarity
template:
spec:
nodeSelector:
cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME
cloud.google.com/machine-family: "n2"
# lines omitted for clarity
將 PLACEMENT_POLICY_NAME
替換為現有 Compute Engine 緊湊放置群組政策的名稱。
搭配 GKE Standard 使用密集配置
限制
GKE Standard 節點集區中的緊密放置位置有下列限制:
- 僅支援新節點集區。您無法在現有節點集區中啟用或停用緊湊放置功能。
- 僅適用於在單一可用區中運作的節點集區。
- 僅適用於 A2、A3、A4、C2、C2D、C3、C3D、C4、C4D、G2、H3、N2 和 N2D機型。不過,對於 A3 Ultra 和 A4,我們建議使用以區塊為目標的預訂,而非精簡版刊登位置。詳情請參閱「預留容量」。
- 每項政策最多可支援 1,500 個 Compute Engine VM 執行個體。無論何時,凡是超過這個上限的節點集區,都會在建立時遭到拒絕。
- 藍綠升級不支援使用
placement-policy
標記提供自訂資源政策。
建立密集配置政策
如要建立密集配置政策,請在 Google Cloud CLI 中,於建立節點集區或叢集時指定 placement-type=COMPACT
選項。啟用這項設定後,GKE 會盡量將節點集區中的節點配置在實體上較接近的位置。
如要在叢集中使用現有的資源政策,請在建立節點集區或叢集時,為 placement-policy
旗標指定自訂政策的位置。這樣一來,您就能彈性使用預留刊登位置、具有相同刊登位置政策的多個節點集區,以及其他進階刊登位置選項。不過,與指定 --placement-type=COMPACT 標記相比,這也需要更多手動作業。舉例來說,您需要建立、刪除及維護自訂資源政策。請確保所有節點集區都遵守資源政策,VM 執行個體數量上限。如果達到這項限制,但部分節點集區尚未達到大小上限,則新增任何節點都會失敗。
如未指定 placement-type
和 placement-policy
標記,節點放置位置預設沒有任何限制。
在新叢集中建立緊湊配置政策
建立新叢集時,您可以指定要套用至預設節點集區的緊密放置政策。為叢集建立後續節點集區時,您需要指定是否要套用緊密放置。
如要建立新叢集,並在預設節點集區套用緊密放置政策,請使用下列指令:
gcloud container clusters create CLUSTER_NAME \
--machine-type MACHINE_TYPE \
--placement-type COMPACT \
--max-surge-upgrade 0 \
--max-unavailable-upgrade MAX_UNAVAILABLE
更改下列內容:
CLUSTER_NAME
:新叢集的名稱。MACHINE_TYPE
:節點使用的機器類型,必須是標準叢集限制中列出的支援機器類型。--placement-type COMPACT
:為預設節點集區中的節點套用密集配置模式。MAX_UNAVAILABLE
:節點集區升級期間可同時無法使用的節點數量上限。如果是緊湊型放置位置,建議快速升級,不要有突波,盡量在升級期間找到共置節點。
在現有叢集上建立密集配置政策
在現有叢集上,您可以建立套用緊密放置政策的節點集區。
如要建立套用精簡放置政策的節點集區,請使用下列指令:
gcloud container node-pools create NODEPOOL_NAME \
--machine-type MACHINE_TYPE \
--cluster CLUSTER_NAME \
--placement-type COMPACT \
--max-surge-upgrade 0 \
--max-unavailable-upgrade MAX_UNAVAILABLE
更改下列內容:
NODEPOOL_NAME
:新節點集區的名稱。MACHINE_TYPE
:節點使用的機器類型,必須是標準叢集限制中列出的支援機器類型。CLUSTER_NAME
:現有叢集的名稱。--placement-type COMPACT
:表示要為新節點集區中的節點套用緊密放置設定。MAX_UNAVAILABLE
:節點集區升級期間可同時無法使用的節點數量上限。如果是緊湊型放置位置,建議快速升級,不要有突波,盡量在升級期間找到共置節點。
使用共用的自訂配置政策建立節點集區
您可以手動建立資源政策,並在多個節點集區中使用。
在叢集 Google Cloud 區域中建立資源政策:
gcloud compute resource-policies create group-placement POLICY_NAME \ --region REGION \ --collocation collocated
更改下列內容:
POLICY_NAME
:資源政策的名稱。REGION
:叢集所在的區域。
使用自訂資源政策建立節點集區:
gcloud container node-pools create NODEPOOL_NAME \ --machine-type MACHINE_TYPE \ --cluster CLUSTER_NAME \ --placement-policy POLICY_NAME \ --max-surge-upgrade 0 \ --max-unavailable-upgrade MAX_UNAVAILABLE
更改下列內容:
NODEPOOL_NAME
:新節點集區的名稱。MACHINE_TYPE
:節點使用的機器類型,必須是標準叢集限制中列出的支援機器類型。CLUSTER_NAME
:現有叢集的名稱。MAX_UNAVAILABLE
:節點集區升級期間可同時無法使用的節點數量上限。如果是緊湊型放置位置,建議快速升級,不要有突波,盡量在升級期間找到共置節點。
使用具有密集配置政策的 Compute Engine 預留項目
預留可確保指定區域有可用的硬體,降低因硬體不足而導致節點集區建立失敗的風險。
建立指定密集配置政策的預訂:
gcloud compute reservations create RESERVATION_NAME \ --vm-count MACHINE_COUNT \ --machine-type MACHINE_TYPE \ --resource-policies policy=POLICY_NAME \ --zone ZONE \ --require-specific-reservation
更改下列內容:
RESERVATION_NAME
:預訂名稱。MACHINE_COUNT
:預留節點數量。MACHINE_TYPE
:節點使用的機器類型,必須是標準叢集限制中列出的支援機器類型。POLICY_NAME
:資源政策的名稱。ZONE
:要建立預留資源的可用區。
指定緊湊配置政策和您在上一步中建立的預留項目,即可建立節點集區:
gcloud container node-pools create NODEPOOL_NAME \ --machine-type MACHINE_TYPE \ --cluster CLUSTER_NAME \ --placement-policy POLICY_NAME \ --reservation-affinity specific \ --reservation RESERVATION_NAME \ --max-surge-upgrade 0 \ --max-unavailable-upgrade MAX_UNAVAILABLE
更改下列內容:
NODEPOOL_NAME
:新節點集區的名稱。MACHINE_TYPE
:節點使用的機器類型,必須是標準叢集限制中列出的支援機器類型。CLUSTER_NAME
:現有叢集的名稱。
在採用密集配置模式的節點上建立工作負載
如要在使用緊密佈局的專屬節點上執行工作負載,您可以運用多種 Kubernetes 機制,例如將 Pod 指派給節點,以及禁止在節點群組上排程不需要的 Pod。
在下列範例中,我們將汙點新增至專屬節點,並將對應的容許條件和親和性新增至 Pod。
在具有密集配置政策的節點集區中,為節點新增汙點:
kubectl taint nodes -l cloud.google.com/gke-nodepool=NODEPOOL_NAME dedicated-pool=NODEPOOL_NAME:NoSchedule
在工作負載定義中,指定必要的容許度和節點親和性。以下是單一 Pod 的範例:
apiVersion: v1 kind: Pod metadata: ... spec: ... tolerations: - key: dedicated-pool operator: "Equal" value: "NODEPOOL_NAME" effect: "NoSchedule" affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: dedicated-pool operator: In values: - NODEPOOL_NAME
在某些地區,您可能無法使用密集配置方式政策建立大型節點集區。如要將這類節點集區的大小限制在必要範圍內,建議您為每個需要緊密放置的工作負載建立節點集區。
為節點自動佈建功能使用密集配置
啟用節點自動佈建功能後,GKE 會根據叢集資源需求自動佈建節點集區。詳情請參閱「使用節點自動佈建功能」。
如要為節點自動佈建功能啟用緊密放置功能,請在 Pod 規格中新增 nodeSelector
,如下列範例所示:
apiVersion: v1
kind: Pod
metadata:
# lines omitted for clarity
spec:
nodeSelector:
cloud.google.com/gke-placement-group: PLACEMENT_GROUP_IDENTIFIER
cloud.google.com/machine-family: MACHINE_FAMILY
cloud.google.com/placement-policy-name: PLACEMENT_POLICY_NAME
# lines omitted for clarity
更改下列內容:
PLACEMENT_GROUP_IDENTIFIER
:您為應在同一緊密放置群組中一起執行的 Pod 群組指派的 ID。MACHINE_FAMILY
:機器系列的名稱。使用支援密集配置模式的機器系列。如果工作負載對運算和網路效能有要求,建議使用 C2 或 C2D 機器系列。PLACEMENT_POLICY_NAME
:(選用) 現有 Compute Engine 密集配置政策的名稱。節點自動佈建功能建立新節點集區時,GKE 會使用指定的密集配置方式政策,將 Pod 分組。只有在 GKE 1.31.1-gke.2010000 以上版本中,才能指定自訂密集配置政策。如需操作說明,請參閱本頁面的「建立精簡刊登位置政策」一節。
如果 Pod 設定已定義支援緊密放置的機器類型,則可以省略 cloud.google.com/machine-family
鍵。舉例來說,如果 Pod 規格包含 nvidia.com/gpu
,且叢集已設定為使用 A100 GPU,則不需要加入 cloud.google.com/machine-family
鍵。
下列範例是 Pod 規格,定義了 nvidia.com/gpu
要求,且叢集已設定為使用 A100 GPU。這個 Pod spec
不包含 cloud.google.com/machine-family
金鑰:
apiVersion: v1
kind: Pod
metadata:
...
spec:
...
nodeSelector:
cloud.google.com/gke-placement-group: PLACEMENT_GROUP_IDENTIFIER
cloud.google.com/gke-accelerator: "nvidia-tesla-a100"
resources:
limits:
nvidia.com/gpu: 2
詳情請參閱如何設定 Pod 以使用 GPU。
最佳化刊登位置群組大小
由於 GKE 會為較小的部署作業尋找最佳位置,因此建議您指示 GKE 避免在同一個放置群組中執行不同類型的 Pod。新增容許度鍵,其中包含您定義的 cloud.google.com/gke-placement-group
鍵和精簡放置位置 ID。
以下範例是 Pod 規格,定義了具有緊密放置位置的 Pod 容許條件:
apiVersion: v1
kind: Pod
metadata:
...
spec:
...
tolerations:
- key: cloud.google.com/gke-placement-group
operator: "Equal"
value: PLACEMENT_GROUP_IDENTIFIER
effect: "NoSchedule"
如要進一步瞭解如何使用 Pod 容許度自動佈建節點,請參閱工作負載分離
後續步驟
- 瞭解如何在 Compute Engine 中定義執行個體放置政策。