https://aws.amazon.com/ko/about-aws/whats-new/2024/02/disruption-controls-karpenter/
https://karpenter.sh/v0.34/concepts/disruption/
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
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개씩만 죽을테니까..
스케줄 설정도 가능하다던데, 사람이 몰리는 시간대에는 노드 변경이 없게 막는 용도로 사용 가능할 것 같다.
나는 아직까진 필요성이 없어서 설정 안했다.
끝!
'공부 > Kubernetes' 카테고리의 다른 글
[EKS/Access Configuration] Managed Node Group > Karpenter Migration 시 aws-auth 문제 해결 (1) | 2024.03.28 |
---|---|
[kubernetes/GUI] OpenLens 로 쉽게 port-forward 하기 (0) | 2024.03.28 |
[k8s/EKS] Fargate와 Daemonset (0) | 2024.02.09 |
[EKS/Terraform] Secondary IP 줄이기 with Terraform (25) | 2024.02.06 |
[ingress-nginx] restart 시 downtime 해결 - minReadySeconds (44) | 2023.11.29 |
댓글