반응형
1. QoS (Quality of Service) 클래스
쿠버네티스는 파드의 자원 요청 및 제한을 기반으로 세 가지 QoS 클래스를 제공합니다. 이는 자원 부족 시 파드를 효율적으로 회수하여 클러스터의 안정성을 유지하는 데 중요한 역할을 합니다.
1.1. Guaranteed
- 특징: 파드의 모든 컨테이너가 자원 요청과 제한을 동일하게 설정한 경우.
- 우선순위: 가장 높은 우선순위로, 자원 부족 시 마지막으로 회수됨.
1.2. Burstable
- 특징: 파드의 일부 컨테이너만 자원 요청을 설정하거나, 요청과 제한이 다르게 설정된 경우.
- 우선순위: 자원 사용량이 요청한 자원을 초과하는 파드부터 회수됨.
1.3. BestEffort
- 특징: 파드의 모든 컨테이너가 자원 요청과 제한을 설정하지 않은 경우.
- 우선순위: 가장 낮은 우선순위로, 자원 부족 시 가장 먼저 회수됨.
2. 자원 부족 시 트래픽 손실 방지 방법
자원 부족으로 인해 파드가 회수되는 과정에서 트래픽 손실을 방지하는 방법들은 다음과 같습니다:
2.1. Graceful Termination (우아한 종료)
파드가 종료될 때 기존 요청을 처리할 수 있도록 시간을 줍니다.
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
terminationGracePeriodSeconds: 30
containers:
- name: example-container
image: nginx
lifecycle:
preStop:
exec:
command: ["/bin/sh", "-c", "sleep 10"]
2.2. PodDisruptionBudget (PDB)
동시에 축출될 수 있는 파드의 수를 제한하여 중요한 애플리케이션의 가용성을 유지합니다.
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: example-pdb
spec:
minAvailable: 80%
selector:
matchLabels:
app: example-app
2.3. Readiness Probe
파드가 준비 상태가 아닐 때 트래픽을 받지 않도록 설정합니다.
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: example-image
readinessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
2.4. Load Balancer 및 Ingress Controller의 연결 드레이닝 (Connection Draining)
파드가 종료될 때 해당 파드로의 새로운 연결을 막고, 기존 연결은 유지하도록 설정합니다.
2.5. Service Mesh 사용 (예: Istio)
Service Mesh를 사용하여 파드의 상태 변화에 따라 트래픽을 라우팅하고, 파드 종료 시 기존 연결을 유지하면서 새로운 트래픽 유입을 차단할 수 있습니다.
2.6. Sidecar 컨테이너 사용
Sidecar 패턴을 사용하여 주 컨테이너의 종료를 모니터링하고, 정리 작업을 수행할 수 있습니다.
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: main-container
image: main-app-image
- name: sidecar-container
image: sidecar-helper-image
lifecycle:
preStop:
exec:
command: ["/bin/sh", "-c", "do-some-cleanup"]
3. 추가적인 팁
- Cluster Autoscaler: 자원 부족 시 자동으로 노드를 추가하여 자원 확보.
- Resource Quotas 및 LimitRange: 네임스페이스 내 자원 사용을 제한하여 특정 노드에 리소스 집중 방지.
- External Traffic Policy: Service의 externalTrafficPolicy를 Local로 설정하여, 불필요한 트래픽 전달 방지.
반응형
'쿠버네티스(k8s)' 카테고리의 다른 글
[k8s] Kubernetes Canary 사용시 주의사항 (1) | 2025.04.11 |
---|---|
[k8s] Kubernetes Canary 배포 삽질기 (0) | 2025.04.07 |
[k8s] Kubernetes canary 사용기 (0) | 2025.04.04 |
[k8s] 쿠버네티스 환경에서 k6로 부하 테스트 해보기 + 리소스 사용량 확인까지 (1) | 2025.04.03 |
쿠버네티스에서 HPA와 VPA를 동시에 사용하면 안 되는 이유 (2) | 2024.08.14 |