GPU 및 TPU의 GKE 노드 중단 관리


장기 실행 GKE 클러스터 수명 주기 동안 GKE 인프라의 기반이 되는 Compute Engine 리소스에 대해Google Cloud 에서 발행한 자동 유지보수 이벤트로 인해 주기적으로 워크로드가 중단됩니다. 이 페이지에서는 GKE에서 노드 중단이 의미하는 바를 이해하고, 유지보수 알림을 모니터링하고, GPU 및 TPU가 연결된 GKE 노드에서 서비스 중단의 영향을 최소화하는 방법을 설명합니다.

이 문서는 기본 기술 인프라의 수명 주기를 관리하는 플랫폼 관리자 및 운영자를 위해 작성되었습니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할 및 예시 태스크에 대해 자세히 알아보려면 일반 GKE Enterprise 사용자 역할 및 태스크를 참조하세요.

GKE에서 노드 중단이란 무엇을 의미하나요?

GKE 클러스터는 GKE 노드 수명 주기를 관리합니다. 이러한 노드는 Compute Engine VM에 프로비저닝되며, Compute Engine VM에서는 다음과 같은 다양한 이유로 인해 주기적으로 호스트 이벤트가 발생합니다.

  • 하드웨어 또는 소프트웨어 업데이트 및 유지보수 자동 유지보수 이벤트는 Google Cloud에서 수행합니다.
  • 하드웨어 오류
  • Compute Engine VM으로 업그레이드. 이러한 업그레이드는 GKE 노드 또는 노드 풀 버전 업그레이드와 다릅니다.

호스트 이벤트는 기본 Google Cloud 인프라에 발생하며 GKE 유지보수 정책과 제외를 우회합니다. 장기 실행 GKE 클러스터의 수명 주기 동안 노드에서 학습 또는 서빙 워크로드 주기적인 중단이 발생할 수 있습니다. 이러한 중단이 AI/ML 워크로드를 실행하는 GKE 노드에 영향을 미치는 경우 GKE에서 실행 중인 워크로드와 기본 노드 모두 다시 시작해야 합니다.

GPU 및 TPU에서 중단 관리가 필요한 이유

일부 예외를 제외하고 대부분의 Compute Engine VM에는 라이브 마이그레이션으로 설정된 호스트 유지보수 정책이 있습니다. 즉, 실행 중인 워크로드가 일반적으로 거의 또는 전혀 중단되지 않습니다. 하지만 GPUTPU가 연결된 VM을 포함하여 특정 클래스의 VM에서는 라이브 마이그레이션을 지원하지 않습니다. TPU 슬라이스 내의 VM에 호스트 이벤트가 발생하면 모든 유지보수 이벤트가 슬라이스 수준에서 조정되므로 전체 슬라이스가 중단된 후 다시 예약됩니다. 따라서 수백 대의 VM이 있는 TPU 슬라이스를 만들면 모든 VM에 동일한 유지보수 이벤트 일정이 적용됩니다.

호스트 이벤트가 발생하면 GKE에서 노드와 해당 포드를 종료합니다. 포드가 작업 또는 배포와 같은 더 큰 워크로드의 일부로 배포되면 GKE는 영향을 받는 노드에서 포드를 다시 시작합니다.

유지보수 이벤트에 적절하게 반응하도록 워크로드 구성을 처리하는 것은 사용자 또는 사용하는 프레임워크에 달려 있습니다. 예를 들어 AI 학습 작업 상태를 저장하여 데이터 손실을 줄일 수 있습니다.

AI/ML 워크로드의 중단을 관리하려면 다음을 실행하면 됩니다.

유지보수 알림 모니터링

Compute Engine은 노드와 기본 VM에 중단이 발생하는 호스트 이벤트가 예약되었을 때, 그리고 이러한 이벤트가 활성화되었을 때 알림을 전송합니다. 알림에는 예정된 시작 시간, 이벤트 유형, 기타 세부정보에 관한 정보가 포함됩니다.

