Cast AI란?
cast ai는 쿠버네티스 환경의 리소스 최적화를 함으로써 리소스, 비용 최적화를 목표로하는 솔루션 입니다.
cast ai의 구조와 최적화를 어떻게 이뤄내는지에 대한 문서를 작성했습니다.
trial license 사용에 앞서 간단한 구조를 파악하고 테스트를 진행할 예정입니다.
Available Savings
cast.ai Agent가 수집한 자료를 바탕으로
자동 스케일링 기능을 사용시 얼마나 비용을 절감할 수 있는지를 나타내는 대시보드
Available savings report for CAST AI-managed clusters (Read-only 옵션 O)
CAST AI가 클러스터를 관리하는 경우,
이 보고서의 상단 섹션에 권장 설정에 도달하기까지 얼마나 남았는지를 나타내는 진행률 표시줄이 표시
![](https://blog.kakaocdn.net/dn/cXVCIk/btsHwN5xoYn/CcOKBbiKZimg4etPGushtK/img.png)
Report Cards
- Workload Rightsizing : 워크로드 최적화를 통해 달성가능한 잠재적 효과 추정
- Spot Instances : Spot에 적합한 워크로드 전환과 Spot 인스턴스 자동화를 통해 얻을 수 있는 절감 효과 추정
- ARM Support : ARM 인스턴스를 사용하여 달성 가능한 절감효과 추정 → ARM CPU 비율 조정 가능
![](https://blog.kakaocdn.net/dn/zjyjH/btsHvyaw0A7/ne0gautk7diTb5h5olri70/img.png)
4. Comparison of configurations over time : 24h, 7day의 평균 절감량 확인, 현재 구성과 최적 구성 리소스 비교
![](https://blog.kakaocdn.net/dn/blcBIQ/btsHwblBb7R/zBq0rGAP4acmnF5873wze1/img.png)
Cluster AutoScaling
CAST AI autoscaling engine
비용효율성을 목표로 Cluster를 확장하기 위한 도구로 노드 수를 동적으로 조정
Cast.ai Agent가 Cluster 상태 변경사항을 수집해 Autoscaler로 전송
아래와 같은 예시가 있을때 노드를 최적의 인스턴스 타입으로 변경
- Cluster에 리소스가 부족하여 스케쥴링할 Pod가 없는 경우
- 일정기간 동안 사용되지 않는 노드가 있는 경우
![](https://blog.kakaocdn.net/dn/cmbOCq/btsHu7Ed9kM/vmhs3Op2cRcDMuuyB5hpK1/img.png)
Configuration
- Node Template의 Configuration에 따른 최적화 리소스 고려
- Subnet(남은 IP 갯수, Instance당 Pod 수 고려)
- Instance Type(GPU, Spot, 예약, Architecture 등)
Node Configuration
CAST AI provisioner
사용자가 제공한 Configuration을 노드 프로비저닝 시에 적용되며 Node Templates을 따름
기본 Default 구성은 CAST AI Autoscaler의 기본 값
Node Template이 여러개면, 여러개의 Node configuration 사용 가능
CAST AI terraform provider을 지원하며 Terraform으로 구성 가능
Downscaling
CAST AI Autoscaler는 노드가 일정 기간 동안 사용되지 않은 것을 감지하면 노드를 제거
Downscaling option
두가지 수준의 옵션을 선택해서 사용 가능
- Node delection policy - 비어있거나 실행되지 않는 노드 제거 ex) job node
- Evictor - 지속적으로 파드를 Node에 압축하여 빈노드를 생성
Evictor는 클러스터 상태를 bin pack하고 노드 사용률을 높이기 위해 파드를 이동 → 빈 노드 생성
기본적으로 다운타임을 방지하기 위해 Evictor는 Replica set이 존재하는 파드만 대상
그러나 aggressive mode를 활성화하면 단일 파드에 대해서도 수행(Test 환경에서만 권장)
Bin packing flow
Cast AI는 Evictor component로 bin-packing을 구현
- 1분 단위로 클러스터 스캔
- 활용도가 낮은 노드의 파드를 다른 노드로 스케쥴링 할 수 있는지 판단
- 가능한 노드와 파드의 조합을 발견시, Evictor는 해당 노드를 drain하고 워크로드를 다른 노드로 이관
- Drain된 노드가 비게되면 노드를 제거 → 리소스 절약
Rebalancing
Rebalancing은 클러스터가 최적의 상태에 도달하게 하는 CAST AI의 기능
최적이 아닌 노드는 자동으로 더 비용효율적이고 최신 구성 세팅의 노드로 교체
주기적으로 Rebalancing 가능한 스케쥴링을 지원
CAST AI Autoscaler와 동일한 알고리즘을 사용하여 최적의 노드 구성을 찾는다
차이점은 스케쥴링에만 포커스를 두지 않고 모든 워크로드를 분석
![](https://blog.kakaocdn.net/dn/bhCBaE/btsHv4UvwhC/nq0Qs5skgNp4kNzgkStHY1/img.png)
목적
초기 온보딩 중에 클러스터를 Rebalancing하여 즉시 비용 절감을 달성 : Rebalancer를 사용하면 온보딩 중에 CAST AI 알고리즘을 통해 클러스터를 실행하고 클러스터를 최적의 상태로 재구성
일상적인 클러스터 실행의 일반적인 부산물인 조각화(fragmentation)를 제거: AutoScaling은 스케줄링할 수 없는 파드를 만족시키는 것을 목표로 하는 사후 대응적인 프로세스로 이러한 사후 대응적인 결정이 누적되면 클러스터가 너무 조각화될 수 있다.
조각화(fragmentation)의 예시:
매시간 하나의 복제본으로 워크로드를 upscaling하는 경우를 예로.
이 복제본은 6개의 CPU를 요청
클러스터는 하루가 지나면 각각 8개의 CPU 용량을 가진 24개의 새 노드
즉, 48개의 사용되지 않는 조각화된 CPU를 갖게됨.
Rebalancer는 워크로드를 더 적은 수의 저렴한 노드로 통합하여 낭비를 줄임으로써 이 문제를 해결하는 것을 목표로 함
비용 비효율성 또는 오래된 노드 구성으로 인해 특정 노드를 교체 : 리밸런싱 작업 중에 대상 노드는 최신 노드 구성 설정을 실행하는 가장 최적의 노드 집합으로 교체
실행 순서
- 새로운 최적 노드 생성
- 오래된 노드를 삭제
- 오래된 노드들은 one by one으로 삭제
Workload Autoscaler
Workload Autoscaler는 워크로드 요청을 자동으로 확장 또는 축소하여 최적의 성능 보장
별도의 Workload Autoscaler 컴포넌트 설치가 필요
![](https://blog.kakaocdn.net/dn/9PHTj/btsHu4OqFXv/VK4VWGToyZCtjMMigktcCk/img.png)
메트릭을 처리해 권장사항 생성
권장사항은 30분마다 재생성되며 requst/limit를 고려하여 생성
기본 구성은
- 5일 간 최고 사용량을 기준
- 메모리는 10% 오버헤드
- CPU는 5일 간 80% 사용량
Policy를 통한 관리
모든 워크로드를 중앙에서 관리할 수 있으며, 여러 워크로드에 동일한 설정을 동시에 적용할 수 있다.
또한 다양한 설정으로 사용자 지정 정책을 생성하여 여러 워크로드에 동시에 적용 가능
configure recommendations
API, 콘솔, Annotations를 통해 권장 사항을 구성하여 특정 리소스에 대한 추가 오버헤드를 추가하거나 권장 사항의 기준선을 선택하는 데 사용되는 기능을 변경할 수 있습니다.
![](https://blog.kakaocdn.net/dn/bCXC8G/btsHwbePQk0/vxLc31Rh7nDPMHN3GsHDNK/img.png)
![](https://blog.kakaocdn.net/dn/ca0HXp/btsHxeIDhm8/YUO8CE4xr8Bbvx7o2KwtVk/img.png)
Event log
Workload Autoscaler의 모든 작업은 Event log에서 확인 할 수 있으며 대시보드에서도 확인 가능하다.
제공되는 정보로는:
- 요청 업데이트 이벤트 - 모든 요청 업데이트 이벤트와 함께 해당 이벤트가 적용된 날짜 및 워크로드에 대한 정보, 이전 요청과 새로 추가된 요청
- 리소스 급증 이벤트 - 이 이벤트는 CAST AI 플랫폼이 알려진 패턴과 비교하여 리소스 사용량이 크게 증가한 것을 발견할 때 기록
- 구성 변경 이벤트 - 워크로드 구성이 언제, 어떤 워크로드에 대해, 누가 변경했는지 확인
- OOM 종료 이벤트 - 해당 이벤트가 언제 발생했는지 확인하고 관련 그래프에서 메모리 사용량을 검토
Event log 페에지에서 Chart로 보기 버튼을 클릭시 해당 이벤트가 발생한 시간과 이벤트 당시 기록을 확인 할 수 있다.
'Engineering' 카테고리의 다른 글
Hashicorp Nomad란? 기능 설명과 설치 가이드 (1) | 2024.06.18 |
---|---|
EKS에서 Spring APP Metric 추적 및 K6 LoadTest (0) | 2024.05.14 |
AWS CloudTrail & CloudWatch & Lambda를 활용한 리소스 생성, 삭제 추적 (0) | 2024.04.25 |
K6 load testing (0) | 2024.04.05 |
EKS Prometheus CPU & Memory DashBoard 구성 (0) | 2024.04.03 |