Kubernetes CPU 알뜰하게 사용하기 리뷰
Kubernetes CPU 알뜰하게 사용하기 리뷰
기본 개념
CPU Requests
- CPU의 최소 보장량
- 초과 가능
CPU Limits
- CPU의 최대 허용량
- 더 많이 사용 시 Throttling 발생 가능
Throttling
- CPU를 할당 받지 못해 기다리는 현상
- 응답 속도 느려지게 만듬
자원 최적화
목표
- 서비스 안정성 유지
- 자원 할당량 최소화
- 자원 사용량 최소화
- 자원 사용량 분산
Kubernetes CPU 최적화
- CPU 사용량 추이가 Limits 보다 낮아도 Throttling 발생하는 현상 관측 가능
- ex) CPU 사용량 < 5 < requests 7.5 < Limits 15
- CFS에 대한 이해가 필요
CPU Throttling 방지
- CFS(Completely fair scheduler)
- 컨테이너가 워커 노드의 CPU 공유하기 위해 사용하는 CPU 스케줄러
- 각 컨테이너는 CPU 타임 슬라이스 할당량 분배
- kubelet quota 비활성화 또는 quota period 낮추기
- 병렬성 설정
- 컨테이너는 OS의 커널을 공유하기 때문에 컨테이너의 CPU 코어 인식 개수와 워커 노드 CPU 전체 코어 개수와 같다
자원 할당량 최적화(Right Sizing)
- 대고객 서비스
- 토스는 액티브-액티브 형태의 데이터 센터 구조 -> request 2배
- 오토스케일링은 IDC 환경에서 위험
- 서버를 파드 처럼 직접 늘릴 수 없음 -> 최대 부하를 추산해 자원 할당
- Alert 활용
- 그라파나, 타노스, 프로메테우스
- 기준 Metric: CPU req 대비 사용량
- Noise: 정확하지 않은 Alert, 중요하지 않은 Alert
- Noise 제거
- 실시간 값 대신 최근 1주일 최대값 계산해 alarm
- max over time 중첩
Right Sizing for Cloud
- EC2 워커 노드 스케일업으로 리소스 사용량 줄이기
- MAU 20% 증가해
Optimization for infra
- istio
- 모든 envoy가 자신의 메모리에 메트릭을 올려놓고 서빙을 해야 함
- 메트릭은 가비지 콜렉션이 안되 오래된 엔보이는 OOM으로 죽을 확률이 있음
- 프로메테우스 리소스 사용량 증가
- istio를 대체하는 toss mixer 개발
- toss mixer
- envoy로 트래픽 수집, 메트릭으로 aggregate 후 log를 카프카로 전송
- 메트릭을 aggregate 함으로 envoy가 메트릭을 쌓을 필요가 없어짐
CPU Requests/Limits 최소화
CPU 최적화
- 인프라 관점
- 서비스 관점