定義 GKE 節點的密集配置


您可以使用緊密配置政策,控管 Google Kubernetes Engine (GKE) 節點在可用區內的實體相對位置。

總覽

在 GKE 叢集中建立節點集區和工作負載時,您可以定義緊密放置政策,指定這些節點或工作負載應放置在區域內彼此更靠近的實體位置。節點彼此靠近可減少節點之間的網路延遲,這對緊密耦合的批次工作負載特別有用。

搭配 GKE Autopilot 使用緊密放置功能

在 Autopilot 叢集中,您可以將節點選取器新增至 Pod 規格,為特定工作負載要求緊密放置。您可以使用預設的 Autopilot 密集配置政策,或使用 N2 或 N2D 機器系列的現有 Compute Engine 密集配置政策。

限制

  • GKE 會在同一區域內,以緊密放置的方式佈建工作負載。
  • 適用於 BalancedPerformanceAccelerator 運算類別。
  • 僅適用於 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 UltraA4,我們建議使用以區塊為目標的預訂,而非精簡版刊登位置。詳情請參閱「預留容量」。
  • 每項政策最多可支援 1,500 個 Compute Engine VM 執行個體。無論何時,凡是超過這個上限的節點集區,都會在建立時遭到拒絕。
  • 藍綠升級不支援使用 placement-policy 標記提供自訂資源政策。

建立密集配置政策

如要建立密集配置政策,請在 Google Cloud CLI 中,於建立節點集區或叢集時指定 placement-type=COMPACT 選項。啟用這項設定後,GKE 會盡量將節點集區中的節點配置在實體上較接近的位置。

如要在叢集中使用現有的資源政策,請在建立節點集區或叢集時,為 placement-policy 旗標指定自訂政策的位置。這樣一來,您就能彈性使用預留刊登位置、具有相同刊登位置政策的多個節點集區,以及其他進階刊登位置選項。不過,與指定 --placement-type=COMPACT 標記相比,這也需要更多手動作業。舉例來說,您需要建立、刪除及維護自訂資源政策。請確保所有節點集區都遵守資源政策,VM 執行個體數量上限。如果達到這項限制,但部分節點集區尚未達到大小上限,則新增任何節點都會失敗。

如未指定 placement-typeplacement-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:節點集區升級期間可同時無法使用的節點數量上限。如果是緊湊型放置位置,建議快速升級,不要有突波,盡量在升級期間找到共置節點。

使用共用的自訂配置政策建立節點集區

您可以手動建立資源政策,並在多個節點集區中使用。

  1. 在叢集 Google Cloud 區域中建立資源政策:

    gcloud compute resource-policies create group-placement POLICY_NAME \
        --region REGION \
        --collocation collocated
    

    更改下列內容:

    • POLICY_NAME:資源政策的名稱。
    • REGION:叢集所在的區域。
  2. 使用自訂資源政策建立節點集區:

    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 預留項目

預留可確保指定區域有可用的硬體,降低因硬體不足而導致節點集區建立失敗的風險。

  1. 建立指定密集配置政策的預訂:

    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:要建立預留資源的可用區。
  2. 指定緊湊配置政策和您在上一步中建立的預留項目,即可建立節點集區:

    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。

  1. 在具有密集配置政策的節點集區中,為節點新增汙點:

    kubectl taint nodes -l cloud.google.com/gke-nodepool=NODEPOOL_NAME dedicated-pool=NODEPOOL_NAME:NoSchedule
    
  2. 在工作負載定義中,指定必要的容許度和節點親和性。以下是單一 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 容許度自動佈建節點,請參閱工作負載分離

後續步驟