GKE 노드를 위한 압축 배치 정의

압축 배치 정책을 사용하여 영역 내에서 물리적으로 서로 상대적으로 배치되는 Google Kubernetes Engine(GKE) 노드를 제어할 수 있습니다.

개요

GKE 클러스터에서 노드 풀과 워크로드를 만들 때 이러한 노드 또는 워크로드가 영역 내에서 물리적으로 서로 가까운 곳에 배치되도록 지정하는 압축 배치 정책을 정의할 수 있습니다. 노드를 서로 가까이 두면 노드 간 네트워크 지연 시간이 줄어들 수 있으므로 특히 긴밀하게 결합된 일괄 워크로드에 유용합니다.

GKE Autopilot에 압축 배치 사용

Autopilot 클러스터에서는 포드 사양에 노드 선택기를 추가하여 특정 워크로드의 압축 배치를 요청할 수 있습니다. 기본 Autopilot 압축 배치 정책 또는 N2 머신 시리즈 또는 N2D 머신 시리즈를 사용하는 기존 Compute Engine 압축 배치 정책을 사용할 수 있습니다.

제한사항

  • GKE는 동일한 영역의 압축 배치 내에 워크로드를 프로비저닝합니다.
  • Balanced, Performance, Accelerator 컴퓨팅 클래스에서 사용할 수 있습니다.
  • C2, C2D, C3, C3D, C4D (1.33.0-gke.1439000 이상), H3, H4D, N2, N2D 머신 유형에서만 사용할 수 있습니다.
  • A100, L4, H100 GPU에서만 사용할 수 있습니다.
  • 압축 배치는 최대 1,500개의 노드에 그룹화된 포드에 사용할 수 있습니다.

압축 배치 정책 사용 설정

GKE Autopilot에 압축 배포를 사용 설정하려면 다음 키를 사용하여 포드 사양에 nodeSelector를 추가합니다.

  • cloud.google.com/gke-placement-group: 동일한 압축 배치 그룹에서 함께 실행해야 하는 포드 그룹에 할당하는 식별자입니다. 각 배치 그룹은 노드 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 이상에서만 커스텀 압축 배치 정책을 지정할 수 있습니다.

    자세한 내용은 이 페이지의 압축 배치 정책 만들기 섹션을 참조하세요.

다음 포드 사양 예시에서는 커스텀 압축 배치 정책으로 압축 배치를 사용 설정합니다.

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 노드 선택기를 추가하거나 배치 우선순위가 있는 커스텀 컴퓨팅 클래스를 정의해야 합니다.

포드 사양에 cloud.google.com/placement-policy-name 노드 선택기를 추가합니다.

이 접근 방식은 JobSet을 사용하여 각 작업을 별도로 예약하는 동시에 커스텀 압축 배치 정책을 사용하여 동일한 작업을 실행하는 노드를 서로 더 가깝게 배치하려는 경우에 유용할 수 있습니다.

JobSet은 작업마다 다른 노드 선택기를 지정하는 것을 지원하지 않으므로 이 시나리오에서는 배치 그룹과 함께 JobSet을 사용할 수 없습니다. 하지만 JobSet의 기본 제공되는 독점 토폴로지 지원을 사용하여 동일한 효과를 얻을 수 있습니다.

다음 포드 사양 예시에서는 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 압축 배치 정책의 이름으로 바꿉니다.

커스텀 컴퓨팅 클래스를 사용하여 배치 정책 정의

자세한 내용은 게재위치 우선순위가 있는 맞춤 컴퓨팅 클래스 문서를 참고하세요.

정책 이름이 있는 nodeSelector를 워크로드 사양에 직접 추가하는 대신 ComputeClass 정의에서 placement 필드를 설정하여 압축 배치 정책을 적용할 수 있습니다. 자세한 내용은 배치 우선순위가 있는 커스텀 컴퓨팅 클래스를 참고하세요.

GKE Standard에 압축 배치 사용

제한사항

