반응형
1. 들어가며
EKS 노드 운영 비용을 줄이기 위해 on-demand인스턴스와 spot인스턴스를 분배합니다. karpenter 또한 새로 생성한 노드에 대해 on-demand, spot인스턴스 비율을 정할 수 있습니다.
2. 설정방법
karpenter는 capacity-spread설정을 사용하여 on-demand, spot인스턴스를 분배합니다. 아래 예제는 on-demand:spot 비율을 1:2로 설정합니다. capacity-spread로 비율을 설정할 때 capacity-type을 설정해야 합니다.
# on-demand 설정
apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
name: on-demand
spec:
template:
spec:
requirements:
- key: "karpenter.sh/capacity-type"
operator: In
values: ["on-demand"]
- key: capacity-spread
operator: In
values:
- "1"
# spot 설정
apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
name: spot
spec:
template:
spec:
requirements:
- key: "karpenter.sh/capacity-type"
operator: In
values: ["spot"]
- key: capacity-spread
operator: In
values:
- "2"
- "3"
pod에서는 topologySpreadConstraints를 설정하고 capacity-spread를 topologyKey키로 사용합니다.
topologySpreadConstraints:
- maxSkew: 1
topologyKey: capacity-spread
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: example-17-teama
3. 실습
실습은 deployment를 on-demand, spot인스턴스를 분배하여 배포합니다. on-demand:spot인스턴스 비율을 1:2로 배포합니다. 예제코드는 저의 github에 공개되어 있습니다.
nodepool를 배포합니다. nodepool은 on-demand, spot 두 종류가 있습니다.
kubectl apply -f ./on-demand.yaml
kubectl apply -f ./spot.yaml
nodepool은 capacity-spread를 사용하여 on-demand:spot비율을 1:2로 설정합니다.
deployment를 배포합니다.
kubectl apply -f inflate_deployment.yaml
pod 상태가 running인지 확인합니다.
kubectl get pod
pod가 on-demand:spot인스턴스로 분배 스케쥴링되었는지 확인하려면, kubectl get node로 확인하면 됩니다. capacity-type node label으로 인스턴스 타입을 확인하면 됩니다.
kubectl get nodes -L karpenter.sh/capacity-type -L capacity-spread
반응형
'전공영역 공부 기록' 카테고리의 다른 글
Pod 안정성을 높이는 쿠버네티스 설정 (33) | 2024.07.06 |
---|---|
EKS upgrade in-place방식에서 가장 걱정했던 것 (3) | 2024.07.01 |
kubernetes graceful shtudown이 중요한 이유 (0) | 2024.06.16 |
curl 명령어 생성은 chatgpt 4.o로! (0) | 2024.06.16 |
pycharm에서 Tab 크기를 2로 설정하는 방법 (0) | 2024.06.09 |