[k8s] EKS Karpenter 버전 업그레이드하기 with Helm

Woong·2026년 1월 21일

Docker, k8s

목록 보기
29/38

EKS 버전 업데이트

  • EKS k8s 버전을 업데이트하여도, EKS 에 설치된 karpenter 버전은 별도로 업데이트 필요

karpenter 버전 불일치 점검

  • 버전 점검
kubectl -n karpenter get deploy karpenter -o=jsonpath='{.spec.template.spec.containers[0].image}{"\n"}'
public.ecr.aws/karpenter/controller:1.1.2@sha256:51440fa5c417589ff8f45154960490e9d357f83b6f582bd511c5b0d21c9b482c
  • 에러 로그 점검
kubectl -n karpenter logs deploy/karpenter --tail=200 | egrep -i "error|compatible|version"
  • 아래와 같은 로그 발생시 K8s, karpenter 간 버전 불일치 이슈
{"level":"ERROR","time":"2026-01-15T03:20:52.251Z","logger":"controller","message":"Reconciler error","commit":"8f399a9","controller":"providers.version","namespace":"","name":"","reconcileID":"9eced983-bf4d-48ff-9af7-a7a5da765594","error":"updating version, validating kubernetes version, karpenter version is not compatible with K8s version 1.32"}

karpenter values 백업

  • 현재 클러스터의 values 설정 백업
helm -n karpenter get values karpenter -o yaml > karpenter-values.yaml

karpenter 업그레이드

  • karpenter 버전 업그레이드
    • 실행 전 --dry-run 옵션으로 사전 체크 가능
    • https://charts.karpenter.sh 는 업데이트 중단되었으므로 요주의
helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter \
  --version 1.8.5 \
  --namespace karpenter \
  -f karpenter-values.yaml \
  --wait --timeout 10m

karpenter-crd 버전 업그레이드

  • karpenter 만 업그레이드하면 CRD 는 자동으로 업데이트되지 않기 때문에, 같이 업그레이드

  • ownership 이 helm 인지 먼저 점검

kubectl get crd nodepools.karpenter.sh -o jsonpath='{.metadata.labels.app\.kubernetes\.io/managed-by}{"\n"}'
kubectl get crd nodepools.karpenter.sh -o jsonpath='{.metadata.annotations.meta\.helm\.sh/release-name}{"\n"}'
kubectl get crd nodepools.karpenter.sh -o jsonpath='{.metadata.annotations.meta\.helm\.sh/release-namespace}{"\n"}'
  • ownership 이 이 아니라면 helm 으로 변경
for crd in nodepools.karpenter.sh nodeclaims.karpenter.sh ec2nodeclasses.karpenter.k8s.aws; do
  kubectl label crd $crd app.kubernetes.io/managed-by=Helm --overwrite
  kubectl annotate crd $crd meta.helm.sh/release-name=karpenter-crd --overwrite
  kubectl annotate crd $crd meta.helm.sh/release-namespace=karpenter --overwrite
done
  • karpenter-crd 를 karpenter 와 동일한 버전으로 업그레이드
    • Server-Side Apply 충돌이 있을 경우 --force-conflicts 옵션 추가하여 강제로 소유권 이동
helm upgrade --install karpenter-crd oci://public.ecr.aws/karpenter/karpenter-crd \
  --version 1.8.5 \
  -n karpenter --create-namespace \
  --force-conflicts

nodeclass 업데이트

  • 업데이트된 쿠버네티스 버전에 맞게 AMI 업데이트
    • k8s 1.34 기준으로 권장 AMI id 조회
aws ssm get-parameter \
  --name "/aws/service/eks/optimized-ami/1.34/amazon-linux-2023/x86_64/standard/recommended" \
  --region ap-northeast-1 \
  --query "Parameter.Value" \
  --output text

{"schema_version":"2","image_id":"ami-03d6afd7d468547e4","image_name":"amazon-eks-node-al2023-x86_64-standard-1.34-v20260114","release_version":"1.34.2-20260114"}
  • 위 버전 기준으로 AMI selector 를 업데이트
kubectl patch ec2nodeclass default --type merge -p '{
  "spec": {
    "amiFamily": "AL2023",
    "amiSelectorTerms": [
      { "id": "ami-03d6afd7d468547e4" }
    ]
  }
}'

업그레이드 후 점검

  • karpenter 버전 확인
kubectl -n karpenter get deploy karpenter -o=jsonpath='{.spec.template.spec.containers[0].image}{"\n"}'

ex) public.ecr.aws/karpenter/controller:1.8.5@sha256:4b8a5833ad91e67ec37aa3994d57bb4628117897fd90e67d50e18c01ecbc3ae5

  • 에러 확인
    • karpenter version is not compatible 로그 있는지 점검
kubectl -n karpenter logs deploy/karpenter --tail=200 | egrep -i "error|compatible|version"
  • Karpenter Pod Ready
% kubectl -n karpenter get pods -o wide

NAME                        READY   STATUS    RESTARTS   AGE
karpenter-6c559969c-5r7xh   1/1     Running   0          19m
karpenter-6c559969c-hjwwp   1/1     Running   0          19m
  • Available 점검
% kubectl -n karpenter get deploy karpenter

NAME        READY   UP-TO-DATE   AVAILABLE   AGE
karpenter   2/2     2            2           192d
jungahn@jungahn-MacBooK5 ~ % 
  • nodeClaim 점검
    • READY True 점검
% kubectl get nodeclaim

NAME                      TYPE         CAPACITY    ZONE              NODE                                                READY     AGE
default-bvn6q             c6i.large    on-demand   ap-northeast-1c   ip-10-153-243-158.ap-northeast-1.compute.internal   True      17d
np-app-ondemand-s-fg7wc   c5a.xlarge   on-demand   ap-northeast-1c   ip-10-153-243-145.ap-northeast-1.compute.internal   True      38h
np-batch-spot-m-jrg24     r4.xlarge    spot        ap-northeast-1a                                                       Unknown   3m27s

특이사항 있을 경우 롤백

  • helm history 로 롤백할 REVISION 확인
helm -n karpenter history karpenter
REVISION	UPDATED                 	STATUS    	CHART           	APP VERSION	DESCRIPTION     
1       	Mon Jul  7 08:17:01 2025	superseded	karpenter-1.1.2 	1.1.2      	Install complete
2       	Thu Jan 15 18:15:19 2026	superseded	karpenter-0.16.3	0.16.3     	Upgrade complete
3       	Thu Jan 15 18:21:55 2026	deployed  	karpenter-1.1.2 	1.1.2      	Rollback to 1
4       	Fri Jan 16 08:51:51 2026	deployed  	karpenter-1.8.5 	1.8.5      	Upgrade complete
  • 원하는 revision 으로 롤백
helm -n karpenter rollback karpenter <REVISION> --wait --timeout 10m

0개의 댓글