GKE 버전 1.31.1-gke.2008000 이상에서는 이 섹션에 설명된 이벤트를 비롯하여 예정된 유지보수 이벤트를 모니터링할 수 있습니다.

예정된 유지보수가 예약되었지만 활성화되지 않음

GPU 또는 TPU가 연결된 VM에 예약된 유지보수 이벤트가 있기 전에 Compute Engine은 모든 VM에 알림을 푸시합니다. 이러한 알림은 유지보수 기간의 시작을 보고합니다. VM에서 예정된 유지보수가 예약되었지만 활성 상태가 아니면 GKE는 노드 라벨에 scheduled-maintenance-time을 추가합니다.

노드 수준에서 이러한 알림을 쿼리하려면 다음 명령어를 실행합니다.

kubectl get nodes -l cloud.google.com/scheduled-maintenance-time \
    -L cloud.google.com/scheduled-maintenance-time

출력은 다음과 비슷합니다.

NAME                         STATUS    SCHEDULED-MAINTENANCE-TIME
<gke-accelerator-node-name>  Ready     1733083200
<gke-accelerator-node-name>  Ready     1733083200
[...]

SCHEDULED-MAINTENANCE-TIME 열은 초를 나타내며 유닉스 시간 형식으로 표시됩니다.

노드 메타데이터 수준에서 이러한 알림을 쿼리하려면 인스턴스에서 유지보수 이벤트 알림을 확인하세요.

예약된 유지보수 시작

고급 유지보수를 지원하는 가속기 최적화 머신 계열의 경우 예약된 유지보수 이벤트 및 시작된 유지보수 이벤트에 관한 정보를 제공하는 upcoming-maintenance 엔드포인트에 액세스할 수 있습니다.

예약된 유지보수가 시작되면 Compute Engine은 http://metadata.google.internal/computeMetadata/v1/instance/attributes/ 디렉터리의 메타데이터를 업데이트합니다. Compute Engine은 다음과 같이 메타데이터 라벨을 업데이트합니다.

  • maintenance-eventTERMINATE_ON_HOST_MAINTENANCE로 설정합니다.
  • upcoming-maintenance에서 maintenance_statusONGOING으로 설정합니다.

GKE는 유지보수 알림 기간의 제한된 최대 사전 정의된 시간 내에 포드를 정상적으로 삭제하고 워크로드를 종료합니다.

서비스 중단 영향 최소화

노드 중단의 영향을 최소화하려면 호스트 유지보수 이벤트를 수동으로 시작하면 됩니다.

유지보수 이벤트를 시작하지 않으면 Compute Engine에서 정기적으로 예약된 유지보수를 완료합니다.

수동으로 호스트 유지보수 이벤트 시작

Compute Engine에서 예약된 유지보수 이벤트에 관한 알림을 보낼 때 운영 일정에 맞는 시간(예: 활동이 줄어든 기간)에 유지보수를 수동으로 시작할 수 있습니다.

노드 풀의 노드에서 노드 라벨 cloud.google.com/perform-maintenancetrue로 설정합니다. 예를 들면 다음과 같습니다.

kubectl label nodes <node-name> cloud.google.com/perform-maintenance=true

GKE는 perform-maintenance 작업으로 유지보수 이벤트가 시작되기 전에 포드를 단계적으로 제거하고 워크로드를 종료합니다. 라벨 적용과 유지보수 시작 사이의 기간은 달라질 수 있습니다.

GKE에서 워크로드를 정상적으로 종료하도록 구성

이 섹션에서는 GKE에서 애플리케이션 수명 주기를 관리하고 워크로드 중단을 최소화하도록 구성합니다. 유예 기간을 구성하지 않으면 유예 기간은 기본적으로 30초로 설정됩니다.

