Kubernetes의 SLA, SLI, SLO 개념과 적용 방식

1. 개요

클라우드 환경에서 서비스의 안정성과 성능을 측정하고 보장하는 것은 매우 중요하다. 이를 위해 SLA(Service Level Agreement), SLI(Service Level Indicator), SLO(Service Level Objective) 개념이 사용된다.

Kubernetes에서 이러한 개념을 어떻게 적용하고 관리할 수 있는지 알아보자.


2. SLA, SLI, SLO 개념

2.1. SLA(Service Level Agreement, 서비스 수준 계약)

SLA는 제공자가 고객에게 보장하는 서비스의 품질 수준이다.

주요 특징

  • 보통 계약서(Agreement) 형태로 제공
  • 서비스 가용성, 응답 시간, 처리량 등에 대한 최소 보장 기준 포함
  • SLA를 충족하지 못하면 금전적 보상(크레딧 지급 등) 발생 가능

예시

  • AWS EC2 SLA: 월간 가동 시간 99.99% 보장
  • Google Kubernetes Engine(GKE) SLA: 99.5% 이상의 가용성 제공

SLA 예제

“본 서비스는 월간 99.95%의 가용성을 보장하며, 이를 충족하지 못할 경우 서비스 크레딧을 제공합니다.”


2.2. SLI(Service Level Indicator, 서비스 수준 지표)

SLI는 서비스의 품질을 측정하는 핵심 지표이다.

주요 특징

  • SLA에서 정의한 서비스 품질을 수량화하여 측정
  • 보통 **백분율(%)**로 표현됨
  • Kubernetes에서 메트릭 기반 모니터링을 통해 측정 가능

대표적인 SLI 예시

SLI 지표설명
가용성시스템이 정상적으로 응답하는 비율 (%)
응답 시간요청이 일정 시간 내에 처리되는 비율 (%)
오류율요청 중 실패한 비율 (%)
처리량(Throughput)초당 처리되는 요청 수 (RPS, QPS)

SLI 예제

“지난 30일 동안의 요청 중 99.9%가 500ms 이내에 응답을 완료했다.”


2.3. SLO(Service Level Objective, 서비스 수준 목표)

SLO는 서비스가 달성해야 하는 목표 수준으로, SLI에 기반하여 설정된다.

주요 특징

  • SLA의 핵심 지표를 내부적으로 관리하기 위한 목표
  • 보통 SLA보다 엄격하게 설정하여 여유 공간 확보
  • Kubernetes에서는 HPA, 리소스 할당, 모니터링 등을 통해 관리 가능

대표적인 SLO 예시

SLO 목표설명
가용성 99.9%1,000번 중 1번 이하의 장애 허용
응답 시간 200ms 이하 (99%)99%의 요청이 200ms 이내에 응답
오류율 0.1% 이하전체 요청 중 0.1% 미만이 오류

SLO 예제

“99.95% 이상의 요청이 300ms 이내에 응답해야 한다.”


3. Kubernetes에서 SLA, SLI, SLO 적용

3.1. SLI 모니터링: Prometheus & Grafana 활용

Prometheus는 Kubernetes에서 SLI 지표를 수집하는 주요 도구이다.

설정 방법

  1. Prometheus 설치bash복사편집helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install prometheus prometheus-community/prometheus
  2. SLI 측정 쿼리 예시
    • 가용성 (HTTP 200 응답 비율)promql복사편집sum(rate(http_requests_total{status=~"2.."}[5m])) / sum(rate(http_requests_total[5m]))
    • 응답 시간 (p95, 95% 요청의 응답 시간)promql복사편집histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))
  3. Grafana 대시보드 설정
    • Prometheus 데이터를 시각화하여 SLA/SLO 관리

3.2. SLO 유지: Kubernetes HPA 및 리소스 조정

Kubernetes에서 SLO를 유지하려면 오토스케일링 및 리소스 관리가 필요하다.

1. HPA(Horizontal Pod Autoscaler) 적용

응답 시간이 일정 기준 이상 증가하면 자동으로 Pod를 확장한다.

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 # CPU 사용률 50% 이상이면 확장

2. 리소스 제한 설정

SLO를 초과하는 과부하를 방지하기 위해 리소스를 제한할 수 있다.

apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-container
image: my-app:latest
resources:
requests:
cpu: "500m" # 최소 0.5 vCPU
memory: "256Mi" # 최소 256Mi 메모리
limits:
cpu: "1000m" # 최대 1 vCPU
memory: "512Mi" # 최대 512Mi 메모리

3.3. SLA 위반 감지 및 알림 설정

SLI가 SLO를 초과하면 알림을 받을 수 있도록 설정해야 한다.

  • Prometheus Alertmanager 설정
    • SLA 위반 감지 시 Slack 또는 이메일 알림
groups:
  - name: SLA
    alerts:
      - alert: HighErrorRate
        expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.01
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "서비스 오류율 증가"
          description: "5분 동안의 오류율이 1%를 초과함"
  • Alertmanager 알림 설정
receivers:
  - name: "slack"
    slack_configs:
      - channel: "#alerts"
        send_resolved: true
        text: "{{ .CommonAnnotations.description }}"

4. 결론

  • SLA: 서비스 제공자가 고객과 맺는 계약
  • SLI: 서비스 품질을 측정하는 지표
  • SLO: 목표 수준을 설정하여 SLI를 관리

Kubernetes에서는 Prometheus로 SLI를 측정하고, HPA로 SLO를 유지하며, Alertmanager로 SLA 위반을 감지할 수 있다. 이를 통해 안정적인 서비스 운영이 가능하다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다