압축 배치 정책을 사용하여 영역 내에서 물리적으로 서로 상대적으로 배치되는 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 노드 풀의 압축 배치에는 다음과 같은 제한사항이 있습니다.
- 새 노드 풀에서만 지원됩니다. 기존 노드 풀에서는 압축 배치를 사용 설정하거나 사용 중지할 수 없습니다.
- 단일 영역에서 작동하는 노드 풀에만 사용할 수 있습니다.
- A2, C2, G2, C2D, C3D, N2, N2D, C3 머신 유형에서만 사용할 수 있습니다.
- 각 정책에서는 최대 150개의 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
: 노드에 사용할 머신 유형이며 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
: 노드 풀 업그레이드 중 동시에 사용할 수 없는 최대 노드 수입니다. 효율적인 배치를 위해서는 일시 급증이 없는 신속한 업그레이드를 통해 업그레이드 중 노드가 인접한 위치에 배치될 가능성을 최적화하는 것이 좋습니다.
공유 커스텀 배치 정책을 사용하여 노드 풀 만들기
리소스 정책을 수동으로 만들고 여러 노드 풀에서 사용할 수 있습니다.
클러스터 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
: 노드에 사용할 머신 유형이며 C2 머신 유형이어야 합니다(예:c2-standard-4
).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
: 노드에 사용할 머신 유형입니다. C2 머신 유형이어야 합니다. 예를 들어 vCPU가 4개 있는 사전 정의된 C2 머신 유형을 사용하려면c2-standard-4
를 지정합니다.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
: 노드에 사용할 머신 유형이며 C2 머신 유형이어야 합니다(예:c2-standard-4
).CLUSTER_NAME
: 기존 클러스터의 이름입니다.
압축 배치를 사용하는 노드에서 워크로드 만들기
압축 배치를 사용하는 전용 노드에서 워크로드를 실행하려면 노드에 포드 할당 및 노드 그룹에서 원치 않는 포드 예약 방지와 같은 여러 가지 Kubernetes 메커니즘을 사용할 수 있습니다.
다음 예시에서는 taint를 전용 노드에 추가하고 해당 톨러레이션(toleration)과 어피니티를 포드에 추가합니다.
압축 배치 정책이 있는 노드 풀의 노드에 taint를 추가합니다.
kubectl taint nodes -l cloud.google.com/gke-nodepool=NODEPOOL_NAME dedicated-pool=NODEPOOL_NAME:NoSchedule
워크로드 정의에서 필요한 톨러레이션(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"
포드 톨러레이션을 사용하는 노드 자동 프로비저닝에 대한 자세한 내용은 워크로드 분리를 참조하세요.
다음 단계
- Compute Engine의 인스턴스 배치 정책 정의 알아보기