GKE Standard 노드 풀의 압축 배치에는 다음과 같은 제한사항이 있습니다.

  • 새 노드 풀에서만 지원됩니다. 기존 노드 풀에서는 압축 배치를 사용 설정하거나 사용 중지할 수 없습니다.
  • 단일 영역에서 작동하는 노드 풀에만 사용할 수 있습니다.
  • A2, A3, A4, C2, C2D, C3, C3D, C4, C4D, G2, H3, H4D, 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: 노드에 사용할 머신 유형이며, Standard 클러스터 제한사항에 나열된 지원되는 머신 유형이어야 합니다.
  • --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: 노드에 사용할 머신 유형이며, Standard 클러스터 제한사항에 나열된 지원되는 머신 유형이어야 합니다.
  • 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: 노드에 사용할 머신 유형이며, Standard 클러스터 제한사항에 나열된 지원되는 머신 유형이어야 합니다.
    • 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: 노드에 사용할 머신 유형이며, Standard 클러스터 제한사항에 나열된 지원되는 머신 유형이어야 합니다.
    • 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: 노드에 사용할 머신 유형이며, Standard 클러스터 제한사항에 나열된 지원되는 머신 유형이어야 합니다.
  • CLUSTER_NAME: 기존 클러스터의 이름입니다.

압축 배치를 사용하는 노드에서 워크로드 만들기

압축 배치를 사용하는 전용 노드에서 워크로드를 실행하려면 노드에 포드 할당노드 그룹에서 원치 않는 포드 예약 방지와 같은 여러 가지 Kubernetes 메커니즘을 사용할 수 있습니다.

다음 예시에서는 taint를 전용 노드에 추가하고 해당 톨러레이션(toleration)과 어피니티를 포드에 추가합니다.

  1. 압축 배치 정책이 있는 노드 풀의 노드에 taint를 추가합니다.

    kubectl taint nodes -l cloud.google.com/gke-nodepool=NODEPOOL_NAME dedicated-pool=NODEPOOL_NAME:NoSchedule
    
  2. 워크로드 정의에서 필요한 톨러레이션(toleration)과 노드 어피니티를 지정합니다. 다음은 단일 포드가 포함된 예시입니다.

    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가 클러스터 리소스 수요에 따라 노드 풀을 자동으로 프로비저닝합니다. 자세한 내용은 노드 자동 프로비저닝 사용을 참조하세요.

노드 자동 프로비저닝에 압축 배치를 사용 설정하려면 다음 예시와 같이 포드 사양에 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: 동일한 압축 배치 그룹에서 함께 실행해야 하는 포드 그룹에 할당하는 식별자입니다.
  • MACHINE_FAMILY: 머신 계열의 이름입니다. 압축 배치를 지원하는 머신 계열 중 하나를 사용합니다. 컴퓨팅 및 네트워킹 성능 요구사항이 있는 워크로드에는 C2 또는 C2D 머신 계열을 사용하는 것이 좋습니다.
  • PLACEMENT_POLICY_NAME: 선택 사항이며, 기존 Compute Engine 압축 배치 정책의 이름입니다. 노드 자동 프로비저닝이 포드를 그룹화하기 위해 새 노드 풀을 만들 때 GKE는 지정된 압축 배치 정책을 사용합니다. GKE 버전 1.31.1-gke.2010000 이상에서만 커스텀 압축 배치 정책을 지정할 수 있습니다.

    자세한 내용은 이 페이지의 압축 배치 정책 만들기 섹션을 참조하세요.

포드 구성에 이미 압축 배치로 지원되는 머신 유형이 정의된 경우 cloud.google.com/machine-family 키를 생략할 수 있습니다. 예를 들어 포드 사양에 nvidia.com/gpu가 포함되어 있고 클러스터가 A100 GPU를 사용하도록 구성된 경우 cloud.google.com/machine-family 키를 포함할 필요가 없습니다.

다음 예시는 nvidia.com/gpu 요청을 정의하는 포드 사양이며 클러스터는 A100 GPU를 사용하도록 구성됩니다. 이 포드 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

자세한 내용은 GPU를 사용하도록 포드를 구성하는 방법을 참조하세요.

게재위치 그룹 크기 최적화하기

GKE는 작은 배포에 가장 적합한 배치를 찾기 때문에 동일한 게재위치 그룹에서 다른 유형의 포드를 실행하지 않도록 GKE에 지시하는 것이 좋습니다. cloud.google.com/gke-placement-group 키와 정의된 압축 배치 식별자를 사용하여 톨러레이션 키를 추가합니다.

다음 예시에서는 압축 배치를 사용하여 포드 톨러레이션을 정의하는 포드 사양입니다.

apiVersion: v1
kind: Pod
metadata:
  ...
spec:
  ...
  tolerations:
  - key: cloud.google.com/gke-placement-group
    operator: "Equal"
    value: PLACEMENT_GROUP_IDENTIFIER
    effect: "NoSchedule"

포드 톨러레이션을 사용하는 노드 자동 프로비저닝에 대한 자세한 내용은 워크로드 분리를 참조하세요.

다음 단계