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"
{"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"}
helm -n karpenter get values karpenter -o yaml > karpenter-values.yaml
--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 는 자동으로 업데이트되지 않기 때문에, 같이 업그레이드
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"}'
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
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
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"}
kubectl patch ec2nodeclass default --type merge -p '{
"spec": {
"amiFamily": "AL2023",
"amiSelectorTerms": [
{ "id": "ami-03d6afd7d468547e4" }
]
}
}'
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"
% 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
% kubectl -n karpenter get deploy karpenter
NAME READY UP-TO-DATE AVAILABLE AGE
karpenter 2/2 2 2 192d
jungahn@jungahn-MacBooK5 ~ %
% 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 -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
helm -n karpenter rollback karpenter <REVISION> --wait --timeout 10m