전공영역 공부 기록

karpenter on-demand:ratio 분배 설정

악분 2024. 6. 22. 01:45
반응형

1. 들어가며

EKS 노드 운영 비용을 줄이기 위해 on-demand인스턴스와 spot인스턴스를 분배합니다. karpenter 또한 새로 생성한 노드에 대해 on-demand, spot인스턴스 비율을 정할 수 있습니다.

 

2. 설정방법

karpentercapacity-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-spreadtopologyKey키로 사용합니다.

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를 배포합니다. nodepoolon-demand, spot 두 종류가 있습니다.

kubectl apply -f ./on-demand.yaml
kubectl apply -f ./spot.yaml

 

nodepoolcapacity-spread를 사용하여 on-demand:spot비율을 1:2로 설정합니다.

 

deployment를 배포합니다.

kubectl apply -f inflate_deployment.yaml

 

pod 상태가 running인지 확인합니다.

kubectl get pod

 

podon-demand:spot인스턴스로 분배 스케쥴링되었는지 확인하려면, kubectl get node로 확인하면 됩니다. capacity-type node label으로 인스턴스 타입을 확인하면 됩니다.

kubectl get nodes -L karpenter.sh/capacity-type -L capacity-spread

반응형