Autopilot 포드의 실행 시간 확장


이 페이지에서는 Google Kubernetes Engine(GKE)에서 포드를 삭제하기 전에 포드의 연장된 실행 시간을 요청하는 방법을 보여줍니다.

GKE에서 시작된 포드 제거 정보

포드 제거는 Kubernetes에서 워크로드를 실행하는 정상적인 부분입니다. GKE는 자동 노드 업그레이드 및 자동 확장 축소와 같은 예약된 이벤트 중에 워크로드를 제거하여 노드가 최신 상태이고 효율적인 리소스 사용을 위해 최적화되도록 합니다. 기본적으로 GKE는 이벤트가 발생하는 즉시 컨테이너에 종료 신호를 보내고, 컨테이너는 Kubernetes가 포드를 제거하기 전에 종료할 유예 기간을 갖습니다. 자동 노드 업그레이드의 경우 최대 1시간까지 유예 기간이 적용될 수 있습니다. 축소 이벤트의 경우 최대 10분의 유예 기간이 적용될 수 있습니다.

Kubernetes에는 PodDisruptionBudgets단계적 종료 기간과 같이 컨테이너가 제거를 정상적으로 처리하는 데 사용할 수 있는 기능이 내장되어 있습니다. 그러나 일괄 큐 또는 멀티플레이어 게임 서버와 같은 일부 워크로드는 제거되기 전에 더 오래 실행해야 합니다. GKE에서 시작된 제거 중에 GKE가 부여하는 기본 유예 기간은 이러한 워크로드에 충분하지 않을 수 있습니다. 이러한 경우 최대 7일 동안 특정 워크로드 제거를 방지하도록 Autopilot에 지시할 수 있습니다.

사용 사례

워크로드 제거를 방지하기 위해 GKE에 지시할 수 있는 상황은 다음과 같습니다.

  • 서버가 조기에 종료되면 플레이어를 세션에서 내보내는 멀티플레이어 게임 서버를 실행합니다.
  • 서버가 종료된 경우 진행 중인 회의를 중단하는 오디오 또는 화상 회의 소프트웨어를 실행합니다.
  • 완료하는 데 시간이 걸리는 작업을 실행하며, 조기 종료 시 진행 중인 작업이 손실됩니다.
  • 중단에 대한 내결함성이 낮은 스테이트풀(Stateful) 서비스를 실행하며, 중단 발생 빈도를 최소화하려고 합니다.

가격 책정

포드의 연장된 실행 시간을 추가 비용 없이 요청할 수 있습니다. 그러나 가격 책정에 영향을 줄 수 있는 다음과 같은 동작 변경사항을 고려하세요.

  • Autopilot 클러스터는 기간이 연장된 포드의 리소스 요청에 더 높은 최솟값을 적용합니다. Autopilot 클러스터는 실행 중인 포드의 리소스 요청에 대한 비용을 청구합니다. 시스템 오버헤드 또는 사용하지 않은 노드 용량에는 요금이 청구되지 않습니다.
  • 기간이 연장된 포드를 사용하면 클러스터의 노드 수가 늘어날 수 있으며 이는 IP 주소 사용량 및 확장성에 영향을 줄 수 있습니다. 모든 노드에서 실행되는 DaemonSet가 있으면 클러스터에 DaemonSet가 더 많이 생성됩니다.

가격 책정에 대한 자세한 내용은 Autopilot 가격 책정을 참조하세요.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.

제한사항

  • Spot 포드에 대해 연장된 실행 시간을 요청할 수 없습니다.
  • 이미지 가져오기 시간은 연장된 실행 시간을 계산할 때 계산됩니다.
  • 각 클러스터에서는 CPU 요청이 서로 다른 최대 50개의 연장된 워크로드를 사용할 수 있습니다. 즉, Autopilot 리소스 최솟값, 비율, 증분 크기 확인을 통과한 후 최대 50개의 CPU 요청 값 집합을 각 클러스터에서 연장할 수 있습니다.
  • 기간이 연장된 포드에서는 Kubernetes 포드 간 어피니티를 사용할 수 없습니다.
  • 가능한 경우 GKE는 연장된 각 실행 시간 포드를 자체 노드에 배치합니다. 이 동작은 사용률이 낮은 노드를 축소할 수 있게 해줍니다.

연장 실행 시간 요청

포드의 연장된 실행 시간을 요청하려면 포드 사양에서 Kubernetes cluster-autoscaler.kubernetes.io/safe-to-evict 주석을 false로 설정합니다.

  1. 다음 매니페스트를 extended-deployment.yaml로 저장합니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: extended-pods
      labels:
        duration: extended
    spec:
      selector:
        matchLabels:
          duration: extended
      template:
        metadata:
          annotations:
            cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
          labels:
            duration: extended
        spec:
          containers:
          - name: example-container
            image: registry.k8s.io/pause
            resources:
              requests:
                cpu: 200m
    
  2. 배포를 만듭니다.

    kubectl create -f extended-deployment.yaml
    

축소 또는 노드 자동 업그레이드가 수행되기 전에 포드가 최소 7일 동안 계속 실행됩니다.

고려사항 및 권장사항

이 기능을 사용할 때는 다음 사항을 고려하세요.

  • 기간이 연장된 포드는 우선순위 기반 제거로부터 보호되지 않습니다. Kubernetes PriorityClass를 사용하는 경우 우선순위 기반 제거 가능성을 최소화하기 위해 다음 방법을 사용하는 것이 좋습니다.
    • 다른 사용자 포드가 기간이 연장된 포드를 제거하지 않도록 기간이 연장된 포드가 우선순위가 가장 높은 PriorityClass를 사용하는지 확인합니다.
    • 워크로드 분리를 사용하여 다른 포드와 별개로 기간이 연장된 포드를 실행합니다.
  • 시스템 포드는 가장 높은 우선순위로 실행되며 항상 기간이 연장된 포드를 제거할 수 있습니다. 이 확률을 최소화하기 위해 GKE는 기간이 연장된 포드를 예약하기 전에 노드에서 시스템 포드를 예약합니다.
  • 기간이 연장된 포드도 다음 상황에서는 조기에 제거될 수 있습니다.
    • 우선순위가 높은 사용자 포드를 위해 공간을 확보하기 위한 제거(더 높은 PriorityClass 사용)
    • Kubernetes 시스템 구성요소를 위한 공간을 확보하기 위한 제거
    • 포드가 요청된 것보다 많은 메모리를 사용하는 경우 kubelet 메모리 부족 제거(OOMKill)
    • Compute Engine VM 유지보수 이벤트. 가속기 최적화 머신 유형은 이러한 머신이 라이브 마이그레이션을 지원하지 않으므로 이러한 이벤트의 영향을 받을 가능성이 높습니다.
    • 노드 자동 복구
    • 노드 드레이닝과 같은 사용자 시작 이벤트
  • Standard 클러스터에서 cluster-autoscaler.kubernetes.io/safe-to-evict 주석을 사용할 수 있지만 결과는 동일하지 않습니다. 축소 이벤트가 발생하더라도 포드가 무기한으로 실행되므로 사용률이 낮은 노드가 삭제되지 않고 노드 비용이 계속 청구됩니다. 또한 포드는 노드 자동 업그레이드로 인한 제거로부터 보호되지 않습니다.

다음 단계