쿠버네티스(k8s)

쿠버네티스에서 QoS와 트래픽 손실 방지 방법

curiousKidd 2024. 8. 8. 10:00
반응형

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로 설정하여, 불필요한 트래픽 전달 방지.
반응형