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


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

개요

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

GKE Autopilot에 압축 배치 사용

제한사항

  • GKE는 동일한 영역의 압축 배치 내에 워크로드를 프로비저닝합니다.
  • 압축 배치는 Balanced 및 A100 GPU에서 사용할 수 있습니다. 자세한 내용은 머신 유형을 참조하세요.
  • 압축 배치는 최대 150개의 노드에 그룹화된 포드에 사용할 수 있습니다.
  • 노드의 라이브 마이그레이션은 지원되지 않습니다.

압축 배치 정책 사용 설정

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

  • cloud.google.com/gke-placement-group는 동일한 압축 배치 그룹에서 함께 실행해야 하는 포드 그룹에 할당하는 식별자입니다.

  • 다음 키 중 하나로 리소스 유형을 정의합니다.

    • cloud.google.com/compute-class: "Balanced"
    • cloud.google.com/gke-accelerator: "nvidia-tesla-a100"

다음 예시는 압축 배치를 사용 설정하는 포드 사양에서 가져온 일부입니다. 배치 그룹 식별자는 placement-group-1이고 컴퓨팅 클래스는 Balanced입니다.

  nodeSelector:
    cloud.google.com/gke-placement-group: "placement-group-1"
    cloud.google.com/compute-class: "Balanced"

각 배치 그룹은 노드 150개로 제한됩니다. 배치 그룹을 그룹화가 유용한 워크로드로 제한하고 가능한 경우 워크로드를 별도의 배치 그룹에 배포하는 것이 좋습니다.

GKE Standard에 압축 배치 사용

제한사항

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

압축 배치 정책 만들기

압축 배치 정책을 만들려면 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: 노드에 사용할 머신 유형이며 C2 머신 유형이어야 합니다(예: c2-standard-4).
  • --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: 노드에 사용할 머신 유형이며 C2 머신 유형이어야 합니다(예: c2-standard-4).
  • 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: 노드에 사용할 머신 유형이며 C2 머신 유형이어야 합니다(예: c2-standard-4).
    • 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: 노드에 사용할 머신 유형입니다. C2 머신 유형이어야 합니다. 예를 들어 vCPU가 4개 있는 사전 정의된 C2 머신 유형을 사용하려면 c2-standard-4를 지정합니다.
    • 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: 노드에 사용할 머신 유형이며 C2 머신 유형이어야 합니다(예: c2-standard-4).
  • 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 버전 1.25부터 노드 자동 프로비저닝이 압축 배치 정책을 지원합니다. 노드 자동 프로비저닝을 사용하는 경우에는 GKE가 클러스터 리소스 수요를 기반으로 노드 풀을 자동으로 프로비저닝합니다. 자세한 내용은 노드 자동 프로비저닝 사용을 참조하세요.

노드 자동 프로비저닝에 압축 배치를 사용 설정하려면 다음 키로 포드 사양에 nodeSelector를 추가합니다.

  • cloud.google.com/gke-placement-group는 동일한 압축 배치 그룹에서 함께 실행해야 하는 포드 그룹에 할당하는 식별자입니다.

  • cloud.google.com/machine-family은 머신 계열 이름입니다. 압축 배치를 지원하는 머신 계열 중 하나를 사용합니다. 컴퓨팅 및 네트워킹 성능 요구사항이 있는 워크로드에는 C2 또는 C2D 머신 계열을 사용하는 것이 좋습니다.

다음 예시에서는 압축 배치를 사용 설정하는 포드 사양이 있습니다.

apiVersion: v1
kind: Pod
metadata:
  ...
spec:
  ...
  nodeSelector:
    cloud.google.com/gke-placement-group: PLACEMENT_GROUP_IDENTIFIER
    cloud.google.com/machine-family: MACHINE_FAMILY

포드 구성에 이미 압축 배치로 지원되는 머신 유형이 정의된 경우 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"

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

다음 단계