이 페이지에서는 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
를 실행하여 최신 버전을 가져옵니다.
- 버전 1.27 이상을 실행하는 Autopilot 클러스터가 있는지 확인합니다.
제한사항
- Spot 포드에 대해 연장된 실행 시간을 요청할 수 없습니다.
- 이미지 가져오기 시간은 연장된 실행 시간을 계산할 때 계산됩니다.
- 각 클러스터에는 최대 50개의 기간이 연장된 워크로드(서로 다른 CPU 요청 포함)가 있을 수 있습니다. 즉, Autopilot 리소스 최솟값, 비율, 증분 크기 검사를 통과한 후 최대 50개의 서로 다른 CPU 요청 값 집합이 각 클러스터에서 기간이 연장될 수 있습니다.
- 기간이 연장된 포드에서는 Kubernetes 포드 간 어피니티를 사용할 수 없습니다.
- 가능한 모든 경우에 GKE는 각 연장된 실행 시간 포드를 자체 노드에 배치합니다. 이 동작을 통해 사용률이 낮을 경우 노드가 축소될 수 있습니다.
연장 실행 시간 요청
포드의 연장된 실행 시간을 요청하려면 포드 사양에서 Kubernetes cluster-autoscaler.kubernetes.io/safe-to-evict
주석을 false
로 설정합니다.
다음 매니페스트를
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
배포를 만듭니다.
kubectl create -f extended-deployment.yaml
축소 또는 노드 자동 업그레이드가 수행되기 전에 포드가 최소 7일 동안 계속 실행됩니다.
고려사항 및 권장사항
이 기능을 사용할 때 다음 사항을 고려하세요.
- 기간이 연장된 포드는 우선순위 기반 제거로부터 보호되지 않습니다. Kubernetes PriorityClasses를 사용하는 경우 우선순위 기반 제거 가능성을 최소화하기 위해 다음 메서드를 고려하세요.
- 다른 사용자 포드가 기간이 연장된 포드를 제거하지 않도록 기간이 연장된 포드가 우선순위가 가장 높은 PriorityClass를 사용하는지 확인합니다.
- 워크로드 분리를 사용하여 다른 포드와 별개로 기간이 연장된 포드를 실행합니다.
- 시스템 포드는 가장 높은 우선순위로 실행되며 항상 기간이 연장된 포드를 제거할 수 있습니다. 이 확률을 최소화하기 위해 GKE는 기간이 연장된 포드를 예약하기 전에 노드에서 시스템 포드를 예약합니다.
- 기간이 연장된 포드도 다음 상황에서는 조기에 제거될 수 있습니다.
- 우선순위가 높은 사용자 포드를 위해 공간을 확보하기 위한 제거(더 높은 PriorityClass 사용)
- Kubernetes 시스템 구성요소를 위해 공간을 확보하기 위한 제거
- 포드가 요청된 것보다 많은 메모리를 사용하는 경우 kubelet 메모리 부족 제거(OOMKill)
- Compute Engine VM 유지보수 이벤트. 가속기 최적화 머신 유형은 해당 머신이 라이브 마이그레이션을 지원하지 않으므로 이러한 이벤트의 영향을 받을 가능성이 더 큽니다.
- 노드 자동 복구
- 노드 드레이닝과 같은 사용자 시작 이벤트
- Standard 클러스터에서
cluster-autoscaler.kubernetes.io/safe-to-evict
주석을 사용할 수 있지만 결과가 동일하지 않습니다. 포드는 축소 이벤트가 발생하더라도 무기한 실행되므로 사용률이 낮은 노드가 삭제되지 않고 해당 노드에 대한 요금이 계속 청구됩니다. 포드는 또한 노드 자동 업그레이드로 인한 제거로부터 보호되지 않습니다.