본문 바로가기
공부/Kubernetes

[Karpenter] Disruption budget (중단 제어) 사용하기 (v0.34.0~) (feat. karpenter upgrade)

by haejang 2024. 3. 9.
728x90
728x90

 

 

https://aws.amazon.com/ko/about-aws/whats-new/2024/02/disruption-controls-karpenter/

 

Karpenter에 대한 중단 제어 기능 발표

오늘 v0.34.0 릴리스부터 오픈 소스 Karpenter 프로젝트를 사용하는 Amazon Elastic Kubernetes Service(EKS) 고객에게 Kubernetes 클러스터의 Amazon EC2 인스턴스에 획기적인 변경이 적용되는 방법과 시기를 제어할

aws.amazon.com

https://karpenter.sh/v0.34/concepts/disruption/

 

Disruption

Understand different ways Karpenter disrupts nodes

karpenter.sh

 

 

karpenter v0.34.0 부터 중단 제어 기능이 생겼다.

마침 karpenter poc를 진행하며, 생각보다 노드가 휙휙 죽고 생기는 것에 대해 불안감을 느끼던 찰나였으므로 바로 도입을 시도했다.

(사실 팀원분이 거의 다 했는데 내가 잘 얻어먹었다. ㅋㅋ)

 

우선 처음부터 0.34를 설치한다면 상관없겠지만 나는 이미 0.33을 사용중이었고, 업그레이드가 필요했다.

문제는 카펜터 업그레이드 시 crd도 별도로 업그레이드를 해줘야 하는데 (좀 열받음) 아래와 같이 진행하면 된다.

 

helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version v0.34.0
helm upgrade --install karpenter-crd oci://public.ecr.aws/karpenter/karpenter-crd --version v0.34.0

 

필요하다면, crd들에 아래 방법을 통해 label, annotation을 추가해준다

 

kubectl label crd ec2nodeclasses.karpenter.k8s.aws nodeclaims.karpenter.sh nodepools.karpenter.sh app.kubernetes.io/managed-by=Helm --overwrite
kubectl annotate crd ec2nodeclasses.karpenter.k8s.aws nodeclaims.karpenter.sh nodepools.karpenter.sh meta.helm.sh/release-name=karpenter-crd --overwrite
kubectl annotate crd ec2nodeclasses.karpenter.k8s.aws nodeclaims.karpenter.sh nodepools.karpenter.sh meta.helm.sh/release-namespace=karpenter --overwrite

 

 

disruption budget은 nodepool에서 아래와 같이 설정 가능하다

 

https://karpenter.sh/docs/concepts/disruption/#disruption-budgets

 

Disruption

Understand different ways Karpenter disrupts nodes

karpenter.sh

 

apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
  name: default
spec:
  disruption:
    budgets:
    - nodes: "20%"
    - nodes: "5"
    - nodes: "0"
      schedule: "@daily"
      duration: 10m

 

여기서 퍼센테이지 (20%) 입력 시, 현재 노드 수의 해당 퍼센트만큼씩 한번에 죽는다.

즉 0%라고 설정하면 아무 노드도 안죽고, 50%라 설정하면 현재 노드의 절반까지는 한번에 죽을 수 있는 것.

 

나는 계속 원했던게 노드가 죽을 때 최대 한대씩만 죽었으면 했다. 하나 죽고 그 다음에 하나 죽고...

근데 퍼센테이지가 아닌 숫자는 한번에 죽을 수 있는 숫자는 아니고, 중단이 허용되는 횟수? 인 느낌이라, 1이라고 설정해도 1개씩 죽지 않았었다.

(이 부분은 내가 잘못 테스트한걸수도 있어서, 확실하지 않다)

 

%로 설정 시에는 원하는대로 동작하는것을 확인했기 때문에, 나는 그냥 숫자 말고 1%설정을 택했다. 노드가 몇개가 뜨든 1%면 1개씩만 죽을테니까..

 

스케줄 설정도 가능하다던데, 사람이 몰리는 시간대에는 노드 변경이 없게 막는 용도로 사용 가능할 것 같다.

나는 아직까진 필요성이 없어서 설정 안했다.

 

 

끝!

 

 

728x90
728x90

댓글