선점형 VM 실행

이 페이지에서는 Google Kubernetes Engine의 선점형 VM 지원을 간단히 설명합니다.

개요

선점형 VM은 최대 24시간 동안 지속되고 가용성을 보장하지 않는 Google Compute Engine VM 인스턴스입니다. 선점형 VM은 표준 Compute Engine VM보다 낮은 가격으로 동일한 머신 유형과 옵션을 제공합니다.

GKE 클러스터 또는 노드 풀에서 선점형 VM을 사용하여 선점형 VM의 임시성과 비보장성에 덜 민감한 일괄 작업이나 내결함성 작업을 실행할 수 있습니다.

선점형 VM에 대한 자세한 내용은 Compute Engine 문서의 선점형 VM을 참조하세요.

선점형 VM의 작동 방식

GKE 클러스터나 노드 풀이 생성하는 Compute Engine VM은 관리형 인스턴스 그룹처럼 동작합니다. GKE의 선점형 VM은 관리형 인스턴스 그룹의 선점형 인스턴스와 동일한 제한을 받습니다. 선점형 인스턴스는 선점 알림을 수신하고 나서 30초 후에 종료됩니다.

또한 이러한 선점형 VM에는 Kubernetes 라벨 cloud.google.com/gke-preemptible=true가 부여됩니다. nodeSelector 필드에서 Kubernetes 라벨을 사용하여 Pod를 특정 노드에 예약할 수 있습니다.

다음은 선점형 VM을 필터링하기 위한 선택기의 예시입니다.

apiVersion: v1
kind: Pod
spec:
  nodeSelector:
    cloud.google.com/gke-preemptible: "true"

Kubernetes 제약조건 위반

GKE에서 선점형 VM을 사용하면 일부 Kubernetes 보증이 무효화됩니다. 다음 제약조건은 선점형 VM에 의해 수정됩니다.

  • 노드 선점은 Pod를 비정상적으로 종료하고 구성된 Pod 유예 기간을 무시합니다. 즉, Pod가 예고 없이 종료됩니다.

  • Pod 중단 예산 문서에 따르면 "예산은 모든 비가용성 원인이 아닌 자발적 제거로부터만 보호될 수 있습니다." 선점은 자발적이 아니므로 Pod 중단 예산에 명시된 것보다 더 높은 비가용성을 경험할 수 있습니다.

권장사항

선점형 VM은 가용성을 보장하지 않기 때문에 Compute Engine 인스턴스의 일부 또는 전부가 선점되어 사용할 수 없게 될 수도 있다는 가정하에 시스템을 설계해야 합니다. 새 인스턴스를 사용할 수 있는 시점도 보장하지 않습니다.

또한 선점형 VM에서 실행 중인 Pod가 항상 정상적으로 종료된다고 보장할 수도 없습니다. GKE에서 노드가 선점되었고 Pod가 더 이상 실행되고 있지 않음을 감지하는 데 몇 분 정도 걸리므로 Pod가 새 노드로 다시 예약되는 동안 지연이 발생합니다.

사용 가능한 선점형 VM이 없어도 작업 또는 워크로드가 처리되도록 하려면 클러스터에 비선점형 노드 풀과 선점형 노드 풀을 모두 만들면 됩니다.

일반적으로 노드 이름은 동일하게 유지되지만 선점 후 대체될 경우 내부 및 외부 선점형 VM IP가 선점 시 변경될 수 있습니다.

스테이트풀(Stateful) Pod가 있는 선점형 VM은 StatefulSet의 고유한 의미 체계를 위반할 수 있으며 데이터 손실을 초래할 수 있으므로 사용하면 안됩니다.

노드 taint를 사용하여 선점형 VM 노드에 예약되지 않도록 하기

중요한 Pod는 선점형 VM 노드에 예약되지 않도록 해야 합니다. 노드 taint 및 내결함성을 사용하여 선점형 VM이 있는 노드에 Pod가 예약되지 않도록 할 수 있습니다.

선점형 VM의 노드 tainting

선점형 VM이 있는 노드에 노드 taint를 추가하려면 다음 명령어를 실행합니다.

kubectl taint nodes [NODE_NAME] cloud.google.com/gke-preemptible="true":NoSchedule

이제 노드 taint에 대한 내성이 있는 포드만 해당 노드에 예약됩니다.

Pod에 내결함성 추가

Pod에 관련 내결함성을 추가하려면 Pod의 사양 또는 객체의 Pod 템플릿 사양에 다음을 추가하세요.

tolerations:
- key: cloud.google.com/gke-preemptible
  operator: Equal
  value: "true"
  effect: NoSchedule

GPU 선점형 노드 taint

선점형 GPU 노드 풀을 추가하기 전에 비선점형 노드로 클러스터를 만들어야 합니다. 이렇게 하면 선점형 GPU 노드 풀을 추가하기 전에 항상 DNS와 같은 시스템 구성요소를 실행할 표준 VM의 노드 풀이 있어야 합니다.

GPU가 있는 선점형 노드 풀이 클러스터에 추가될 때 클러스터에 다른 노드 풀이 없는 경우(예: 클러스터가 처음에 선점형 GPU 노드 풀을 사용하여 생성된 경우) 정상적인 "nvidia.com/gpu":NoSchedule taint가 할당되지 않습니다. 즉, 선점형 노드에 시스템 Pod가 예약되므로 선점 시 중단이 발생할 수 있습니다. 이러한 Pod는 GPU 노드의 리소스도 소모합니다. GPU 노드는 비 GPU 노드보다 비싸므로 이는 용량뿐만 아니라 비용 면에서도 낭비입니다.

선점형 VM이 있는 클러스터 또는 노드 풀 만들기

gcloud 명령줄 도구 또는 Cloud Console을 사용하여 선점형 VM이 있는 클러스터 또는 노드 풀을 만들 수 있습니다.

gcloud

--preemptible 플래그를 지정하여 선점형 VM이 있는 클러스터 또는 노드 풀을 만들 수 있습니다.

선점형 VM이 있는 클러스터를 만들려면 다음 명령어를 실행하세요.

gcloud container clusters create [CLUSTER_NAME] --preemptible

여기에서 [COMPUTE_ZONE]은 클러스터의 컴퓨팅 영역입니다.

선점형 VM이 있는 노드 풀을 만들려면 다음 안내를 따르세요.

gcloud container node-pools create [POOL_NAME] --preemptible \
--cluster [CLUSTER_NAME]

Console

  1. Cloud Console에서 Google Kubernetes Engine 메뉴로 이동합니다.

    Google Kubernetes Engine 메뉴로 이동

  2. 클러스터 만들기를 클릭합니다.

  3. 표준 클러스터 템플릿을 선택하거나 워크로드에 적합한 템플릿을 선택합니다.

  4. 원하는 대로 클러스터를 구성합니다. 그런 다음 구성하려는 노드 풀에 대한 추가 옵션을 클릭합니다.

  5. 선점형 노드 섹션에서 선점형 노드 사용을 선택합니다.

  6. 저장을 클릭하여 노드 풀 수정 오버레이를 닫습니다.

  7. 만들기를 클릭합니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Kubernetes Engine 문서