1. Argo Rollout이란?
Argo Rollout은 Kubernetes의 고급 배포 전략 도구로, 무중단 배포를 지원합니다. 카나리 배포나 블루-그린 배포 등 다양한 배포 방식을 쉽게 구현할 수 있으며, 실시간 모니터링 및 트래픽 제어 기능도 제공합니다.
2. AWS Spot Termination Event란?
AWS Spot Termination Event는 AWS에서 Spot Instance가 종료되기 2분 전에 발생하는 이벤트로, 이를 활용해 Pod를 안전하게 drain하고 다른 노드로 재배치할 수 있습니다. 하지만, Pod 하나만 존재하는 경우에는 순단(서비스 중단)이 발생할 수 있습니다.
3. Pod 하나일 경우 순단 발생 문제
Pod가 하나만 있는 경우, Spot Instance 종료 시 해당 Pod가 다른 노드로 재배치되기 전에 서비스가 중단될 수 있습니다. 이를 순단이라고 하며, 특히 단일 Pod로 운영되는 서비스는 Spot Instance 종료 이벤트에 의해 서비스가 일시적으로 멈출 수 있습니다.
이를 방지하려면 다중 인스턴스로 구성하거나, 중복 배치를 통해 서비스를 유지할 수 있어야 합니다.
4. Pod Drain 후 즉시 다른 노드로 Scheduling하는 방법
AWS Spot Termination 이벤트 발생 시, Node Termination Handler를 사용하여 노드가 종료되기 전에 Pod를 drain 처리하고 Argo Rollout을 통해 다른 노드에 재배치할 수 있습니다. 그러나 Pod가 하나만 있을 경우, 이 재배치 사이에 서비스 중단이 발생할 수 있으므로 고급 배포 전략을 통해 이를 해결해야 합니다.
5. Pod 하나일 경우 순단 방지하는 구체적인 방법
Pod 하나만 존재할 때 순단을 방지하는 방법은 크게 두 가지입니다.
5.1 다중 복제본 구성
Pod의 복제본(replica)을 여러 개로 설정하면, 한 개의 Pod가 종료되더라도 나머지 Pod가 계속 서비스 중일 수 있습니다. Kubernetes의 Horizontal Pod Autoscaler(HPA)나 Argo Rollout의 replica 설정을 통해 여러 Pod 인스턴스를 관리할 수 있습니다.
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: my-app-rollout
spec:
replicas: 2 # 최소 2개 이상의 복제본을 설정
strategy:
canary:
steps:
- setWeight: 50
- pause: {duration: 10s}
- setWeight: 100
이 설정은 복제본을 2개로 설정하여, Spot Instance 종료 이벤트가 발생해도 최소 하나의 Pod는 계속 실행될 수 있게 합니다.
5.2 블루-그린 배포 전략 사용
블루-그린 배포(Blue-Green Deployment)는 Argo Rollout에서 지원하는 배포 전략 중 하나로, 두 개의 Pod 그룹을 동시에 운영하고 트래픽을 전환하여 무중단 배포를 가능하게 합니다. 이렇게 설정하면 하나의 Pod 그룹이 종료되더라도 다른 그룹에서 트래픽을 처리할 수 있습니다.
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: my-app-rollout
spec:
replicas: 1
strategy:
blueGreen:
activeService: my-app-active
previewService: my-app-preview
autoPromotionEnabled: true
이 설정은 blue-green 배포 전략을 통해 무중단 배포를 구현합니다. Spot Instance가 중단될 때, 블루-그린 배포 전략을 사용하면 트래픽이 다른 서비스로 자동 전환되므로 순단 없이 서비스를 유지할 수 있습니다.
5.3 Spot Instance와 온디맨드 인스턴스 혼합 사용
온디맨드 인스턴스와 Spot Instance를 혼합하여 사용하면, Spot Instance가 중단될 경우에도 온디맨드 인스턴스에서 서비스가 계속 유지됩니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 2
template:
spec:
nodeSelector:
spot: "true" # Spot 인스턴스에서 실행
tolerations:
- key: "node.kubernetes.io/lifecycle"
operator: "Equal"
value: "spot"
effect: "NoExecute"
이 방법을 사용하면 Spot Instance에서 중단이 발생하더라도 온디맨드 인스턴스에서 서비스가 계속 동작하기 때문에 순단을 방지할 수 있습니다.
6. 구체적인 사례
아래는 Spot Instance 중단 이벤트 발생 시, 다중 복제본을 사용하여 순단을 방지하고, Argo Rollout과 Node Termination Handler가 이를 자동으로 처리하는 예시입니다.
apiVersion: v1
kind: Pod
metadata:
name: my-app
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-app:latest
resources:
requests:
memory: "256Mi"
cpu: "500m"
limits:
memory: "512Mi"
cpu: "1000m"
nodeSelector:
lifecycle: spot
tolerations:
- key: "node.kubernetes.io/lifecycle"
operator: "Equal"
value: "spot"
effect: "NoExecute"
---
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: my-app-rollout
spec:
replicas: 2 # 복제본을 2개로 설정하여 순단 방지
strategy:
canary:
steps:
- setWeight: 50
- pause: {duration: 10s}
- setWeight: 100
이 설정은 복제본 2개를 사용하여, Spot Instance 종료 시에도 다른 노드에서 Pod가 계속 실행되므로 서비스 순단이 발생하지 않습니다.
태그
- Argo Rollout
- AWS Spot Termination Event
- Kubernetes
- Pod 순단 방지
- Pod Drain
- Node Scheduling
- Spot Instance
- 무중단 배포
'프로그래밍공부(Programming Study) > DevOps' 카테고리의 다른 글
Kubernetes에서 QoS와 Resource Request 및 Limit의 개념: CPU와 Memory의 의미 (0) | 2024.09.20 |
---|---|
mTLS란 무엇인가? Istio에서 mTLS 구성 방법과 보안 강화하기 (2) | 2024.09.11 |
빅쿼리(BigQuery)란? 구글 클라우드의 강력한 데이터 웨어하우스 솔루션 (0) | 2024.08.16 |
쿠버네티스(Kubernetes, k8s) 컨트롤플레인과 데이터플레인: 구조와 통신 방법 이해하기 (0) | 2024.08.13 |
[Docker] 1. 개요 (0) | 2023.03.25 |
댓글