노드를 Spot으로 운영하다보면 가장 고민이 되는 부분이 Fail-over와더 작은 Spot 노드로 변경할 수 있을때 변경이 가능한가? 이다.
하지만 CAS에서는 Spot 노드에 대해서 노드 통/폐합 작업을 하지 않는다. 하지만 Karpenter는 노드 통/폐합 기능을 제공한다!
Karpenter를 통해 Provisioning(Spot) + Deprovisioning 까지 같이 적용한다면 노드 비용을 극한까지 효율화할 수 있다.
- 다만, 아무리 Karpenter를 도입하더라도 Deployment의 Resource.Request를 높게 잡아버리면.. 효율이 떨어진다.
- Karpenter 도입 + Resouce.Reuqest도 어떤식으로든? 조정을 해야한다.
[Karpenter] Karpenter를 활용하여 EKS 노드 비용 최적화[1/2]
많은 기사에서도 접할 수 있듯이 올해 스타트업의 시장이 좋지 않다. 그래서 현재 재직중인 회사에서도 불필요한 또는 비효율적인 AWS 인프라 비용을 줄이라는 특명이 내려왔다. 그래서 AWS 인프
dobby-isfree.tistory.com
위 게시물에 이어서 이번에는 Deprovisioning에 대해서 알아보도록 하자!
Deprovisioning은 노드를 더 효율적으로 사용하지 위해 각 사용량에 맞춰서 통합 노드를 만드는것이다.
Deprovisioning
쉽게 말하면 각 노드에 현재 할당되어 있는 Pod 요청량을 보고, 통합해서 더 비용을 줄일 수 있다면 노드를 통/폐합을 하는것이다.
Deprovisioning
Understand different ways Karpenter deprovisions nodes
karpenter.sh
Karpenter Provisioning.yaml에 아래 옵션을 추가함으로써 Deprovisioning을 할 수 있다.
- ttlSecondsAfterEmpty
- 노드에 Daemonset만 있을 경우, 해당 옵션에 정해진 시간이 지나면 노드를 자동으로 삭제해준다.
- 하지만 단점은 Spot 노드에 대해서는 적용되지 않는다..
- Spot 노드는 언제든 삭제 가능한 노드라고 생각해서 임의로 삭제하지 않는것 같다.
- consolidation.enabled
- 노드의 상황?을 보고 통/폐합하여 더 저렴한 노드로 통/폐합하는 옵션이다.
- 하지만 단점은 Spot 노드에 대해서는 적용되지 않는다..
- Spot 노드는 언제든 삭제 가능한 노드라고 생각해서 임의로 삭제하지 않는것 같다.
- ttlSecondsUntilExpired
- 노드 생성 시간이 임계치 시간을 넘어가면 자동으로 최신 AMI 이미지로 노드를 새로 생성한다.
- ttlSecondsUntilExpired 옵션을 통해서는 생성 시간을 기준으로 노드를 삭제하고 새롭게 생성하기 떄문에 Daemonset만 존재하는 노드라도 정해진 시간에 노드가 삭제되어 노드 비용을 최적화할 수 있다.
- 위 2가지 옵션을 모두 적용하더라도 Spot 노드로 낭비되는 비용이 발생할 수 있는데, 이것을 극한의 효율까지 올려준다.
적용하는 방법은 provisioner.yaml 파일에 시간만 추가하면 간단하게 적용할 수 있다.
아래와 같이 적용하면 Daemonset이 존재하는 노드는 30초 후에 노드를 삭제하게 되고, 각 노드는 2시간마다 노드를 새롭게 생성한다.
spec:
'''''
ttlSecondsAfterEmpty: 30
ttlSecondsUntilExpired: 7200
ttlSecondsUntilExpired를 적용하면 정해진 시간마다 노드를 삭제하고 생성하기 때문에 아래아 같이 age가 매우 짧다.
- 주의점은 노드의 age가 동일할때는 노드가 한번에 삭제되고/생성되기 때문에 서비스에 영향을 줄 수 있다.
- 그래서 Karpenter 적용 이후, 노드를 임의로 delete 하면서 동시에 노드가 삭제되지 않도록 age를 조정해야 한다.
Karpenter를 적용해서 노드를 On-demand -> Spot으로 전환 그리고 노드 통/폐합까지 적용하면 EKS 노드 운영 비용을 최소 50%이상 경감할 수 있다. 그리고 Docs도 매우 상세하게 제공하기 때문에 적용하는것 또한 크게 어렵지 않다.
요즘같이 어려운시기에 AWS 비용을 효율적으로 사용하는 방법에 대해서 알아보았다.
개발 클러스터에 적용한 다음에 순차적으로 적용범위를 늘려가서 비용을 최적화한다면 좋은 성과가 될 수 있다.
모든 데브옵스 직무를 하시는 담당자분들 힘내세요!!