We are Architect

AWSKRUG: 플랫폼엔지니어링 모임 본문

이곳저곳 탐방기

AWSKRUG: 플랫폼엔지니어링 모임

the best infra 2024. 11. 21. 10:10

 

안녕하세요. 오늘은 11월 19일 날 진행하였던 플랫폼 엔지니어링 모임에서 들은 내용들을 공유하고자 합니다. 

 

장소는 강남의 센터필드 EAST동 18층에서 진행되었고 당일에 진행된 세션은 하나였고 주제는 ' 쿠버네티스 지능형 리소스 최적화 ' 이였습니다. 이후에는 치킨을 먹으면서 교류하던 세션이었는데 저는 부끄러움과 경력자 분들의 대화가 두려운 나머지 세션이 끝나고 후다닥 나왔습니다ㅠㅠ 다음에는 기회가 있으면 되도록 교류를 해보려고 합니다.. 

 

세션 주제는 앞서 이야기 얘기하였듯' 쿠버네티스 지능형 리소스 최적화 '이었고 발표자 분은 카카오페이 증권의 신위섭 님이 진행해 주셨습니다. AI 에이전트를 이용하여 쿠버네티스의 리소스 사용량을 최적화시켜 주고 그로 인하여 비용절감 및 리소스 사용량의 효율을 올리셨다는 내용입니다. 

 

' 쿠버네티스 지능형 리소스 최적화 '  프로젝트의 이름은 Dr.Pym. 즉 앤트맨에 나오는 핌 입자를 만든 박사의 이름을 본떠서 닥터 핌이라고 지으셨고 이유는 앤트맨을 보셨다면 아시겠지만 핌 입자는 원자의 크기를 줄여서 대상의 크기를 나노 단위만큼 줄였다 늘렸다 할 수 있는 발명품으로 마블 영화 등장하는 물건입니다. 그래서 쿠버네티스에서도 리소스의 크기를 상황에 맞게 자유롭게 늘렸다 줄였다를 가능하게 하고 싶어서 작명을 지으셨다고 하셨습니다.

 

우선 해당 프로젝트를 진행하게 된 이유는 다음과 같습니다.

문제점 1, 지속적인 리소스 부족 > 클러스터에 대한 운용비용 증가

문제점 2, 서비스의 안정성 부족

문제점 3, RightSizing에 대한 고민 

 

위와 같은 문제점들을 해결하기 위해서 프로젝트를 진행하였고 해결하고자 하였던 방법은 최적화 자동화를 위한 지능형 시스템 개발이었다고 하셨습니다. 아무래도 카카오페이 증권의 특성상 일정시간마다 상이한 트래픽의 변동 때문에 이러한 프로젝트를 진행하신 거 같습니다. 

 

요약: 쿠버네티스 지능형 리소스 최적화 - Dr.Pym 프로젝트 (카카오페이)

발표자: 카카오페이 데브옵스팀 신위섭 님
목적: 클러스터 리소스 최적화 및 운영 비용 절감, 안정성 확보


프로젝트 배경

  • 운영 문제점:
    1. 리소스 부족 → 운영비 증가
    2. 서비스 안정성 부족
    3. **Right-sizing(적절한 리소스 할당)**에 대한 고민
  • 목표: 지능형 시스템을 개발하여 리소스 최적화 및 자동화 구현

Dr.Pym 프로젝트의 여정

1. 프로젝트 이름 유래

  • Marvel 영화 속 Ant-Man의 Pym 입자에서 영감을 받아 작명.

1단계: 핌 비긴즈 (CPU & 메모리 최적화 시작)

  • 리소스 최적화:
    • Prometheus의 메트릭값을 기반으로 최적화.
    • CPU: quantile_over_time 함수로 요청량 추출.
    • CPU 할당 방식:
      • Pod의 request 값을 기준으로 CFS(Completely Fair Scheduler)를 활용해 CPU를 분배.
      • 특이점:
        • CPU limit 제거:
          • 남은 자원을 자유롭게 활용하도록 설정.
          • 과도한 자원 제한을 피하고 유연성을 높임.
        • 단, request는 설정하여 최소한의 자원을 보장.
    • 메모리:
      • Request와 Limit을 동일한 값으로 설정해 안정성을 확보.
      • CPU와의 차별점:
        • 메모리는 한 번 초과 사용하면 OOM(Out of Memory) 발생.
        • OOM 발생 시 Pod가 강제로 종료되거나 장애가 발생할 수 있음.
        • 특히 서비스가 메모리를 예측 불가능하게 많이 사용하면 다른 Pod에 영향을 미칠 위험이 큼.
  • 성과: 최적화된 리소스 할당으로 비용 절감 및 안정성 확보.

2단계: KEDA 도입

  • KEDA (Kubernetes Event-driven Autoscaler):
    • 이벤트 기반 동작 오토스케일러로 피크 부하 대응 및 스케일 관리.
    • 장점:
      1. 안정성: 피크 트래픽 효과적으로 대응.
      2. 확장성: 다양한 스케일 방식 지원.
    • 도입 시 고려사항:
      • Jenkins 파라미터 설정 
      • ScaledObject 기본값 조정.

3단계: 닥터 핌 라이즈

  • 시간대별 트래픽 스케일링:
    • 금융 서비스 특성상 요청 트래픽 변동이 크므로, Pod 개수 동적 조정.
    • 응답 시간 기준으로 Pod 스케일링 최적화 기준 설정.
    • 이후에 모든 과정을 지능형 AI를 통해서 확인하고 적용시킴. 

성과

  • 리소스 절감 (개발/운영 환경 모두):
    • CPU: 개발 46%, 운영 54% 절감.
    • 메모리: 개발 17%, 운영 36% 절감.
    • EKS 비용 절감: 약 21%.
    • IDC 워커 노드 18대 여유 확보.

도전 과제 및 개선 방향

  • 문제:
    • CPU limit 제거로 발생한 예기치 못한 이슈.
    • 초기 계획과 실제 실행 과정 간 차이.
  • 향후 계획:
    1. 리소스 추천 기능 고도화.
    2. KEDA 스케일러 추가 확장.

 

# 키워드 

- Prometheus: 클라우드 환경의 오픈소스 모니터링 도구.

- quantile_over_time 함수: 시계열 데이터의 백분위수를 계산. 사용 목적은 특정시간 범위 내에서 응답시간, CPU사용량, 메모리 사용량 등의 분포를 파악. 

quantile_over_time(백분위수, 시계열 데이터[시간])
>>> quantile_over_time(0.95, http_request_duration_seconds[5m])

 

- KEDA (Kubernetes Event-driven Autoscaler): K8s 클러스터에서 이벤트 기반으로 오토스케일링을 지원하는 오픈 소스 프로젝트. CPU/메모리 외에도 Kafka, 레빗MQ, HTTP 요청 등 다양한 이벤트 소스에 따라 스케일링 가능.HPA 보다 정교하고 다양한 이벤트로 트리거 발동을 해서 POD스케일링 기능 제공.

- CFS (Completely Fair Scheduler): 리눅스 커널에서 사용하는 CPU스케줄링 알고리즘, 프로세스들이 공평하게 CPU 시간을 배분받을 수 있게 설계. 쿠버네티스에서 Pod의 CPU요청량 및 limit 기준으로 CFS가 CPU를 분배. limit을 설정하지 않으면 남은 CPU를 자유롭게 활용.

- OOM (Out of Memory): 사용하려는 메모리 보다 더 사용할 때 발생하는 상태. 해당 상태로 돌입하면 일부 프로세스 강제 종료 및 애플리케이션 실패로 이어짐.