GKE는 이러한 포드를 정상적으로 종료하고 개발자가 정의한 종료 작업(예: 학습 상태 저장)을 실행하기 위해 최선을 다합니다. GKE는 유예 기간이 시작될 때 SIGTERM 신호를 포드에 전송합니다. 유예 기간이 종료될 때까지 포드가 종료되지 않으면 GKE는 후속 SIGKILL 신호를 포드의 컨테이너에서 계속 실행 중인 모든 프로세스에 전송합니다.

단계적 종료 기간을 구성하려면 포드 매니페스트의 spec.terminationGracePeriodSeconds 필드에서 종료 유예 기간(초)을 설정합니다. 예를 들어 10분의 알림 시간을 가져오려면 포드 매니페스트에서 다음과 같이 spec.terminationGracePeriodSeconds 필드를 600초로 설정합니다.

    spec:
      terminationGracePeriodSeconds: 600

진행 중인 작업이 알림 기간 내에 완료될 수 있도록 종료 유예 기간을 충분히 길게 설정하는 것이 좋습니다. 워크로드에서 MaxText, Pax, 또는 JAX(Orbax 사용)와 같은 ML 프레임워크를 사용하면 종료 SIGTERM 신호를 캡처하고 체크포인트 프로세스를 시작할 수 있습니다. 자세한 내용은 TPU 자동 체크포인트를 참조하세요.

정상 종료 절차

중단 이벤트가 시작되면 VM에서 수동으로 트리거했든 자동으로 트리거했든 관계없이 Compute Engine은 maintenance-event 메타데이터 키를 업데이트하여 머신 종료가 임박했음을 알립니다. 두 경우 모두 노드 종료가 임박하면 GKE에서 단계적 종료를 시작합니다.

다음 워크플로는 노드 종료가 임박한 경우 GKE에서 정상 노드 종료를 실행하는 방법을 보여줍니다.

  1. 60초 이내에 다음이 발생합니다.
    1. 시스템 구성요소는 cloud.google.com/active-node-maintenance 노드 라벨을 ONGOING으로 설정하여 워크로드가 중지되고 있음을 나타냅니다.
    2. GKE는 새 포드가 노드에서 예약되지 않도록 노드 taint를 적용합니다. taint에는 cloud.google.com/impending-node-termination:NoSchedule 키가 있습니다. 발생하는 알려진 종료로 인해 이 taint를 허용하도록 워크로드를 수정하는 것이 좋습니다.
  2. maintenance-handler 구성요소는 먼저 워크로드 포드를 제거한 다음 시스템 포드(예: kube-system)를 제거하여 포드를 제거하기 시작합니다.
  3. GKE는 노드에서 실행 중인 워크로드 포드에 SIGTERM 종료 신호를 전송하여 종료가 임박했음을 알립니다. 포드는 이 알림을 사용하여 진행 중인 모든 태스크를 마칠 수 있습니다. GKE는 이러한 포드가 정상적으로 종료되도록 최선을 다합니다.
  4. 제거가 완료되면 GKE는 cloud.google.com/active-node-maintenance 라벨의 값을 terminating으로 업데이트하여 노드를 종료할 준비가 되었음을 나타냅니다.

그런 다음 노드 종료가 발생하고 교체 노드가 할당됩니다. 프로세스가 완료되면 GKE에서 라벨과 taint를 삭제합니다. GPU 또는 TPU를 사용하는 워크로드의 종료 기간을 늘리려면 호스트 유지보수 이벤트 수동 시작 섹션의 단계를 완료합니다.

정상적인 활성 종료 진행 상황 모니터링

다음과 같은 정상 종료 이벤트를 기준으로 GKE 로그를 필터링할 수 있습니다.

  • VM이 Compute Engine 호스트 유지보수 이벤트와 같이 노드 종료 임박으로 인한 중단을 감지하면 GKE는 워크로드가 중지될 때 cloud.google.com/active-node-maintenanceONGOING으로, 워크로드가 완료되고 노드가 종료될 준비가 되면 terminating으로 설정합니다.
  • 새 워크로드 예약을 제한하는 경우 GKE는 cloud.google.com/impending-node-termination:NoSchedule taint를 적용합니다.

다음 단계